first
This commit is contained in:
264
apps/earphone/tuya/tuya_app.c
Normal file
264
apps/earphone/tuya/tuya_app.c
Normal file
@ -0,0 +1,264 @@
|
||||
#include "app_config.h"
|
||||
|
||||
|
||||
#include "earphone.h"
|
||||
#include "app_main.h"
|
||||
#include "3th_profile_api.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "btstack/btstack_task.h"
|
||||
#include "bt_tws.h"
|
||||
#include "ble_qiot_export.h"
|
||||
|
||||
#include "update_tws.h"
|
||||
#include "update_tws_new.h"
|
||||
|
||||
#if TUYA_DEMO_EN
|
||||
|
||||
#define LOG_TAG "[tuya_app]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
|
||||
extern void ble_app_disconnect(void);
|
||||
|
||||
int tuya_earphone_state_set_page_scan_enable()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tuya_earphone_state_get_connect_mac_addr()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tuya_earphone_state_cancel_page_scan()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tuya_earphone_state_tws_init(int paired)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tuya_earphone_state_tws_connected(int first_pair, u8 *comm_addr)
|
||||
{
|
||||
if (first_pair) {
|
||||
extern void ble_module_enable(u8 en);
|
||||
extern void bt_update_mac_addr(u8 * addr);
|
||||
extern void lib_make_ble_address(u8 * ble_address, u8 * edr_address);
|
||||
/* bt_ble_adv_enable(0); */
|
||||
u8 tmp_ble_addr[6] = {0};
|
||||
lib_make_ble_address(tmp_ble_addr, comm_addr);
|
||||
le_controller_set_mac(tmp_ble_addr);//将ble广播地址改成公共地址
|
||||
bt_update_mac_addr(comm_addr);
|
||||
/* bt_ble_adv_enable(1); */
|
||||
|
||||
|
||||
/*新的连接,公共地址改变了,要重新将新的地址广播出去*/
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
printf("\nNew Connect Master!!!\n\n");
|
||||
ble_app_disconnect();
|
||||
ble_qiot_advertising_start();
|
||||
} else {
|
||||
printf("\nConnect Slave!!!\n\n");
|
||||
/*从机ble关掉*/
|
||||
ble_app_disconnect();
|
||||
ble_qiot_advertising_stop();
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tuya_earphone_state_enter_soft_poweroff()
|
||||
{
|
||||
extern void bt_ble_exit(void);
|
||||
bt_ble_exit();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tuya_adv_bt_status_event_handler(struct bt_event *bt)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int tuya_adv_hci_event_handler(struct bt_event *bt)
|
||||
{
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void tuya_bt_tws_event_handler(struct bt_event *bt)
|
||||
{
|
||||
int role = bt->args[0];
|
||||
int phone_link_connection = bt->args[1];
|
||||
int reason = bt->args[2];
|
||||
|
||||
switch (bt->event) {
|
||||
case TWS_EVENT_CONNECTED:
|
||||
//bt_ble_adv_enable(1);
|
||||
if (tws_api_get_role() == TWS_ROLE_SLAVE) {
|
||||
//master enable
|
||||
printf("\nConnect Slave!!!\n\n");
|
||||
/*从机ble关掉*/
|
||||
ble_app_disconnect();
|
||||
ble_qiot_advertising_stop();
|
||||
} else {
|
||||
void bt_tws_sync_tuya_state();
|
||||
bt_tws_sync_tuya_state();
|
||||
}
|
||||
|
||||
break;
|
||||
case TWS_EVENT_PHONE_LINK_DETACH:
|
||||
/*
|
||||
* 跟手机的链路LMP层已完全断开, 只有tws在连接状态才会收到此事件
|
||||
*/
|
||||
break;
|
||||
case TWS_EVENT_CONNECTION_DETACH:
|
||||
/*
|
||||
* TWS连接断开
|
||||
*/
|
||||
if (app_var.goto_poweroff_flag) {
|
||||
break;
|
||||
}
|
||||
if (get_app_connect_type() == 0) {
|
||||
printf("\ntws detach to open ble~~~\n\n");
|
||||
|
||||
ble_qiot_advertising_start();
|
||||
}
|
||||
set_ble_connect_type(TYPE_NULL);
|
||||
|
||||
break;
|
||||
case TWS_EVENT_SYNC_FUN_CMD:
|
||||
break;
|
||||
case TWS_EVENT_ROLE_SWITCH:
|
||||
break;
|
||||
}
|
||||
|
||||
#if OTA_TWS_SAME_TIME_ENABLE
|
||||
tws_ota_app_event_deal(bt->event);
|
||||
#endif
|
||||
}
|
||||
|
||||
int tuya_sys_event_handler_specific(struct sys_event *event)
|
||||
{
|
||||
switch (event->type) {
|
||||
case SYS_BT_EVENT:
|
||||
if ((u32)event->arg == SYS_BT_EVENT_TYPE_CON_STATUS) {
|
||||
|
||||
} else if ((u32)event->arg == SYS_BT_EVENT_TYPE_HCI_STATUS) {
|
||||
|
||||
}
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
else if (((u32)event->arg == SYS_BT_EVENT_FROM_TWS)) {
|
||||
tuya_bt_tws_event_handler(&event->u.bt);
|
||||
}
|
||||
#endif
|
||||
#if OTA_TWS_SAME_TIME_ENABLE
|
||||
else if (((u32)event->arg == SYS_BT_OTA_EVENT_TYPE_STATUS)) {
|
||||
bt_ota_event_handler(&event->u.bt);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case SYS_DEVICE_EVENT:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* int user_spp_state_specific(u8 packet_type) */
|
||||
/* { */
|
||||
/* */
|
||||
/* switch (packet_type) { */
|
||||
/* case 1: */
|
||||
/* bt_ble_adv_enable(0); */
|
||||
/* set_app_connect_type(TYPE_SPP); */
|
||||
/* break; */
|
||||
/* case 2: */
|
||||
/* */
|
||||
/* set_app_connect_type(TYPE_NULL); */
|
||||
/* */
|
||||
/* #if TCFG_USER_TWS_ENABLE */
|
||||
/* if (!(tws_api_get_tws_state() & TWS_STA_SIBLING_CONNECTED)) { */
|
||||
/* ble_module_enable(1); */
|
||||
/* } else { */
|
||||
/* if (tws_api_get_role() == TWS_ROLE_MASTER) { */
|
||||
/* ble_module_enable(1); */
|
||||
/* } */
|
||||
/* } */
|
||||
/* #else */
|
||||
/* ble_module_enable(1); */
|
||||
/* #endif */
|
||||
/* */
|
||||
/* break; */
|
||||
/* } */
|
||||
/* return 0; */
|
||||
/* } */
|
||||
|
||||
|
||||
int tuya_earphone_state_init()
|
||||
{
|
||||
/* transport_spp_init(); */
|
||||
/* spp_data_deal_handle_register(user_spp_data_handler); */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
_WEAK_ void tuya_state_deal(void *_data, u16 len)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern void tuya_state_deal(void *_data, u16 len);
|
||||
static void bt_tws_tuya_state(void *_data, u16 len, bool rx)
|
||||
{
|
||||
|
||||
if (rx) {
|
||||
//r_printf("slave ll sync data");
|
||||
//put_buf(_data,len);
|
||||
tuya_state_deal(_data, len);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
REGISTER_TWS_FUNC_STUB(app_tuya_state_stub) = {
|
||||
.func_id = TWS_FUNC_ID_TUYA_STATE,
|
||||
.func = bt_tws_tuya_state,
|
||||
};
|
||||
|
||||
_WEAK_ u16 tuya_get_core_data(u8 *data)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern u16 tuya_get_core_data(u8 *data);
|
||||
void bt_tws_sync_tuya_state()
|
||||
{
|
||||
u8 data[20];
|
||||
u16 data_len;
|
||||
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
data_len = tuya_get_core_data(data);
|
||||
|
||||
//r_printf("master ll sync data");
|
||||
put_buf(&data, data_len);
|
||||
|
||||
|
||||
tws_api_send_data_to_sibling(data, data_len, TWS_FUNC_ID_TUYA_STATE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
1069
apps/earphone/tuya/tuya_demo.c
Normal file
1069
apps/earphone/tuya/tuya_demo.c
Normal file
File diff suppressed because it is too large
Load Diff
126
apps/earphone/tuya/tuya_demo.h
Normal file
126
apps/earphone/tuya/tuya_demo.h
Normal file
@ -0,0 +1,126 @@
|
||||
// binary representation
|
||||
// attribute size in bytes (16), flags(16), handle (16), uuid (16/128), value(...)
|
||||
|
||||
#ifndef _TUYA_DEMO_H
|
||||
#define _TUYA_DEMO_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "app_config.h"
|
||||
#include "tuya_ble_internal_config.h"
|
||||
|
||||
#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_TUYA)
|
||||
|
||||
#if (TUYA_BLE_PROTOCOL_VERSION_HIGN == 0x03)
|
||||
//
|
||||
// gatt profile include file, generated by jieli gatt_inc_generator.exe
|
||||
//
|
||||
|
||||
const uint8_t profile_data[] = {
|
||||
//////////////////////////////////////////////////////
|
||||
//
|
||||
// 0x0001 PRIMARY_SERVICE 1800
|
||||
//
|
||||
//////////////////////////////////////////////////////
|
||||
0x0a, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x28, 0x00, 0x18,
|
||||
|
||||
/* CHARACTERISTIC, 2a00, READ | DYNAMIC, */
|
||||
// 0x0002 CHARACTERISTIC 2a00 READ | DYNAMIC
|
||||
0x0d, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x28, 0x02, 0x03, 0x00, 0x00, 0x2a,
|
||||
// 0x0003 VALUE 2a00 READ | DYNAMIC
|
||||
0x08, 0x00, 0x02, 0x01, 0x03, 0x00, 0x00, 0x2a,
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
//
|
||||
// 0x0004 PRIMARY_SERVICE 1910
|
||||
//
|
||||
//////////////////////////////////////////////////////
|
||||
0x0a, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x28, 0x10, 0x19,
|
||||
|
||||
/* CHARACTERISTIC, 2b10, NOTIFY | DYNAMIC, */
|
||||
// 0x0005 CHARACTERISTIC 2b10 NOTIFY | DYNAMIC
|
||||
0x0d, 0x00, 0x02, 0x00, 0x05, 0x00, 0x03, 0x28, 0x10, 0x06, 0x00, 0x10, 0x2b,
|
||||
// 0x0006 VALUE 2b10 NOTIFY | DYNAMIC
|
||||
0x08, 0x00, 0x10, 0x01, 0x06, 0x00, 0x10, 0x2b,
|
||||
// 0x0007 CLIENT_CHARACTERISTIC_CONFIGURATION
|
||||
0x0a, 0x00, 0x0a, 0x01, 0x07, 0x00, 0x02, 0x29, 0x00, 0x00,
|
||||
|
||||
/* CHARACTERISTIC, 2b11, WRITE | WRITE_WITHOUT_RESPONSE | DYNAMIC, */
|
||||
// 0x0008 CHARACTERISTIC 2b11 WRITE | WRITE_WITHOUT_RESPONSE | DYNAMIC
|
||||
0x0d, 0x00, 0x02, 0x00, 0x08, 0x00, 0x03, 0x28, 0x0c, 0x09, 0x00, 0x11, 0x2b,
|
||||
// 0x0009 VALUE 2b11 WRITE | WRITE_WITHOUT_RESPONSE | DYNAMIC
|
||||
0x08, 0x00, 0x0c, 0x01, 0x09, 0x00, 0x11, 0x2b,
|
||||
|
||||
// END
|
||||
0x00, 0x00,
|
||||
};
|
||||
//
|
||||
// characteristics <--> handles
|
||||
//
|
||||
#define ATT_CHARACTERISTIC_2a00_01_VALUE_HANDLE 0x0003
|
||||
#define ATT_CHARACTERISTIC_2b10_01_VALUE_HANDLE 0x0006
|
||||
#define ATT_CHARACTERISTIC_2b10_01_CLIENT_CONFIGURATION_HANDLE 0x0007
|
||||
#define ATT_CHARACTERISTIC_2b11_01_VALUE_HANDLE 0x0009
|
||||
#endif
|
||||
|
||||
#if (TUYA_BLE_PROTOCOL_VERSION_HIGN == 0x04)
|
||||
//
|
||||
// gatt profile include file, generated by jieli gatt_inc_generator.exe
|
||||
//
|
||||
|
||||
const uint8_t profile_data[] = {
|
||||
//////////////////////////////////////////////////////
|
||||
//
|
||||
// 0x0001 PRIMARY_SERVICE 1800
|
||||
//
|
||||
//////////////////////////////////////////////////////
|
||||
0x0a, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x28, 0x00, 0x18,
|
||||
|
||||
/* CHARACTERISTIC, 2a00, READ | DYNAMIC, */
|
||||
// 0x0002 CHARACTERISTIC 2a00 READ | DYNAMIC
|
||||
0x0d, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x28, 0x02, 0x03, 0x00, 0x00, 0x2a,
|
||||
// 0x0003 VALUE 2a00 READ | DYNAMIC
|
||||
0x08, 0x00, 0x02, 0x01, 0x03, 0x00, 0x00, 0x2a,
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
//
|
||||
// 0x0004 PRIMARY_SERVICE FD50
|
||||
//
|
||||
//////////////////////////////////////////////////////
|
||||
0x0a, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x28, 0x50, 0xfd,
|
||||
|
||||
/* CHARACTERISTIC, 00000001-0000-1001-8001-00805F9B07D0, WRITE_WITHOUT_RESPONSE | DYNAMIC, */
|
||||
// 0x0005 CHARACTERISTIC 00000001-0000-1001-8001-00805F9B07D0 WRITE_WITHOUT_RESPONSE | DYNAMIC
|
||||
0x1b, 0x00, 0x02, 0x00, 0x05, 0x00, 0x03, 0x28, 0x04, 0x06, 0x00, 0xd0, 0x07, 0x9b, 0x5f, 0x80, 0x00, 0x01, 0x80, 0x01, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
// 0x0006 VALUE 00000001-0000-1001-8001-00805F9B07D0 WRITE_WITHOUT_RESPONSE | DYNAMIC
|
||||
0x16, 0x00, 0x04, 0x03, 0x06, 0x00, 0xd0, 0x07, 0x9b, 0x5f, 0x80, 0x00, 0x01, 0x80, 0x01, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
|
||||
/* CHARACTERISTIC, 00000002-0000-1001-8001-00805F9B07D0, NOTIFY | DYNAMIC, */
|
||||
// 0x0007 CHARACTERISTIC 00000002-0000-1001-8001-00805F9B07D0 NOTIFY | DYNAMIC
|
||||
0x1b, 0x00, 0x02, 0x00, 0x07, 0x00, 0x03, 0x28, 0x10, 0x08, 0x00, 0xd0, 0x07, 0x9b, 0x5f, 0x80, 0x00, 0x01, 0x80, 0x01, 0x10, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
// 0x0008 VALUE 00000002-0000-1001-8001-00805F9B07D0 NOTIFY | DYNAMIC
|
||||
0x16, 0x00, 0x10, 0x03, 0x08, 0x00, 0xd0, 0x07, 0x9b, 0x5f, 0x80, 0x00, 0x01, 0x80, 0x01, 0x10, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
// 0x0009 CLIENT_CHARACTERISTIC_CONFIGURATION
|
||||
0x0a, 0x00, 0x0a, 0x01, 0x09, 0x00, 0x02, 0x29, 0x00, 0x00,
|
||||
|
||||
/* CHARACTERISTIC, 00000003-0000-1001-8001-00805F9B07D0, READ | DYNAMIC, */
|
||||
// 0x000a CHARACTERISTIC 00000003-0000-1001-8001-00805F9B07D0 READ | DYNAMIC
|
||||
0x1b, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x03, 0x28, 0x02, 0x0b, 0x00, 0xd0, 0x07, 0x9b, 0x5f, 0x80, 0x00, 0x01, 0x80, 0x01, 0x10, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||
// 0x000b VALUE 00000003-0000-1001-8001-00805F9B07D0 READ | DYNAMIC
|
||||
0x16, 0x00, 0x02, 0x03, 0x0b, 0x00, 0xd0, 0x07, 0x9b, 0x5f, 0x80, 0x00, 0x01, 0x80, 0x01, 0x10, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||
|
||||
// END
|
||||
0x00, 0x00,
|
||||
};
|
||||
//
|
||||
// characteristics <--> handles
|
||||
//
|
||||
#define ATT_CHARACTERISTIC_2a00_01_VALUE_HANDLE 0x0003
|
||||
#define ATT_CHARACTERISTIC_00000001_0000_1001_8001_00805F9B07D0_01_VALUE_HANDLE 0x0006
|
||||
#define ATT_CHARACTERISTIC_00000002_0000_1001_8001_00805F9B07D0_01_VALUE_HANDLE 0x0008
|
||||
#define ATT_CHARACTERISTIC_00000002_0000_1001_8001_00805F9B07D0_01_CLIENT_CONFIGURATION_HANDLE 0x0009
|
||||
#define ATT_CHARACTERISTIC_00000003_0000_1001_8001_00805F9B07D0_01_VALUE_HANDLE 0x000b
|
||||
#endif
|
||||
|
||||
#endif
|
||||
void tuya_set_adv_enable();
|
||||
#endif
|
||||
Reference in New Issue
Block a user