Преглед изворни кода

add:ble异步执行结果的回调

豆豆 пре 8 месеци
родитељ
комит
4a69ff2038

+ 19 - 0
components/airlink/src/exec/luat_airlink_bt_exec_task.c

@@ -389,6 +389,25 @@ static void drv_bt_task(void *param) {
                 LLOGD("unknow bt cmd id %d", msg->cmd_id);
                 break;
             }
+            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) + sizeof(luat_drv_ble_result_t)
+            };
+            luat_airlink_cmd_t* cmd = luat_airlink_cmd_new(0x511, item.len - sizeof(luat_airlink_cmd_t));
+            if (cmd != NULL) {
+                luat_drv_ble_msg_t *resp_msg = (luat_drv_ble_msg_t *)cmd->data;
+                resp_msg->id = seq;
+                resp_msg->cmd_id = LUAT_DRV_BT_CMD_BLE_EXEC_RESULT;
+                void* ptr = cmd->data + sizeof(luat_drv_ble_msg_t);
+                luat_drv_ble_result_t resp_result = {.last_id = msg->id, .result = ret};
+                memcpy(ptr, &resp_result, sizeof(luat_drv_ble_result_t));
+                item.cmd = cmd;
+                luat_airlink_queue_send(LUAT_AIRLINK_QUEUE_CMD, &item);
+            }
+            else
+            {
+                LLOGW("out of memory when alloc ble event");
+            }
             luat_heap_free(msg);
         }
         luat_rtos_task_sleep(5); // TODO 删掉

+ 10 - 0
components/airlink/src/exec/luat_airlink_cmd_exec_bluetooth.c

@@ -133,6 +133,16 @@ int luat_airlink_cmd_exec_bt_resp_cb(luat_airlink_cmd_t *cmd, void *userdata) {
     return 0;
 }
 
+int luat_airlink_cmd_exec_bt_resp_result_cb(luat_airlink_cmd_t *cmd, void *userdata) {
+    if (cmd->len < 10) {
+        return -100;
+    }
+    luat_drv_ble_msg_t* msg = (luat_drv_ble_msg_t *)(cmd->data);
+    luat_drv_ble_result_t *resp_result = (luat_drv_ble_result_t *)(msg->data);
+    LLOGI("执行结果 result: %d", resp_result->result);
+    return 0;
+}
+
 #endif
 
 #if defined(LUAT_USE_AIRLINK_EXEC_BLUETOOTH) || defined(LUAT_USE_AIRLINK_EXEC_BLUETOOTH_RESP)

+ 2 - 0
components/airlink/src/luat_airlink_cmds.c

@@ -72,6 +72,7 @@ CMD_DEFINE(uart_sent_cb);
 CMD_DEFINE(bt_request);
 
 CMD_DEFINE(bt_resp_cb);
+CMD_DEFINE(bt_resp_result_cb);
 
 // PM指令, 0x600开始
 CMD_DEFINE(pm_request);
@@ -145,6 +146,7 @@ __USER_FUNC_IN_RAM__ const luat_airlink_cmd_reg_t airlink_cmds[] = {
 #endif
 #ifdef LUAT_USE_AIRLINK_EXEC_BLUETOOTH_RESP
     CMD_REG(0x510, bt_resp_cb),
+    CMD_REG(0x511, bt_resp_result_cb),
 #endif
 
 #ifdef LUAT_USE_AIRLINK_EXEC_PM

+ 7 - 1
components/bluetooth/include/luat_drv_ble.h

@@ -11,6 +11,12 @@ typedef struct luat_drv_ble_msg
     uint8_t data[0];
 }luat_drv_ble_msg_t;
 
+typedef struct luat_drv_ble_result
+{
+    uint64_t last_id;
+    int32_t result;
+}luat_drv_ble_result_t;
+
 // 定义蓝牙cmd id
 
 enum {
@@ -42,7 +48,7 @@ enum {
 
 
     LUAT_DRV_BT_CMD_BLE_EVENT_CB = 128, // 事件回调
-
+    LUAT_DRV_BT_CMD_BLE_EXEC_RESULT,
     LUAT_DRV_BT_CMD_MAX
 };
 

+ 2 - 2
components/network/libftp/luat_ftp_client.c

@@ -539,9 +539,9 @@ static void ftp_task(void *param){
 				offset += len;
 				// BK72xx平台, 内存使用量过大时, wifi会死, 这里加点sleep试试
 				#if defined(CONFIG_LUATOS)
-				if (offset % 32*1024 == 0) {
+				// if (offset % 32*1024 == 0) {
 					luat_rtos_task_sleep(200);
-				}
+				// }
 				#endif
 			}
 			luat_heap_free(buff);