luat_drv_bt_port.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. 这个文件是用来实现蓝牙的, 需要代理全部参数给airlink
  3. 1. 要把全部函数都实现, 如果不支持的就返回错误
  4. 2. 一律打包luat_drv_ble_msg_t
  5. */
  6. #include "luat_base.h"
  7. #include "luat_bluetooth.h"
  8. #include "luat_ble.h"
  9. #include "luat_drv_ble.h"
  10. #include "luat_airlink.h"
  11. #define LUAT_LOG_TAG "drv.bt"
  12. #include "luat_log.h"
  13. int luat_bluetooth_init(void* args) {
  14. LLOGD("执行luat_bluetooth_init");
  15. uint64_t luat_airlink_next_cmd_id = luat_airlink_get_next_cmd_id();
  16. airlink_queue_item_t item = {
  17. .len = sizeof(luat_airlink_cmd_t) + sizeof(luat_drv_ble_msg_t)
  18. };
  19. luat_airlink_cmd_t* cmd = luat_airlink_cmd_new(0x500, item.len - sizeof(luat_airlink_cmd_t));
  20. if (cmd == NULL) {
  21. return -101;
  22. }
  23. luat_drv_ble_msg_t msg = { .id = luat_airlink_next_cmd_id};
  24. msg.cmd_id = LUAT_DRV_BT_CMD_BT_INIT;
  25. memcpy(cmd->data, &msg, sizeof(luat_drv_ble_msg_t));
  26. item.cmd = cmd;
  27. luat_airlink_queue_send(LUAT_AIRLINK_QUEUE_CMD, &item);
  28. return 0;
  29. }
  30. int luat_bluetooth_deinit(void* args) {
  31. LLOGD("执行luat_bluetooth_deinit");
  32. uint64_t luat_airlink_next_cmd_id = luat_airlink_get_next_cmd_id();
  33. airlink_queue_item_t item = {
  34. .len = sizeof(luat_airlink_cmd_t) + sizeof(luat_drv_ble_msg_t)
  35. };
  36. luat_airlink_cmd_t* cmd = luat_airlink_cmd_new(0x500, item.len - sizeof(luat_airlink_cmd_t));
  37. if (cmd == NULL) {
  38. return -101;
  39. }
  40. luat_drv_ble_msg_t msg = { .id = luat_airlink_next_cmd_id};
  41. msg.cmd_id = LUAT_DRV_BT_CMD_BT_DEINIT;
  42. memcpy(cmd->data, &msg, sizeof(luat_drv_ble_msg_t));
  43. item.cmd = cmd;
  44. luat_airlink_queue_send(LUAT_AIRLINK_QUEUE_CMD, &item);
  45. return 0;
  46. }
  47. int luat_bluetooth_get_mac(void* args, uint8_t *addr) {
  48. memcpy(addr, g_airlink_ext_dev_info.wifi.bt_mac, 6);
  49. // 注意, 因为bt_mac是大端存储的, 需要转换成小端
  50. // 而按照luat_bluetooth_get_mac的定义, 返回的是小端格式
  51. luat_bluetooth_mac_swap(addr);
  52. return 0;
  53. }
  54. int luat_bluetooth_set_mac(void* args, uint8_t *addr, uint8_t len) {
  55. LLOGE("not support yet");
  56. return -1;
  57. }