Просмотр исходного кода

add: airlink,bt,从手机写数据,设备可以读到了

Wendal Chen 9 месяцев назад
Родитель
Сommit
3d088abe76

+ 16 - 12
components/airlink/src/exec/luat_airlink_bt_exec_task.c

@@ -28,7 +28,7 @@ static void drv_ble_cb(luat_ble_t* luat_ble, luat_ble_event_t event, luat_ble_pa
     LLOGD("drv_ble event %d", event);
     uint64_t seq = luat_airlink_get_next_cmd_id();
     airlink_queue_item_t item = {
-        .len =  sizeof(luat_airlink_cmd_t) + sizeof(luat_drv_ble_msg_t) + (param ? 1000 : 16)
+        .len =  sizeof(luat_airlink_cmd_t) + sizeof(luat_drv_ble_msg_t) + 1024
     };
     luat_airlink_cmd_t* cmd = luat_airlink_cmd_new(0x510, item.len - sizeof(luat_airlink_cmd_t));
     if (cmd == NULL) {
@@ -36,25 +36,29 @@ static void drv_ble_cb(luat_ble_t* luat_ble, luat_ble_event_t event, luat_ble_pa
         return;
     }
     luat_drv_ble_msg_t *msg = (luat_drv_ble_msg_t *)cmd->data;
+    void* ptr = cmd->data + sizeof(luat_drv_ble_msg_t);
     msg->id = seq;
     msg->cmd_id = LUAT_DRV_BT_CMD_BLE_EVENT_CB;
 
     uint32_t tmp = event;
-    memcpy(msg->data, &tmp, 4);
+    memcpy(ptr, &tmp, 4);
     if (param) {
-        if (param->adv_req.data && param->adv_req.data_len > 0) {
-            memcpy(msg->data + 4 + sizeof(luat_ble_param_t), param->adv_req.data, param->adv_req.data_len);
+        LLOGD("param %p", param);
+        if (LUAT_BLE_EVENT_SCAN_REPORT == event && param->adv_req.data && param->adv_req.data_len > 0) {
+            memcpy(ptr + 4 + sizeof(luat_ble_param_t), param->adv_req.data, param->adv_req.data_len);
         }
-        else if (param->read_req.value && param->read_req.len > 0) {
-            memcpy(msg->data + 4 + sizeof(luat_ble_param_t), param->read_req.value, param->read_req.len);
+        else if (LUAT_BLE_EVENT_READ == event && param->read_req.value && param->read_req.len > 0) {
+            LLOGD("read req value %d %p", param->read_req.len, param->read_req.value);
+            memcpy(ptr + 4 + sizeof(luat_ble_param_t), param->read_req.value, param->read_req.len);
         }
-        else if (param->write_req.value && param->write_req.len > 0) {
-            memcpy(msg->data + 4 + sizeof(luat_ble_param_t), param->write_req.value, param->write_req.len);
+        else if (LUAT_BLE_EVENT_WRITE == event && param->write_req.value && param->write_req.len > 0) {
+            LLOGD("write req value %d %p", param->write_req.len, param->write_req.value);
+            memcpy(ptr + 4 + sizeof(luat_ble_param_t), param->write_req.value, param->write_req.len);
         }
-        param->adv_req.data = NULL;
-        param->read_req.value = NULL;
-        param->write_req.value = NULL;
-        memcpy(msg->data + 4, param, sizeof(luat_ble_param_t));
+        // param->adv_req.data = NULL;
+        // param->read_req.value = NULL;
+        // param->write_req.value = NULL;
+        memcpy(ptr + 4, param, sizeof(luat_ble_param_t));
     }
 
     item.cmd = cmd;

+ 14 - 7
components/airlink/src/exec/luat_airlink_cmd_exec_bluetooth.c

@@ -60,14 +60,21 @@ int luat_airlink_cmd_exec_bt_resp_cb(luat_airlink_cmd_t *cmd, void *userdata) {
         luat_ble_event_t event = (luat_ble_event_t)tmp;
         luat_ble_param_t param = {0};
         memcpy(&param, msg->data + 4, sizeof(luat_ble_param_t));
-        // 以下数据暂时填0, 还没想好怎么传
-        param.adv_req.data_len = 0;
-        param.adv_req.data = NULL;
-        param.read_req.len = 0;
-        param.read_req.value = NULL;
-        param.write_req.len = 0;
-        param.write_req.value = NULL;
         LLOGD("收到bt event %d %d", event, cmd->len - sizeof(luat_drv_ble_msg_t));
+
+        // 把能处理的先尝试处理一下
+        if (event == LUAT_BLE_EVENT_WRITE && param.write_req.len) {
+            param.write_req.value = luat_heap_malloc(param.write_req.len);
+            memcpy(param.write_req.value, msg->data + 4 + sizeof(luat_ble_param_t), param.write_req.len);
+        }
+        else if (event == LUAT_BLE_EVENT_READ && param.read_req.len) {
+            param.read_req.value = luat_heap_malloc(param.read_req.len);
+            memcpy(param.read_req.value, msg->data + 4 + sizeof(luat_ble_param_t), param.read_req.len);
+        }
+        else if (event == LUAT_BLE_EVENT_SCAN_REPORT && param.adv_req.data_len) {
+            param.adv_req.data = luat_heap_malloc(param.adv_req.data_len);
+            memcpy(param.adv_req.data, msg->data + 4 + sizeof(luat_ble_param_t), param.adv_req.data_len);
+        }
         g_drv_ble_cb(NULL, event, &param);
         return 0;
     }

+ 2 - 2
components/bluetooth/drv/luat_drv_ble_port.c

@@ -268,8 +268,8 @@ int luat_ble_create_gatt(void* args, luat_ble_gatt_service_t* gatt) {
 
     item.cmd = cmd;
 
-    LLOGD("gatt 数据长度 %d %d %d", item.len, cmd->len, cmd->len - sizeof(luat_drv_ble_msg_t));
-    luat_airlink_print_buff("bt req HEX", cmd->data, cmd->len);
+    // LLOGD("gatt 数据长度 %d %d %d", item.len, cmd->len, cmd->len - sizeof(luat_drv_ble_msg_t));
+    // luat_airlink_print_buff("bt req HEX", cmd->data, cmd->len);
     luat_airlink_queue_send(LUAT_AIRLINK_QUEUE_CMD, &item);
     return 0;
 }