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

change: ble,调整函数签名,部分改造ble逻辑

Wendal Chen 7 месяцев назад
Родитель
Сommit
2953668c47

+ 19 - 21
components/bluetooth/include/luat_ble.h

@@ -242,54 +242,52 @@ struct luat_ble{
     uint8_t actv_idx;
     luat_ble_actv_state state;
     luat_ble_cb_t cb;
-    int lua_cb;
-    int ble_ref;
     void* userdata;
 };
 
 // public function
 int luat_ble_uuid_swap(uint8_t* uuid_data, luat_ble_uuid_type uuid_type);
 
-int luat_ble_init(luat_ble_t* luat_ble, luat_ble_cb_t luat_ble_cb);
+int luat_ble_init(void* args, luat_ble_cb_t luat_ble_cb);
 
-int luat_ble_deinit(luat_ble_t* luat_ble);
+int luat_ble_deinit(void* args);
 
-int luat_ble_set_name(luat_ble_t* luat_ble, char* name, uint8_t len);
+int luat_ble_set_name(void* args, char* name, uint8_t len);
 
-int luat_ble_set_max_mtu(luat_ble_t* luat_ble, uint16_t max_mtu);
+int luat_ble_set_max_mtu(void* args, uint16_t max_mtu);
 
 // advertise
-int luat_ble_create_advertising(luat_ble_t* luat_ble, luat_ble_adv_cfg_t* adv_cfg);
+int luat_ble_create_advertising(void* args, luat_ble_adv_cfg_t* adv_cfg);
 
-int luat_ble_set_adv_data(luat_ble_t* luat_ble, uint8_t* adv_buff, uint8_t adv_len);
+int luat_ble_set_adv_data(void* args, uint8_t* adv_buff, uint8_t adv_len);
 
-int luat_ble_set_scan_rsp_data(luat_ble_t* luat_ble, uint8_t* rsp_data, uint8_t rsp_len);
+int luat_ble_set_scan_rsp_data(void* args, uint8_t* rsp_data, uint8_t rsp_len);
 
-int luat_ble_start_advertising(luat_ble_t* luat_ble);
+int luat_ble_start_advertising(void* args);
 
-int luat_ble_stop_advertising(luat_ble_t* luat_ble);
+int luat_ble_stop_advertising(void* args);
 
-int luat_ble_delete_advertising(luat_ble_t* luat_ble);
+int luat_ble_delete_advertising(void* args);
 
 // gatt
-int luat_ble_create_gatt(luat_ble_t* luat_ble, luat_ble_gatt_service_t* luat_ble_gatt_service);
+int luat_ble_create_gatt(void* args, luat_ble_gatt_service_t* luat_ble_gatt_service);
 
 // slaver
-int luat_ble_read_response_value(luat_ble_t* luat_ble, uint8_t conn_idx, uint16_t service_id, uint16_t att_handle, uint8_t *data, uint32_t len);
+int luat_ble_read_response_value(void* args, uint8_t conn_idx, uint16_t service_id, uint16_t att_handle, uint8_t *data, uint32_t len);
 
-int luat_ble_write_notify_value(luat_ble_t* luat_ble, uint8_t conn_idx, uint16_t service_id, uint16_t att_handle, uint8_t *data, uint16_t len);
+int luat_ble_write_notify_value(void* args, uint8_t conn_idx, uint16_t service_id, uint16_t att_handle, uint8_t *data, uint16_t len);
 
 // scanning
-int luat_ble_create_scanning(luat_ble_t* luat_ble, luat_ble_scan_cfg_t* scan_cfg);
+int luat_ble_create_scanning(void* args, luat_ble_scan_cfg_t* scan_cfg);
 
-int luat_ble_start_scanning(luat_ble_t* luat_ble);
+int luat_ble_start_scanning(void* args);
 
-int luat_ble_stop_scanning(luat_ble_t* luat_ble);
+int luat_ble_stop_scanning(void* args);
 
-int luat_ble_delete_scanning(luat_ble_t* luat_ble);
+int luat_ble_delete_scanning(void* args);
 
-int luat_ble_connect(luat_ble_t* luat_ble, uint8_t* adv_addr,uint8_t adv_addr_type);
+int luat_ble_connect(void* args, uint8_t* adv_addr,uint8_t adv_addr_type);
 
-int luat_ble_disconnect(luat_ble_t* luat_ble, uint8_t conn_idx);
+int luat_ble_disconnect(void* args, uint8_t conn_idx);
 
 #endif

+ 5 - 7
components/bluetooth/include/luat_bluetooth.h

@@ -10,18 +10,16 @@
 #define LUAT_BLUETOOTH_MAC_LEN    6
 
 typedef struct luat_bluetooth{
-    luat_ble_t* luat_ble;
-    luat_bt_t* luat_bt;
-    int bluetooth_ref;
+    void* userdata;
 }luat_bluetooth_t;
 
 // bluetooth
 
-int luat_bluetooth_init(luat_bluetooth_t* luat_bluetooth);
-int luat_bluetooth_deinit(luat_bluetooth_t* luat_bluetooth);
+int luat_bluetooth_init(void* args);
+int luat_bluetooth_deinit(void* args);
 
