1574|4

12

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【雅特力AT32WB415系列蓝牙BLE 5.0 MCU测评】3.1 MCU端产生事件发送指令至蓝牙APP [复制链接]

本帖最后由 General-P 于 2022-8-24 22:36 编辑

MCU端产生事件发送指令至蓝牙APP

一、前言

    在前面,我们以及测试了蓝牙发送指令控制MCU的状态,测试成功后,我就一直在想能不能编写实现双向通信的功能函数,但是在查阅了资料后我才知道原来官方早就封装好了对应函数,只需要自己编写MCU端的产生事件,就可以通过函数发送对应的指令到蓝牙APP上,十分方便。

二、参考官方例程

    打开官方提供的蓝牙工程,找到app_custom.c文件,在42行的位置找到下面这个函数。

static int custom_value_req_ind_handler(ke_msg_id_t const msgid,
                                          struct custom_value_req_ind const *param,
                                          ke_task_id_t const dest_id,
                                          ke_task_id_t const src_id)
{
    const uint8_t led_on = 1, led_off = 0;
    // Initialize length
    uint8_t len = 0;
    // Pointer to the data
    uint8_t *data = NULL;
  
    at_rsp_content* rsp_content;
    
    // Check requested value
    if(uart_tp_mode_flag == false)
    {
      switch (param->value)
      {
          case CUSTOM_REMOTE_IO_STATUS:
          {
              // AT command
              UART_SEND_DATA(AT_CMD_IO_GET);
              // Wait for response
              rsp_content = at_wait_for_rsp();
              // Set information
              len = APP_CUSTOM_REMOTE_IO_LEN;
              if(rsp_content->data[4] == 0x31)
              {
                data = (uint8_t *)led_off;
              }
              else
              {
                data = (uint8_t *)led_on;
              }
          } break;       

          default:
              ASSERT_ERR(0);
              break;
      }
    }
    
    // Allocate confirmation to send the value
    struct custom_value_cfm *cfm_value = KE_MSG_ALLOC_DYN(CUSTOM_VALUE_CFM,
            src_id, dest_id,
            custom_value_cfm,
            len);

    // Set parameters
    cfm_value->value = param->value;
    cfm_value->length = len;
    if (len)
    {
        // Copy data
        memcpy(&cfm_value->data[0], data, len);
    }
    // Send message
    ke_msg_send(cfm_value);

    return (KE_MSG_CONSUMED);
}

    其中这段代码是控制发送的核心    

              if(rsp_content->data[4] == 0x31)
              {
                data = (uint8_t *)led_off;
              }
              else
              {
                data = (uint8_t *)led_on;
              }

    通过接收MCU端产生的相应事件指令即可向APP方发送对应的指令。

三、实验效果

    

    发送 02指令后,按下按键,开发板上的LED3点亮,点击蓝牙 APP中的READ AGAIN就可以查看到WB415发送来的LED状态消息啦。

此帖出自RF/无线论坛

最新回复

官方要是封装好API开发就容易不少!   详情 回复 发表于 2022-8-26 15:27
点赞 关注
 

回复
举报

6060

帖子

6

TA的资源

版主

沙发
 

这个时间发送的本质是广播信息还是透传?

此帖出自RF/无线论坛

点评

应该是广播,官方的文档里也没有说得很详细,当然也有可能是我没发现  详情 回复 发表于 2022-8-26 21:38
 
 

回复

6773

帖子

2

TA的资源

版主

板凳
 

官方要是封装好API开发就容易不少!

此帖出自RF/无线论坛

点评

这个确实是,我自己想实现想要的功能时总是要在官方工程的各种函数里面找官方的逻辑,然后对应修改,要是能封装成API的话的确是会方便很多  详情 回复 发表于 2022-8-26 21:33
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

4
 
wangerxian 发表于 2022-8-26 15:27 官方要是封装好API开发就容易不少!

这个确实是,我自己想实现想要的功能时总是要在官方工程的各种函数里面找官方的逻辑,然后对应修改,要是能封装成API的话的确是会方便很多

此帖出自RF/无线论坛
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

5
 
秦天qintian0303 发表于 2022-8-25 13:52 这个时间发送的本质是广播信息还是透传?

应该是广播,官方的文档里也没有说得很详细,当然也有可能是我没发现

此帖出自RF/无线论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表