initial commit from esp-idf example
This commit is contained in:
124
main.c
Normal file
124
main.c
Normal file
@@ -0,0 +1,124 @@
|
||||
#include "common.h"
|
||||
#include "gap.h"
|
||||
#include "gatt_svc.h"
|
||||
#include "heart_rate.h"
|
||||
#include "led.h"
|
||||
|
||||
void ble_store_config_init(void);
|
||||
|
||||
static void on_stack_reset(int reason);
|
||||
static void on_stack_sync(void);
|
||||
static void nimble_host_config_init(void);
|
||||
static void nimble_host_task(void *param);
|
||||
|
||||
/*
|
||||
* Stack event callback functions
|
||||
* - on_stack_reset is called when host resets BLE stack due to errors
|
||||
* - on_stack_sync is called when host has synced with controller
|
||||
*/
|
||||
static void on_stack_reset(int reason) {
|
||||
/* On reset, print reset reason to console */
|
||||
ESP_LOGI(TAG, "nimble stack reset, reset reason: %d", reason);
|
||||
}
|
||||
|
||||
static void on_stack_sync(void) {
|
||||
/* On stack sync, do advertising initialization */
|
||||
adv_init();
|
||||
}
|
||||
|
||||
static void nimble_host_config_init(void) {
|
||||
/* Set host callbacks */
|
||||
ble_hs_cfg.reset_cb = on_stack_reset;
|
||||
ble_hs_cfg.sync_cb = on_stack_sync;
|
||||
ble_hs_cfg.gatts_register_cb = gatt_svr_register_cb;
|
||||
ble_hs_cfg.store_status_cb = ble_store_util_status_rr;
|
||||
|
||||
/* Store host configuration */
|
||||
ble_store_config_init();
|
||||
}
|
||||
|
||||
static void nimble_host_task(void *param) {
|
||||
/* Task entry log */
|
||||
ESP_LOGI(TAG, "nimble host task has been started!");
|
||||
|
||||
/* This function won't return until nimble_port_stop() is executed */
|
||||
nimble_port_run();
|
||||
|
||||
/* Clean up at exit */
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
|
||||
static void heart_rate_task(void *param) {
|
||||
/* Task entry log */
|
||||
ESP_LOGI(TAG, "heart rate task has been started!");
|
||||
|
||||
/* Loop forever */
|
||||
while (1) {
|
||||
/* Update heart rate value every 1 second */
|
||||
update_heart_rate();
|
||||
ESP_LOGI(TAG, "heart rate updated to %d", get_heart_rate());
|
||||
|
||||
/* Send heart rate indication if enabled */
|
||||
send_heart_rate_indication();
|
||||
|
||||
/* Sleep */
|
||||
vTaskDelay(HEART_RATE_TASK_PERIOD);
|
||||
}
|
||||
|
||||
/* Clean up at exit */
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
|
||||
void app_main(void) {
|
||||
/* Local variables */
|
||||
int rc;
|
||||
esp_err_t ret;
|
||||
|
||||
/* LED initialization */
|
||||
led_init();
|
||||
|
||||
/*
|
||||
* NVS flash initialization
|
||||
* Dependency of BLE stack to store configurations
|
||||
*/
|
||||
ret = nvs_flash_init();
|
||||
if (ret == ESP_ERR_NVS_NO_FREE_PAGES ||
|
||||
ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
|
||||
ESP_ERROR_CHECK(nvs_flash_erase());
|
||||
ret = nvs_flash_init();
|
||||
}
|
||||
if (ret != ESP_OK) {
|
||||
ESP_LOGE(TAG, "failed to initialize nvs flash, error code: %d ", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
/* NimBLE stack initialization */
|
||||
ret = nimble_port_init();
|
||||
if (ret != ESP_OK) {
|
||||
ESP_LOGE(TAG, "failed to initialize nimble stack, error code: %d ",
|
||||
ret);
|
||||
return;
|
||||
}
|
||||
|
||||
/* GAP service initialization */
|
||||
rc = gap_init();
|
||||
if (rc != 0) {
|
||||
ESP_LOGE(TAG, "failed to initialize GAP service, error code: %d", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
/* GATT server initialization */
|
||||
rc = gatt_svc_init();
|
||||
if (rc != 0) {
|
||||
ESP_LOGE(TAG, "failed to initialize GATT server, error code: %d", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
/* NimBLE host configuration initialization */
|
||||
nimble_host_config_init();
|
||||
|
||||
/* Start NimBLE host task thread and return */
|
||||
xTaskCreate(nimble_host_task, "NimBLE Host", 4*1024, NULL, 5, NULL);
|
||||
xTaskCreate(heart_rate_task, "Heart Rate", 4*1024, NULL, 5, NULL);
|
||||
return;
|
||||
}
|
||||
Reference in New Issue
Block a user