52832 MDK代码分析之LED和按键

来源:互联网 发布:得力考勤机导出数据 编辑:程序博客网 时间:2024/05/16 17:23

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, &params);
--> 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");
    }
}

 

 

 

 


 

0 0
原创粉丝点击