on_ble_evt --> ble_evt_dispatch --> ble_stack_init -->
ble_lbs_on_button_change
static void on_write(ble_lbs_t * p_lbs, ble_evt_t * p_ble_evt) //里面包含了手机发送来的数据
{
ble_gatts_evt_write_t * p_evt_write = &p_ble_evt->evt.gatts_evt.params.write;
if ((p_evt_write->handle == p_lbs->led_char_handles.value_handle) &&
(p_evt_write->len == 1) &&
(p_lbs->led_write_handler != NULL))
{
p_lbs->led_write_handler(p_lbs, p_evt_write->data[0]);
}
}
p_evt_write->data[0] 里面包含着私有协议
//下面这两个函数的代码区别是什么??
static void on_write(ble_evt_t * p_ble_evt)
on_write --> ble_conn_params_on_ble_evt(ble_evt_t * p_ble_evt) --> ble_evt_dispatch(ble_evt_t * p_ble_evt) --> ble_stack_init -->
static void on_write(ble_lbs_t * p_lbs, ble_evt_t * p_ble_evt)
on_write --> ble_lbs_on_ble_evt(ble_lbs_t * p_lbs, ble_evt_t * p_ble_evt) --> ble_evt_dispatch(ble_evt_t * p_ble_evt) --> ble_stack_init
按键的函数分析
button_event_handler 函数的分析
button_event_handler --> buttons_init
#define BUTTON_1 13
#define BUTTON_2 14
#define BUTTON_3 15
#define BUTTON_4 16
static void buttons_init(void)
{
uint32_t err_code;
//The array must be static because a pointer to it will be saved in the button handler module.
static app_button_cfg_t buttons[] =
{
{LEDBUTTON_BUTTON_PIN, false, BUTTON_PULL, button_event_handler},
{14, false, BUTTON_PULL, button_event_handler},//根据例程添加的键值
{15, false, BUTTON_PULL, button_event_handler},
{16, false, BUTTON_PULL, button_event_handler}
};
err_code = app_button_init(buttons, sizeof(buttons) / sizeof(buttons[0]),
BUTTON_DETECTION_DELAY);
APP_ERROR_CHECK(err_code);
}
typedef struct
{
uint8_t pin_no; /**< Pin to be used as a button. */
uint8_t active_state; /**< APP_BUTTON_ACTIVE_HIGH or APP_BUTTON_ACTIVE_LOW. */
nrf_gpio_pin_pull_t pull_cfg; /**< Pull-up or -down configuration. */
app_button_handler_t button_handler; /**< Handler to be called when button is pushed. */
} app_button_cfg_t;
sd_ble_gatts_hvx(p_lbs->conn_handle, ¶ms);
--> uint32_t ble_lbs_on_button_change(ble_lbs_t * p_lbs, uint8_t button_state)
--> static void button_event_handler(uint8_t pin_no, uint8_t button_action)
LED灯的解析:
static void led_write_handler(ble_lbs_t * p_lbs, uint8_t led_state)
static void led_write_handler(ble_lbs_t * p_lbs, uint8_t led_state)
{
if (led_state)
{
// LEDS_ON(BSP_LED_2_MASK);//BSP_LED_2_MASK LEDBUTTON_LED_PIN
LEDS_ON(BSP_LED_3_MASK);
NRF_LOG_INFO("Received LED ON!\r\n");
}
else
{
// LEDS_OFF(BSP_LED_2_MASK);
LEDS_OFF(BSP_LED_3_MASK);
NRF_LOG_INFO("Received LED OFF!\r\n");
}
}