ota gatt通信问题



  • 用二个FR8016H Dongle,分别用作主从AT,能正常执行AT命令及透传等功能,希望能通过主机对从机进行代码更新等工作。
    已在user_entry_after_ble_init(void)中均添加 ota_gatt_add_service(); 能通过手机与从机进行可选择的AT或ota服务进行数据交换。
    想通过Dongle主机与发信息给从机进行OTA服务,将根据 at_spsc_send_data()修改并增加 void ota_gatt_send_data(uint8_t conidx,uint8_t *data, uint8_t len) 如下:
    void ota_gatt_send_data(uint8_t conidx,uint8_t *data, uint8_t len)
    {
    //if(l2cm_get_nb_buffer_available() > 0)
    {
    gatt_client_write_t write;
    write.conidx = conidx;
    write.client_id = ota_svc_id;
    // write.att_idx = 1; //TX
    write.att_idx = OTA_ATT_IDX_CHAR_VALUE_TX; //TX
    write.p_data = data;
    write.data_len = MIN(len,gatt_get_mtu(conidx) - 3);
    // gatt_client_write_cmd(write);
    gatt_client_write_req(write);
    }
    }
    在 at_task_func()的AT_RECV_TRANSPARENT_DATA 事件中将at_spsc_send_data()替换为ota_gatt_send_data():
    #if 0
    if(gAT_buff_env.peer_param[gAT_ctrl_env.transparent_conidx].link_mode == SLAVE_ROLE)
    at_spss_send_data(gAT_ctrl_env.transparent_conidx, gAT_env.at_recv_buffer,gAT_env.at_recv_index);
    else if(gAT_buff_env.peer_param[gAT_ctrl_env.transparent_conidx].link_mode == MASTER_ROLE) //master
    at_spsc_send_data(gAT_ctrl_env.transparent_conidx, gAT_env.at_recv_buffer,gAT_env.at_recv_index);
    #else
    co_printf("\r\n transparent_conidx:%d ota_gatt_send_data:",gAT_ctrl_env.transparent_conidx);
    show_reg(gAT_env.at_recv_buffer,gAT_env.at_recv_index,1);
    co_printf("\r\n");
    ota_gatt_send_data(gAT_ctrl_env.transparent_conidx,gAT_env.at_recv_buffer,gAT_env.at_recv_index);
    // ota_gatt_report_notify(gAT_ctrl_env.transparent_conidx,gAT_env.at_recv_buffer,gAT_env.at_recv_index);
    #endif
    本希望能在从机 OTA_gatt服务端的到来自主机的信息,但实际却是在从机AT GATT服务端(SPSS)收到数据,请教问题出在哪? 急!!!

    • 列表


  • 0_1711951860645_ece41988-7c31-48cc-b101-48f20fe51a85-主从机互相传输数据.png
    找到你对应的OTA服务