-int luat_bluetooth_get_mac(luat_bluetooth_t* luat_bluetooth, uint8_t *addr);
-int luat_bluetooth_set_mac(luat_bluetooth_t* luat_bluetooth, uint8_t *addr, uint8_t len);
+int luat_bluetooth_get_mac(void* args, uint8_t *addr);
+int luat_bluetooth_set_mac(void* args, uint8_t *addr, uint8_t len);
 
 void luat_bluetooth_mac_swap(uint8_t* mac);
 

+ 1 - 0
components/bluetooth/src/luat_ble.c

@@ -5,6 +5,7 @@
 #include "luat_log.h"
 #define LUAT_LOG_TAG "ble"
 
+luat_ble_cb_t g_ble_cb;
 
 int luat_ble_uuid_swap(uint8_t* uuid_data, luat_ble_uuid_type uuid_type){
     uint8_t len = 0;

+ 5 - 2
components/bluetooth/src/luat_lib_ble.c

@@ -9,6 +9,9 @@
 
 #define LUAT_BLE_TYPE "BLE*"
 
+extern int g_bt_ble_ref;
+extern int g_ble_lua_cb_ref;
+
 static int luatos_ble_callback(lua_State *L, void* ptr){
 	(void)ptr;
     rtos_msg_t* msg = (rtos_msg_t*)lua_topointer(L, -1);
@@ -16,9 +19,9 @@ static int luatos_ble_callback(lua_State *L, void* ptr){
     luat_ble_event_t ble_event = (luat_ble_event_t)msg->arg1;
     luat_ble_param_t* luat_ble_param = (luat_ble_param_t*)msg->arg2;
 
-    lua_geti(L, LUA_REGISTRYINDEX, luat_ble->lua_cb);
+    lua_geti(L, LUA_REGISTRYINDEX, g_ble_lua_cb_ref);
     if (lua_isfunction(L, -1)) {
-        lua_geti(L, LUA_REGISTRYINDEX, luat_ble->ble_ref);
+        lua_geti(L, LUA_REGISTRYINDEX, g_bt_ble_ref);
         lua_pushinteger(L, ble_event);
     }
 

+ 17 - 9
components/bluetooth/src/luat_lib_bluetooth.c

@@ -9,38 +9,46 @@
 
 extern void luat_ble_cb(luat_ble_t* luat_ble, luat_ble_event_t ble_event, luat_ble_param_t* ble_param);
 
+static int s_bt_ref;
+int g_bt_ble_ref;
+int g_ble_lua_cb_ref;
+
 static int l_bluetooth_create_ble(lua_State* L) {
     if (!lua_isuserdata(L, 1)){
         return 0;
     }
-    luat_bluetooth_t* luat_bluetooth = (luat_bluetooth_t *)luaL_checkudata(L, 1, LUAT_BLUETOOTH_TYPE);
+    // luat_bluetooth_t* luat_bluetooth = (luat_bluetooth_t *)luaL_checkudata(L, 1, LUAT_BLUETOOTH_TYPE);
 
-    luat_bluetooth->luat_ble = (luat_ble_t*)lua_newuserdata(L, sizeof(luat_ble_t));
-    luat_ble_init(luat_bluetooth->luat_ble, luat_ble_cb);
+    // luat_bluetooth->luat_ble = (luat_ble_t*)lua_newuserdata(L, sizeof(luat_ble_t));
+    luat_ble_init(NULL, luat_ble_cb);
 
     if (lua_isfunction(L, 2)) {
 		lua_pushvalue(L, 2);
-		luat_bluetooth->luat_ble->lua_cb = luaL_ref(L, LUA_REGISTRYINDEX);
+		g_ble_lua_cb_ref = luaL_ref(L, LUA_REGISTRYINDEX);
 	}else{
         LLOGE("error cb");
         return 0;
     }
 
+    lua_newuserdata(L, sizeof(luat_ble_t));
     luaL_setmetatable(L, LUAT_BLE_TYPE);
     lua_pushvalue(L, -1);
-    luat_bluetooth->luat_ble->ble_ref = luaL_ref(L, LUA_REGISTRYINDEX);
+    g_bt_ble_ref = luaL_ref(L, LUA_REGISTRYINDEX);
     return 1;
 }
 
 static int l_bluetooth_init(lua_State* L) {
-    luat_bluetooth_t* luat_bluetooth = (luat_bluetooth_t*)lua_newuserdata(L, sizeof(luat_bluetooth_t));
-    if (luat_bluetooth) {
-        luat_bluetooth_init(luat_bluetooth);
+    void* bt = lua_newuserdata(L, 4);
+    if (bt) {
+        luat_bluetooth_init(NULL);
         luaL_setmetatable(L, LUAT_BLUETOOTH_TYPE);
         lua_pushvalue(L, -1);
-        luat_bluetooth->bluetooth_ref = luaL_ref(L, LUA_REGISTRYINDEX);
+        s_bt_ref = luaL_ref(L, LUA_REGISTRYINDEX);
         return 1;
     }
+    else {
+        LLOGE("创建BT代理对象失败,内存不足");
+    }
     return 0;
 }