// Initialize LBS. init.led_write_handler = led_write_handler; err_code = ble_lbs_init(&m_lbs, &init); APP_ERROR_CHECK(err_code); } 暂时不看nrf_ble_qwr_init函数~ 主要来看ble_lbs_init,此函数目的是增加led及button的相关Service Characteristic等 uint32_t ble_lbs_init(ble_lbs_t * p_...
staticvoidservices_init(void){ret_code_terr_code;ble_lbs_init_tinit={0};nrf_ble_qwr_init_tqwr_init={0};// Initialize Queued Write Module.qwr_init.error_handler=nrf_qwr_error_handler;err_code=nrf_ble_qwr_init(&m_qwr,&qwr_init);APP_ERROR_CHECK(err_code);// Initialize LBS.init.led...
static void services_init(void) { uint32_t err_code; ble_lbs_init_t init; init.led_write_handler = led_write_handler; err_code = ble_lbs_init(&m_lbs, &init); APP_ERROR_CHECK(err_code); } /**@brief Function for initializing security parameters. */ static void sec_params_init(vo...
以SDK15.1/ble_app_blinky工程为例, 追踪它的BLE回调事件的调用逻辑。 在main.c –> ble_stack_init()中,调用了: NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL); 其中ble_evt_handler是我们设定的BLE事件回调函数。 NRF_SDH_BLE_OBSERVER是一个异常复杂嵌套宏,经...
在main.c –> ble_stack_init()中,调用了: NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler,NULL); 其中ble_evt_handler是我们设定的BLE事件回调函数。 NRF_SDH_BLE_OBSERVER是一个异常复杂嵌套宏,经过层层解剖,该代码变成如下形式: ...
在main.c –> ble_stack_init()中,调用了: NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL); 其中ble_evt_handler是我们设定的BLE事件回调函数。 NRF_SDH_BLE_OBSERVER是一个异常复杂嵌套宏,经过层层解剖,该代码变成如下形式: ...
ble_stack_init(); //必要 gap_params_init(); //必要 services_init(); //必要 advertising_init(); //必要 conn_params_init(); //视情况而定,如果连接之后不需要协商连接参数,这个函数可以不要 // Start execution. advertising_start(); //必要 ...
p_lbs‐led_write_handler = p_lbs_init‐led_write_handler; UUID 需要重新设置,因为本服务中将要使用一个定制(私有)的 UUID,以代替蓝牙技术联 盟所定义的 UUID。 首先,先定义一个基本 UUID,一种方式是采用 nRFgo Studio 来生成: 1. 打开 nRFgo Studio 2. 在 nRF8001 Setup 菜单中,选择 Edit 128‐bit...
static void advertising_init(void){ ret_code_t err_code; ble_advdata_t advdata; ble_advdata_t srdata; //UUID定义 ble_uuid_t adv_uuids[] = {{LBS_UUID_SERVICE, m_lbs.uuid_type}}; //扫描应答包含UUID memset(&srdata, 0, sizeof(srdata)); srdata.uuids_complete.uuid_cnt = size...
static void timers_init(void) { ret_code_t err_code = app_timer_init(); APP_ERROR_CHECK(err_code); // Create a data generation timer for testing throughput. err_code = app_timer_create(&m_timer_throughput_id, APP_TIMER_MODE_REPEATED, data_throughput_timeout_handler); APP_ERROR_...