初版
This commit is contained in:
@@ -0,0 +1,239 @@
|
||||
|
||||
|
||||
#ifndef _3TH_PROTOCOL_EVENT_H
|
||||
#define _3TH_PROTOCOL_EVENT_H
|
||||
|
||||
//该文件只定义库里面和库外面都需要用得的第三方APP协议的消息和状态
|
||||
#include<string.h>
|
||||
#include <stdint.h>
|
||||
#include "typedef.h"
|
||||
|
||||
#define DEMO_HANDLER_ID 0x300 /*作为一个使用的例子,同时也可作为客户自己添加协议的ID*/
|
||||
#define GMA_HANDLER_ID 0x400 /*阿里天猫协议接口ID*/
|
||||
#define MMA_HANDLER_ID 0x500 /*小米MMA协议接口ID*/
|
||||
#define DMA_HANDLER_ID 0x600 /*百度DMA协议接口ID*/
|
||||
#define TME_HANDLER_ID 0x700 /*腾讯酷狗TME协议接口ID*/
|
||||
#define AMA_HANDLER_ID 0x800 /*亚马逊的AMA协议接口ID*/
|
||||
#define REALME_HANDLER_ID 0x900 /*oppo真我的协议接口ID*/
|
||||
#define GFPS_HANDLER_ID 0xA00 /*谷歌快对的协议接口ID*/
|
||||
//app protocol公共消息
|
||||
enum {
|
||||
APP_PROTOCOL_COMMON_NOTICE = 0,
|
||||
APP_PROTOCOL_CONNECTING, /*保留,暂未使用*/
|
||||
APP_PROTOCOL_CONNECTED_BLE, /*APP通过BLE连接成功状态更新*/
|
||||
APP_PROTOCOL_CONNECTED_SPP, /*APP通过SPP连接成功状态更新*/
|
||||
APP_PROTOCOL_DISCONNECT, /*APP连接断开状态更新*/
|
||||
APP_PROTOCOL_AUTH_PASS, /*连接认证通过标识更新*/
|
||||
APP_PROTOCOL_SPEECH_ENCODER_TYPE,
|
||||
APP_PROTOCOL_SPEECH_START, /*语音识别功能启动状态*/
|
||||
APP_PROTOCOL_SPEECH_STOP, /*语音识别功能停止状态*/
|
||||
APP_PROTOCOL_SET_VOLUME, /*app配置音量*/
|
||||
APP_PROTOCOL_GET_VOLUME, /*app读取音量*/
|
||||
APP_PROTOCOL_GET_AUX_STATUS, /*保留,暂未使用*/
|
||||
APP_PROTOCOL_LIB_TWS_DATA_SYNC, /*需要更新给另一端tws数据*/
|
||||
APP_PROTOCOL_GET_TWS_CHANNEL, /*库里面获取是左声道还是右声道*/
|
||||
APP_PROTOCOL_COMMON_NOTICE_END = 0x14F,
|
||||
};
|
||||
//OTA消息
|
||||
enum {
|
||||
APP_PROTOCOL_OTA_COMMON_NOTICE = APP_PROTOCOL_COMMON_NOTICE_END + 1,
|
||||
APP_PROTOCOL_OTA_CHECK,
|
||||
APP_PROTOCOL_OTA_GET_APP_VERSION,
|
||||
APP_PROTOCOL_OTA_CHECK_CRC,
|
||||
APP_PROTOCOL_OTA_BEGIN,
|
||||
APP_PROTOCOL_OTA_TRANS_DATA,
|
||||
APP_PROTOCOL_OTA_PERCENT,
|
||||
APP_PROTOCOL_OTA_END,
|
||||
APP_PROTOCOL_OTA_SUCCESS,
|
||||
APP_PROTOCOL_OTA_FAIL,
|
||||
APP_PROTOCOL_OTA_CANCLE,
|
||||
APP_PROTOCOL_OTA_REBOOT,
|
||||
APP_PROTOCOL_OTA_COMMON_NOTICE_END = 0x1FF,
|
||||
};
|
||||
//GMA私有消息
|
||||
enum {
|
||||
APP_PROTOCOL_GMA_NOTICE_BEGIN = GMA_HANDLER_ID,
|
||||
APP_PROTOCOL_GMA_FMTX_SETFRE, /*样机支持FM功能的APP配置fm参数*/
|
||||
APP_PROTOCOL_GMA_FMTX_GETFRE, /*app获取当前的fm配置参数*/
|
||||
APP_PROTOCOL_GMA_NOTICE_END = GMA_HANDLER_ID + 0xFF,
|
||||
};
|
||||
//MMA私有消息
|
||||
enum {
|
||||
APP_PROTOCOL_MMA_NOTICE = MMA_HANDLER_ID,
|
||||
APP_PROTOCOL_MMA_SAVE_INFO, //库里面不直接访问VM接口,有些信息保存外面做
|
||||
APP_PROTOCOL_MMA_READ_INFO,
|
||||
APP_PROTOCOL_MMA_SAVE_ADV_COUNTER,
|
||||
APP_PROTOCOL_MMA_READ_ADV_COUNTER,
|
||||
APP_PROTOCOL_MMA_MANUFACTURER_DATA, //小米广播包的数据,
|
||||
APP_PROTOCOL_MMA_FD2D_SERVICE_DATA, //小米广播包的数据,
|
||||
APP_PROTOCOL_MMA_SAVE_ACCOUNT_KEY,
|
||||
APP_PROTOCOL_MMA_READ_ACCOUNT_KEY,
|
||||
APP_PROTOCOL_MMA_NOTICE_END = MMA_HANDLER_ID + 0xFF,
|
||||
};
|
||||
|
||||
//DMA私有消息
|
||||
enum {
|
||||
APP_PROTOCOL_DMA_NOTICE = DMA_HANDLER_ID,
|
||||
APP_PROTOCOL_DMA_SAVE_RAND, //库里面不直接访问VM接口,有些信息保存外面做
|
||||
APP_PROTOCOL_DMA_READ_RAND,
|
||||
APP_PROTOCOL_DMA_TWS_SNED_RAND,
|
||||
APP_PROTOCOL_DMA_TTS_TYPE,
|
||||
APP_PROTOCOL_DMA_SAVE_OTA_INFO, //库里面不直接访问VM接口,有些信息保存外面做
|
||||
APP_PROTOCOL_DMA_READ_OTA_INFO,
|
||||
APP_PROTOCOL_DMA_NOTICE_END = DMA_HANDLER_ID + 0xFF,
|
||||
};
|
||||
|
||||
//REALME私有消息
|
||||
enum {
|
||||
APP_PROTOCOL_REALME_FEATURE_SWITCH = REALME_HANDLER_ID,
|
||||
APP_PROTOCOL_REALME_FIND_MODE_SET,
|
||||
APP_PROTOCOL_REALME_KEY_FUNC_SET,
|
||||
APP_PROTOCOL_REALME_FREE_MUSIC_SET,
|
||||
APP_PROTOCOL_REALME_NOISE_INFO,
|
||||
APP_PROTOCOL_REALME_COMPACTNESS_DETECT,
|
||||
APP_PROTOCOL_REALME_EQ_SET,
|
||||
APP_PROTOCOL_REALME_HIGH_VOL_GAIN_SET,
|
||||
APP_PROTOCOL_REALME_RELATE_DEVICE_INFO,
|
||||
APP_PROTOCOL_REALME_UTC_TIME_SYNC,
|
||||
APP_PROTOCOL_REALME_POWER_OFF_TIME_SET,
|
||||
APP_PROTOCOL_REALME_MULTI_CONN_INFO,
|
||||
APP_PROTOCOL_REALME_BASS_ENGINE_VALUE_SET,
|
||||
APP_PROTOCOL_REALME_RESTORE_FACTORY,
|
||||
APP_PROTOCOL_REALME_UPGRADE_OFFSET_SAVE,
|
||||
APP_PROTOCOL_REALME_UPGRADE_OFFSET_READ,
|
||||
APP_PROTOCOL_REALME_UPGRADE_OFFSET_CLEAR,
|
||||
APP_PROTOCOL_REALME_UPGRADE_FIRMWARE_ID,
|
||||
APP_PROTOCOL_REALME_UPGRADE_START,
|
||||
APP_PROTOCOL_REALME_UPGRADE_END,
|
||||
APP_PROTOCOL_REALME_UPGRADE_REBOOT,
|
||||
APP_PROTOCOL_REALME_UPGRADE_SYNC,
|
||||
APP_PROTOCOL_REALME_UPGRADE_ABORT,
|
||||
APP_PROTOCOL_REALME_DEBUG_START,
|
||||
APP_PROTOCOL_REALME_DEBUG_GET,
|
||||
APP_PROTOCOL_REALME_DEBUG_STOP,
|
||||
APP_PROTOCOL_REALME_DEBUG_DIAGNOSTIC,
|
||||
APP_PROTOCOL_REALME_DEBUG_SET_PARAM,
|
||||
};
|
||||
|
||||
#define REALME_MAX_KEY_NUM 10
|
||||
|
||||
struct __realme_special_id {
|
||||
char product_id[4];
|
||||
char *protocol_version;
|
||||
uint8_t protocol_version_len;
|
||||
char *version;
|
||||
uint8_t version_len;
|
||||
};
|
||||
struct __realme_key_func {
|
||||
uint8_t key_info[REALME_MAX_KEY_NUM][4];
|
||||
uint8_t key_num;
|
||||
};
|
||||
|
||||
struct __realme_nofity_flag {
|
||||
bool battery_notify_flag;
|
||||
bool earbuds_notify_flag;
|
||||
bool noise_notify_flag;
|
||||
bool compactness_notify_flag;
|
||||
bool game_mode_notify_flag;
|
||||
bool multi_conn_notify_flag;
|
||||
bool user_ui_notify_flag;
|
||||
bool conn_dev_notify_flag;
|
||||
bool exception_info_notify_flag;
|
||||
bool buried_point_notify_flag;
|
||||
};
|
||||
|
||||
|
||||
#define REALME_FEATURE_MAX_NUM (40)
|
||||
|
||||
struct __realme_info {
|
||||
// vm
|
||||
uint8_t feature_state[REALME_FEATURE_MAX_NUM];
|
||||
uint8_t auto_power_off_time;
|
||||
|
||||
uint8_t eq_id;
|
||||
uint8_t high_vol_gain_level;
|
||||
uint8_t noise_info[2]; //
|
||||
char min_bass_engine;
|
||||
char max_bass_engine;
|
||||
char cur_bass_engine;
|
||||
|
||||
struct __realme_key_func key_func;
|
||||
struct __realme_nofity_flag notify_flag;
|
||||
|
||||
// const
|
||||
// uint32_t realme_capabilities;
|
||||
// uint16_t vid;
|
||||
// uint8_t realme_color_id;
|
||||
// uint8_t device_id_type; // 0:非 TWS 设备 1:TWS 设备
|
||||
// struct __realme_special_id special_id;
|
||||
|
||||
|
||||
// update
|
||||
// uint8_t left_ear_status;
|
||||
// uint8_t right_ear_status;
|
||||
// uint8_t box_status;
|
||||
// uint8_t left_ear_compactness;
|
||||
// uint8_t right_ear_compactness;
|
||||
// uint8_t left_ear_vol;
|
||||
// uint8_t right_ear_vol;
|
||||
// uint8_t audio_code;
|
||||
// uint32_t time_stamp;
|
||||
};
|
||||
|
||||
|
||||
|
||||
// GFPS私有消息
|
||||
enum {
|
||||
APP_PROTOCOL_GFPS_RING_STOP_ALL = GFPS_HANDLER_ID,
|
||||
APP_PROTOCOL_GFPS_RING_RIGHT,
|
||||
APP_PROTOCOL_GFPS_RING_LEFT,
|
||||
APP_PROTOCOL_GFPS_RING_ALL,
|
||||
APP_PROTOCOL_GFPS_HEARABLE_CONTROLS,
|
||||
};
|
||||
|
||||
//APP_PROTOCOL获取电量的类型
|
||||
#define APP_PROTOCOL_BAT_T_CHARGE_FLAG 0
|
||||
#define APP_PROTOCOL_BAT_T_MAIN 1
|
||||
#define APP_PROTOCOL_BAT_T_BOX 2
|
||||
#define APP_PROTOCOL_BAT_T_TWS_LEFT 3
|
||||
#define APP_PROTOCOL_BAT_T_TWS_RIGHT 4
|
||||
#define APP_PROTOCOL_BAT_T_TWS_SIBLING 5
|
||||
#define APP_PROTOCOL_BAT_T_LOW_POWER 6
|
||||
#define APP_PROTOCOL_BAT_T_MAX 8
|
||||
|
||||
typedef struct _ota_frame_info_t {
|
||||
u16 max_pkt_len;
|
||||
u16 frame_crc;
|
||||
u32 frame_size;
|
||||
} ota_frame_info;
|
||||
|
||||
//*****//
|
||||
typedef enum {
|
||||
USER_NOTIFY_STATE_CONNECTED = 0, /**< 手机APP与设备建立连接 */
|
||||
USER_NOTIFY_STATE_DISCONNECTED, /**< 手机APP与设备的连接断开 */
|
||||
USER_NOTIFY_STATE_MOBILE_CONNECTED, /**< 手机与设备建立BT连接(A2DP、HFP、AVRCP) */
|
||||
USER_NOTIFY_STATE_MOBILE_DISCONNECTED, /**< 手机与设备BT连接(A2DP、HFP、AVRCP)断开 */
|
||||
USER_NOTIFY_STATE_SEND_PREPARE_DONE, /**< 设备端进入可向手机发送数据的状态 */
|
||||
USER_NOTIFY_STATE_TWS_CONNECT, /**< TWS类设备两端连接成功 */
|
||||
USER_NOTIFY_STATE_TWS_DISCONNECT, /**< TWS类设备两端断开连接 */
|
||||
USER_NOTIFY_STATE_BOX_OPEN, /**< 盒仓开启 */
|
||||
USER_NOTIFY_STATE_BOX_CLOSE, /**< 盒仓关闭 */
|
||||
USER_NOTIFY_STATE_ROLE_SWITCH_START, /**< TWS类设备开始进入主从切换流程 */
|
||||
USER_NOTIFY_STATE_ROLE_SWITCH_FINISH, /**< TWS类设备主从切换完成 */
|
||||
USER_NOTIFY_STATE_ROLE_SWITCH_REQUEST, /**< TWS类设备向APP发起主从切换请求 */
|
||||
USER_NOTIFY_STATE_DOUBLE_CLICK, /**< 设备双击按键 */
|
||||
USER_NOTIFY_STATE_KEYWORD_DETECTED, /**< 设备语音唤醒 */
|
||||
USER_NOTIFY_STATE_BATTERY_LEVEL_UPDATE, /**< 通知耳机电量更新 */
|
||||
USER_NOTIFY_STATE_ONE_CLICK, /**< 设备单击按键 */
|
||||
} USER_NOTIFY_STATE;
|
||||
|
||||
typedef enum {
|
||||
/*尽量返回简单的1或者0*/
|
||||
CHECK_STATUS_TWS_MASTER,
|
||||
CHECK_STATUS_TWS_SLAVE,
|
||||
CHECK_STATUS_TWS_PAIR_STA, /*1是tws已经配对了,0是未配对*/
|
||||
CHECK_STATUS_TWS_SIDE, /*0是单耳,1是左耳,2是右耳*/
|
||||
CHECK_STATUS_TWS_REV,
|
||||
CHECK_STATUS_TWS_REV1,
|
||||
} CHECK_STATUS;
|
||||
#endif
|
||||
@@ -0,0 +1,146 @@
|
||||
|
||||
#ifndef __APP_PRO_LIBS_API_H__
|
||||
#define __APP_PRO_LIBS_API_H__
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
|
||||
///***************************************///
|
||||
//GMA的函数接口汇集,begin
|
||||
int gma_prev_init(void);
|
||||
int gma_opus_voice_mic_send(uint8_t *voice_buf, uint16_t voice_len);
|
||||
/*gma的总初始化函数**/
|
||||
int gma_all_init(void);
|
||||
/*gma的总的释放函数**/
|
||||
int gma_all_exit(void);
|
||||
int gma_connect_success(void);
|
||||
void gma_set_active_ali_para(void *addr);
|
||||
/*TWS的公共地址配置*/
|
||||
void gma_set_sibling_mac_para(void *mac);
|
||||
int gma_ble_adv_enable(u8 enable);
|
||||
int gma_ble_ibeacon_adv(u8 enable);
|
||||
//gma接收的数据处理函数
|
||||
int gma_rx_loop(void);
|
||||
/*gma命令和数据发送处理*/
|
||||
int tm_data_send_process_thread(void);
|
||||
int gma_start_voice_recognition(int flag);
|
||||
|
||||
|
||||
int gma_disconnect(void *addr);
|
||||
|
||||
void gma_message_callback_register(int (*handler)(int id, int opcode, u8 *data, u32 len));
|
||||
void gma_is_tws_master_callback_register(bool (*handler)(void));
|
||||
void gma_tx_resume_register(void (*handler)(void));
|
||||
void gma_rx_resume_register(void (*handler)(void));
|
||||
/*注册电量的获取回调函数*/
|
||||
void gma_get_battery_callback_register(bool (*handler)(u8 battery_type, u8 *value));
|
||||
|
||||
//ota interface
|
||||
int gma_ota_requset_next_packet(void *priv, u32 offset, u16 len);
|
||||
void gma_replay_ota_result(u8 result);
|
||||
|
||||
int tws_ota_get_data_from_sibling(u8 opcode, u8 *data, u8 len);
|
||||
u8 tws_ota_control(int type, ...);
|
||||
void tws_ota_app_event_deal(u8 evevt);
|
||||
//gma apis ends
|
||||
|
||||
///***************************************///
|
||||
//DMA apis begin
|
||||
extern int dueros_process();
|
||||
extern int dma_all_init(void);
|
||||
extern int dma_all_exit(void);
|
||||
extern void dma_message_callback_register(int (*handler)(int id, int opcode, u8 *data, u32 len));
|
||||
extern void dma_check_status_callback_register(int (*handler)(int state_flag));
|
||||
extern void dma_tx_resume_register(void (*handler)(void));
|
||||
extern void dma_rx_resume_register(void (*handler)(void));
|
||||
extern int dma_ble_adv_enable(u8 enable);
|
||||
extern int dma_speech_data_send(u8 *buf, u16 len);
|
||||
extern int dueros_send_process(void);
|
||||
extern void dma_set_product_id_key(void *data);
|
||||
extern int dma_pair_state();
|
||||
extern int dma_start_voice_recognition(int en);
|
||||
extern void dueros_dma_manufacturer_info_init();
|
||||
extern int dma_disconnect(void *addr);
|
||||
extern int dma_update_tws_state_to_lib(int state);
|
||||
extern void dma_get_battery_callback_register(bool (*handler)(u8 battery_type, u8 *value));
|
||||
extern void dma_set_pid(u32 pid);
|
||||
extern int dma_tws_data_deal(u8 *data, int len);
|
||||
|
||||
|
||||
//DMA apis ends
|
||||
|
||||
///***************************************///
|
||||
//TME apis begins
|
||||
extern void tme_get_battery_callback_register(bool (*handler)(u8 battery_type, u8 *value));
|
||||
extern void tme_message_callback_register(int (*handler)(int id, int opcode, u8 *data, u32 len));
|
||||
extern void tme_is_tws_master_callback_register(bool (*handler)(void));
|
||||
extern void tme_tx_resume_register(void (*handler)(void));
|
||||
extern void tme_rx_resume_register(void (*handler)(void));
|
||||
extern int TME_protocol_process();
|
||||
extern int tme_all_init(void);
|
||||
extern int tme_all_exit(void);
|
||||
/* extern u16 tme_speech_data_send(buf, len); */
|
||||
extern int tme_ble_adv_enable(u8 enable);
|
||||
extern int TME_send_packet_process(void);
|
||||
extern void TME_recieve_packet_parse_process(void);
|
||||
extern int tme_connect_success(void);
|
||||
extern int tme_send_voice_data(u8 *buf, u16 len);
|
||||
extern int tme_start_voice_recognition(int flag);
|
||||
extern void tme_set_configuration_info(void *addr);
|
||||
extern int tme_protocol_disconnect(void *priv);
|
||||
extern void tme_set_pid(u32 pid);
|
||||
extern void tme_set_bid(u32 bid);
|
||||
extern u32 TME_request_ota_data(void *priv, u32 offset, u16 len);
|
||||
extern void TME_notify_file_size(u32 file_size);
|
||||
|
||||
//TME api ends
|
||||
|
||||
///***************************************///
|
||||
//MMA api begins
|
||||
extern void mma_all_init(void);
|
||||
extern void mma_all_exit(void);
|
||||
extern void mma_ble_adv_enable(u8 enable);
|
||||
extern int XM_speech_data_send(u8 *buf, u16 len);
|
||||
extern bool XM_protocal_auth_pass(void);
|
||||
extern int mma_start_voice_recognition(int ctrl);
|
||||
extern void mma_message_callback_register(int (*handler)(int id, int opcode, u8 *data, u32 len));
|
||||
extern void mma_is_tws_master_callback_register(bool (*handler)(void));
|
||||
extern void mma_tx_resume_register(void (*handler)(void));
|
||||
extern void mma_rx_resume_register(void (*handler)(void));
|
||||
extern void mma_set_verdor_id(u16 pid);
|
||||
extern void mma_set_product_id(u16 pid);
|
||||
extern void mma_set_local_version(u16 version);
|
||||
extern int mma_protocol_loop_process();
|
||||
extern u32 mma_request_ota_data(void *priv, u32 offset, u16 len);
|
||||
extern int mma_notify_file_size(u32 size);
|
||||
extern u32 mma_report_ota_status(u8 state);
|
||||
extern int mma_disconnect(void *addr);
|
||||
extern void mma_tws_data_deal(u8 *data, int len);
|
||||
extern void mma_get_battery_callback_register(bool (*handler)(u8 battery_type, u8 *value));
|
||||
|
||||
//MMA API END
|
||||
|
||||
///***************************************///
|
||||
//GFPS apis begins
|
||||
extern int gfps_all_init();
|
||||
extern int gfps_all_exit();
|
||||
extern int gfps_disconnect(void *addr);
|
||||
extern int gfps_ble_adv_enable(u8 enable);
|
||||
extern void gfps_set_model_id(uint8_t *model_id);
|
||||
extern void gfps_set_anti_spoofing_public_key(char *public_key);
|
||||
extern void gfps_set_anti_spoofing_private_key(char *private_key);
|
||||
extern void gfps_get_battery_callback_register(bool (*handler)(u8 battery_type, u8 *value));
|
||||
extern void gfps_message_callback_register(int (*handler)(int id, int opcode, u8 *data, u32 len));
|
||||
extern void gfps_set_pair_mode(void *priv);
|
||||
extern void gfps_battery_update(void);
|
||||
extern void gfps_personalized_name_set(u8 *data, u8 len);
|
||||
extern void gfps_is_tws_master_callback_register(bool (*handler)(void));
|
||||
extern int gfps_tws_data_deal(u8 *data, int len);
|
||||
extern int gfps_update_tws_state_to_lib(int state);
|
||||
extern void gfps_factory_reset(void);
|
||||
extern void gfps_set_battery_ui_enable(uint8_t enable);
|
||||
extern void update_channel_map_do_in_irq_flag_set(uint8_t en);
|
||||
//GFPS API END
|
||||
#endif /* __APP_PRO_LIBS_API_H__ */
|
||||
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
#ifndef _APP_BLE_SPP_API_H_
|
||||
#define _APP_BLE_SPP_API_H_
|
||||
|
||||
#include "system/includes.h"
|
||||
#include "btstack/bluetooth.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "list.h"
|
||||
#include "timer.h"
|
||||
#include "spp_user.h"
|
||||
#include "btstack/le/le_common_define.h"
|
||||
#include "btcontroller_modules.h"
|
||||
#include "btstack/btstack_typedef.h"
|
||||
|
||||
/**********************************************
|
||||
adv_type
|
||||
**********************************************/
|
||||
|
||||
#define APP_ADV_IND (0) /*Connectable and scannable undirected advertising*/
|
||||
#define APP_ADV_DIRECT_IND (1) /*Connectable high duty cycle directed advertising */
|
||||
#define APP_ADV_SCAN_IND (2) /*Scannable undirected advertising*/
|
||||
#define APP_ADV_NONCONN_IND (3) /*Non connectable undirected advertising*/
|
||||
#define APP_ADV_DIRECT_IND_LOW (4) /*Connectable low duty cycle directed advertising*/
|
||||
|
||||
|
||||
/**********************************************
|
||||
adv_channel
|
||||
**********************************************/
|
||||
#define APP_ADV_CHANNEL_37 (BIT(0))
|
||||
#define APP_ADV_CHANNEL_38 (BIT(1))
|
||||
#define APP_ADV_CHANNEL_39 (BIT(2))
|
||||
#define APP_ADV_CHANNEL_ALL (BIT(0)|BIT(1)|BIT(2))
|
||||
|
||||
|
||||
extern int app_ble_set_adv_param(void *_hdl, u32 adv_interval, u8 adv_type, u8 adv_channel);
|
||||
/**********************************************
|
||||
ble adv
|
||||
**********************************************/
|
||||
extern int app_ble_adv_data_set(void *_hdl, u8 *data, u8 length);
|
||||
extern int app_ble_rsp_data_set(void *_hdl, u8 *data, u8 length);
|
||||
extern int app_ble_adv_enable(void *_hdl, u8 en);
|
||||
|
||||
// ble adv 5.0
|
||||
extern int app_ble_adv_data_set_5_0(void *_hdl, le_set_ext_adv_data_t *param);
|
||||
extern int app_ble_rsp_data_set_5_0(void *_hdl, le_set_ext_adv_data_t *param);
|
||||
extern int app_ble_set_adv_param_5_0(void *_hdl, le_set_ext_adv_param_t *param);
|
||||
extern int app_ble_adv_enable_5_0(void *_hdl, le_set_ext_adv_en_t *param);
|
||||
|
||||
|
||||
extern int app_ble_set_mac_addr(void *_hdl, void *addr);
|
||||
extern int app_ble_adv_address_type_set(void *_hdl, u8 address_type);
|
||||
extern int app_ble_adv_skip(void *_hdl, u8 skip_cnt);
|
||||
extern int app_ble_adv_state_get(void *_hdl);
|
||||
|
||||
|
||||
/**********************************************
|
||||
ble callback
|
||||
**********************************************/
|
||||
typedef void (*app_ble_packet_handler_t)(void *_hdl, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size);
|
||||
typedef uint16_t (*app_ble_att_read_callback_t)(void *_hdl, uint16_t con_handle, uint16_t attribute_handle, uint16_t offset, uint8_t *buffer, uint16_t buffer_size);
|
||||
typedef int (*app_ble_att_write_callback_t)(void *_hdl, uint16_t con_handle, uint16_t attribute_handle, uint16_t transaction_mode, uint16_t offset, uint8_t *buffer, uint16_t buffer_size);
|
||||
typedef void (*app_ble_sm_event_callback_t)(void *_hdl, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size);
|
||||
|
||||
|
||||
extern int app_ble_att_read_callback_register(void *_hdl, app_ble_att_read_callback_t read_callback);
|
||||
extern int app_ble_att_write_callback_register(void *_hdl, app_ble_att_write_callback_t write_callback);
|
||||
extern int app_ble_att_server_packet_handler_register(void *_hdl, app_ble_packet_handler_t handler);
|
||||
extern int app_ble_hci_event_callback_register(void *_hdl, app_ble_packet_handler_t handler);
|
||||
extern int app_ble_l2cap_packet_handler_register(void *_hdl, app_ble_packet_handler_t handler);
|
||||
extern int app_ble_sm_event_callback_register(void *_hdl, app_ble_sm_event_callback_t callback);
|
||||
extern int app_ble_att_client_status(void *_hdl, u8 *addr);
|
||||
|
||||
|
||||
|
||||
/**********************************************
|
||||
ble module
|
||||
**********************************************/
|
||||
extern int app_ble_init(void);
|
||||
extern int app_ble_exit(void);
|
||||
extern void *app_ble_hdl_alloc(void);
|
||||
extern int app_ble_hdl_free(void *_hdl);
|
||||
extern int app_ble_sm_init(io_capability_t io_type, u8 auth_req, uint8_t min_key_size, u8 security_en);
|
||||
extern int app_ble_profile_set(void *_hdl, const uint8_t *db);
|
||||
extern int app_ble_set_filter_con_handle(void *_hdl, u16 con_handle);
|
||||
extern int app_ble_disconnect(void *_hdl);
|
||||
extern ble_cmd_ret_e app_ble_att_send_data(void *_hdl, u16 att_handle, u8 *data, u16 len, att_op_type_e att_op_type);
|
||||
extern int app_ble_check_hdl_vaild(void *_hdl);
|
||||
extern u16 app_ble_get_hdl_con_handle(void *_hdl);
|
||||
extern int app_ble_att_vaild_len_get(void *_hdl);
|
||||
extern int app_ble_no_profile_flag_set(void *_hdl, u8 flag);
|
||||
extern int app_ble_set_ancs_connection_flag(void *_hdl, u8 flag);
|
||||
|
||||
extern u8 *app_ble_adv_addr_get(void *_hdl);
|
||||
extern u8 *app_ble_local_mac_addr_get(void *_hdl);
|
||||
extern u8 *app_ble_remote_mac_addr_get(void *_hdl);
|
||||
extern int app_ble_common_core_data_size(void);
|
||||
extern int app_ble_common_core_data_get(u8 *data);
|
||||
extern int app_ble_common_core_data_set(u8 *data);
|
||||
extern int app_ble_hdl_core_data_size(void);
|
||||
extern int app_ble_hdl_core_data_get(void *_hdl, u8 *data);
|
||||
extern int app_ble_hdl_core_data_set(void *_hdl, u8 *data);
|
||||
extern int app_ble_adv_handle_get(void *_hdl);
|
||||
// 如果BLE句柄设置了UUID,可以直接一次性同步所有设置了UUID的BLE句柄
|
||||
extern int app_ble_hdl_uuid_set(void *_hdl, u32 uuid);
|
||||
extern int app_ble_all_sync_data_size(void);
|
||||
extern int app_ble_all_sync_data_get(u8 *sync_buf);
|
||||
extern int app_ble_all_sync_data_set(u8 *sync_buf, int buf_len);
|
||||
|
||||
|
||||
/**********************************************
|
||||
spp module
|
||||
**********************************************/
|
||||
extern int app_spp_init(void);
|
||||
extern int app_spp_exit(void);
|
||||
extern void *app_spp_hdl_alloc(u8 local_id);
|
||||
extern int app_spp_hdl_free(void *_hdl);
|
||||
extern int app_spp_data_send(void *_hdl, u8 *buf, u16 len);
|
||||
extern int app_spp_set_filter_remote_addr(void *_hdl, u8 *remote_addr);
|
||||
extern int app_spp_clean_filter_remote_addr(void *_hdl);
|
||||
extern int app_spp_disconnect(void *_hdl);
|
||||
extern int app_spp_check_hdl_vaild(void *_hdl);
|
||||
extern u8 *app_spp_get_hdl_remote_addr(void *_hdl);
|
||||
extern int app_spp_hdl_core_data_size(void);
|
||||
extern int app_spp_hdl_core_data_get(void *_hdl, u8 *data);
|
||||
extern int app_spp_hdl_core_data_set(void *_hdl, u8 *data);
|
||||
|
||||
// 如果SPP句柄设置了UUID,可以直接一次性同步所有设置了UUID的BLE句柄
|
||||
extern int app_spp_hdl_uuid_set(void *_hdl, u32 uuid);
|
||||
extern int app_spp_all_sync_data_size(void);
|
||||
extern int app_spp_all_sync_data_get(u8 *sync_buf);
|
||||
extern int app_spp_all_sync_data_set(u8 *sync_buf, int buf_len);
|
||||
|
||||
|
||||
/**********************************************
|
||||
spp callback
|
||||
**********************************************/
|
||||
typedef void (*app_spp_recieve_callback_t)(void *hdl, void *remote_addr, u8 *buf, u16 len);
|
||||
typedef void (*app_spp_state_callback_t)(void *hdl, void *remote_addr, u8 state);
|
||||
typedef void (*app_spp_send_wakeup_callback_t)(void *hdl);
|
||||
|
||||
extern int app_spp_recieve_callback_register(void *_hdl, app_spp_recieve_callback_t callback);
|
||||
extern int app_spp_state_callback_register(void *_hdl, app_spp_state_callback_t callback);
|
||||
extern int app_spp_wakeup_callback_register(void *_hdl, app_spp_send_wakeup_callback_t callback);
|
||||
|
||||
extern int app_ble_att_handle_enable(void *_hdl, uint16_t start_handle, uint16_t end_handle, uint8_t enable);
|
||||
extern int app_ble_att_handle_clear(void *_hdl);
|
||||
|
||||
|
||||
/**********************************************
|
||||
common
|
||||
**********************************************/
|
||||
#define APP_BLE_CONNECTION_COMPLETE (0x01)
|
||||
#define APP_BLE_DISCONNECTION_COMPLETE (0x02)
|
||||
#define APP_SPP_CONNECTION_COMPLETE (0x81)
|
||||
#define APP_SPP_DISCONNECTION_COMPLETE (0x82)
|
||||
typedef void (*app_state_update_callback_t)(void *_hdl, uint8_t state, uint8_t *packet, uint16_t size);
|
||||
extern int app_ble_state_update_callback_regitster(app_state_update_callback_t callback);
|
||||
extern int app_spp_state_update_callback_regitster(app_state_update_callback_t callback);
|
||||
|
||||
#endif // _APP_BLE_SPP_API_H_
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
#ifndef __BLE_USER_H__
|
||||
#define __BLE_USER_H__
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
typedef enum {
|
||||
BLE_ST_NULL = 0,
|
||||
BLE_ST_INIT_OK, //协议栈初始化ok
|
||||
BLE_ST_IDLE, //关闭广播或扫描状态
|
||||
BLE_ST_CONNECT, //链路刚连上
|
||||
BLE_ST_SEND_DISCONN, //发送断开命令,等待链路断开
|
||||
BLE_ST_DISCONN, //链路断开状态
|
||||
BLE_ST_CONNECT_FAIL, //连接失败
|
||||
BLE_ST_CONNECTION_UPDATE_OK,//更新连接参数完成
|
||||
|
||||
BLE_ST_ADV = 0x20, //设备处于广播状态
|
||||
BLE_ST_NOTIFY_IDICATE, //设备已连上,允许发数(已被主机使能通知)
|
||||
|
||||
BLE_ST_SCAN = 0x40, //设备处于搜索状态
|
||||
BLE_ST_CREATE_CONN, //发起设备连接
|
||||
BLE_ST_SEND_CREATE_CONN_CANNEL, //取消发起设备连接
|
||||
BLE_ST_SEARCH_COMPLETE, //链路连上,已搜索完profile,可以发送数据操作
|
||||
|
||||
BLE_ST_SEND_STACK_EXIT = 0x60, //发送退出协议栈命令,等待完成
|
||||
BLE_ST_STACK_EXIT_COMPLETE, //协议栈退出成功
|
||||
|
||||
} ble_state_e;
|
||||
|
||||
enum {
|
||||
APP_BLE_NO_ERROR = 0,
|
||||
APP_BLE_BUFF_FULL, //buffer 满,会丢弃当前发送的数据包
|
||||
APP_BLE_BUFF_ERROR, //
|
||||
APP_BLE_OPERATION_ERROR, //操作错误
|
||||
APP_BLE_IS_DISCONN, //链路已断开
|
||||
APP_BLE_NO_WRITE_CCC, //主机没有 write Client Characteristic Configuration
|
||||
};
|
||||
|
||||
struct BLE_CONFIG_VAR {
|
||||
ble_state_e JL_ble_status;
|
||||
struct ble_server_operation_t *rcsp_ble;
|
||||
};
|
||||
|
||||
#endif//__BLE_USER_H__
|
||||
@@ -0,0 +1,14 @@
|
||||
#ifndef __SPP_CONFIG_H__
|
||||
#define __SPP_CONFIG_H__
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
bool bt_3th_spp_fw_ready(void *priv);
|
||||
s32 bt_3th_spp_send(void *priv, void *data, u16 len);
|
||||
void bt_3th_spp_callback_set(void (*resume)(void), void (*recieve)(void *, void *, u16), void (*status)(u8));
|
||||
u8 bt_3th_get_jl_spp_status(void);
|
||||
int bt_3th_spp_data_send(void *priv, u8 *buf, u16 len);
|
||||
void bt_3th_spp_init(void);
|
||||
void bt_3th_spp_get_operation_table(void);
|
||||
|
||||
#endif//__SPP_CONFIG_H__
|
||||
@@ -0,0 +1,37 @@
|
||||
#ifndef __SPP_USER_H__
|
||||
#define __SPP_USER_H__
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
extern void (*spp_state_cbk)(u8 state);
|
||||
extern void (*spp_recieve_cbk)(void *priv, u8 *buf, u16 len);
|
||||
extern void user_spp_data_handler_in_lib(u8 packet_type, u16 ch, u8 *packet, u16 size);
|
||||
|
||||
struct spp_operation_t {
|
||||
int(*disconnect)(void *priv);
|
||||
int(*send_data)(void *priv, void *buf, u16 len);
|
||||
int(*regist_wakeup_send)(void *priv, void *cbk);
|
||||
int(*regist_recieve_cbk)(void *priv, void *cbk);
|
||||
int(*regist_state_cbk)(void *priv, void *cbk);
|
||||
int(*busy_state)(void);
|
||||
};
|
||||
|
||||
enum {
|
||||
SPP_USER_ERR_NONE = 0x0,
|
||||
SPP_USER_ERR_SEND_BUFF_BUSY,
|
||||
SPP_USER_ERR_SEND_OVER_LIMIT,
|
||||
SPP_USER_ERR_SEND_FAIL,
|
||||
};
|
||||
|
||||
enum {
|
||||
SPP_USER_ST_NULL = 0x0,
|
||||
SPP_USER_ST_CONNECT,
|
||||
SPP_USER_ST_DISCONN,
|
||||
SPP_USER_ST_WAIT_DISC,
|
||||
SPP_USER_ST_CONNECT_OTA,
|
||||
SPP_USER_ST_DISCONN_OTA,
|
||||
};
|
||||
|
||||
void spp_get_operation_table(struct spp_operation_t **interface_pt);
|
||||
|
||||
#endif//__SPP_USER_H__
|
||||
+261
@@ -0,0 +1,261 @@
|
||||
// binary representation
|
||||
// attribute size in bytes (16), flags(16), handle (16), uuid (16/128), value(...)
|
||||
|
||||
#ifndef _FMNA_API_H
|
||||
#define _FMNA_API_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "btstack/bluetooth.h"
|
||||
|
||||
#define ret_code_t int
|
||||
#define fmna_ret_code_t int
|
||||
|
||||
//ret_code & fmna_ret_code_t return,list result
|
||||
#define FMY_SUCCESS 0 ///< Successful command
|
||||
#define FMY_ERROR_INTERNAL 1 ///< Internal Error
|
||||
#define FMY_ERROR_INVALID_STATE 2 ///< Invalid state, operation disallowed in this state
|
||||
#define FMY_ERROR_INVALID_LENGTH 3 ///< Invalid Length
|
||||
#define FMY_ERROR_INVALID_DATA 4 ///< Invalid Data
|
||||
#define FMY_ERROR_NULL 5 ///< Null Pointer
|
||||
#define FMY_ERROR_NO_MEM 6 ///< No memory
|
||||
#define FMY_ERROR_WRITE_FLASH 7 ///<
|
||||
|
||||
typedef enum {
|
||||
FMNA_SM_BOOT = 0,
|
||||
FMNA_SM_PAIR,
|
||||
FMNA_SM_SEPARATED,
|
||||
FMNA_SM_NEARBY,
|
||||
FMNA_SM_CONNECTING,
|
||||
FMNA_SM_FMNA_PAIR,
|
||||
FMNA_SM_FMNA_PAIR_COMPLETE,
|
||||
FMNA_SM_CONNECTED,
|
||||
FMNA_SM_DISCONNECTING,
|
||||
FMNA_SM_NOCHANGE,
|
||||
FMNA_SM_UNPAIR,
|
||||
} FMNA_SM_State_t;
|
||||
|
||||
typedef enum {
|
||||
FMNA_SM_EVENT_BOOT = 0,
|
||||
FMNA_SM_EVENT_NEARBY_SEPARATED_TIMEOUT,
|
||||
FMNA_SM_EVENT_KEY_ROTATE,
|
||||
FMNA_SM_EVENT_BONDED,
|
||||
FMNA_SM_EVENT_UNBONDED,
|
||||
FMNA_SM_EVENT_CONNECTED,
|
||||
FMNA_SM_EVENT_DISCONNECTED,
|
||||
FMNA_SM_EVENT_NEARBY,
|
||||
FMNA_SM_EVENT_SEPARATED,
|
||||
FMNA_SM_EVENT_PAIR,
|
||||
FMNA_SM_EVENT_SOUND_START,
|
||||
FMNA_SM_EVENT_SOUND_STOP,
|
||||
FMNA_SM_EVENT_SOUND_COMPLETE,
|
||||
FMNA_SM_EVENT_LOST_UT_SPEAKER_START,
|
||||
FMNA_SM_EVENT_FMNA_PAIRING_INITIATE,
|
||||
FMNA_SM_EVENT_FMNA_PAIRING_FINALIZE,
|
||||
FMNA_SM_EVENT_FMNA_PAIRING_COMPLETE,
|
||||
FMNA_SM_EVENT_FMNA_PAIRING_MFITOKEN,
|
||||
FMNA_SM_EVENT_MOTION_DETECTED,
|
||||
FMNA_SM_EVENT_DEBUG_RESET_INTO_SEPARATED,
|
||||
|
||||
FMNA_SM_EVENT_CALL_FUNC_HANDLER = 0x80,
|
||||
} FMNA_SM_Event_t;
|
||||
|
||||
typedef enum {
|
||||
BAT_STATE_FULL = 0,
|
||||
BAT_STATE_MEDIUM,
|
||||
BAT_STATE_LOW,
|
||||
BAT_STATE_CRITICALLY_LOW,//5.1.4,stop advertising
|
||||
} fmna_bat_state_level_t;
|
||||
|
||||
typedef enum {
|
||||
FMNA_ADV_MODE_FAST = 0,
|
||||
FMNA_ADV_MODE_SLOW,
|
||||
} FMNA_ADV_Mode_t;
|
||||
|
||||
typedef enum {
|
||||
FMNA_SOUND_INIT = 0,
|
||||
FMNA_SOUND_START,
|
||||
FMNA_SOUND_STOP,
|
||||
} FMNA_SOUND_OP_t;
|
||||
|
||||
|
||||
enum {
|
||||
FMNA_OTA_OP_SUCC = 0,
|
||||
FMNA_OTA_OP_NO_SPACE,
|
||||
FMNA_OTA_OP_INIT_FAIL,
|
||||
FMNA_OTA_OP_WRITE_FAIL,
|
||||
FMNA_OTA_OP_CRC_FAIL,
|
||||
FMNA_OTA_OP_MALLOC_FAIL,
|
||||
FMNA_OTA_OP_PKT_NUM_ERR,
|
||||
FMNA_OTA_OP_LEN_ERR,
|
||||
FMNA_OTA_OP_OTHER_ERR,
|
||||
};
|
||||
|
||||
|
||||
typedef enum {
|
||||
FMNA_UARP_OTA_REQ = 1,
|
||||
FMNA_UARP_OTA_FILE_INFO,
|
||||
FMNA_UARP_OTA_DATA,
|
||||
FMNA_UARP_OTA_END,
|
||||
FMNA_UARP_OTA_DISCONNECT,
|
||||
} uarp_cmd_type_t;
|
||||
|
||||
/*
|
||||
0 = Powered
|
||||
1 = Non-rechargeable battery
|
||||
2 = Rechargeable battery
|
||||
*/
|
||||
typedef enum {
|
||||
FMNA_BAT_POWERED = 0,
|
||||
FMNA_BAT_NON_RECHARGEABLE,
|
||||
FMNA_BAT_RECHARGEABLE,
|
||||
} FMNA_battery_level_t;
|
||||
|
||||
struct fmna_event {
|
||||
u8 event;
|
||||
u8 args[3];
|
||||
u32 value;
|
||||
void *event_data;
|
||||
void *handler;
|
||||
};
|
||||
|
||||
//Accessory category
|
||||
#define FMY_CATEGORY_Finder 1
|
||||
#define FMY_CATEGORY_Other 128
|
||||
#define FMY_CATEGORY_Luggage 129
|
||||
#define FMY_CATEGORY_Backpack 130
|
||||
#define FMY_CATEGORY_Jacket 131
|
||||
#define FMY_CATEGORY_Coat 132
|
||||
#define FMY_CATEGORY_Shoes 133
|
||||
#define FMY_CATEGORY_Bike 134
|
||||
#define FMY_CATEGORY_Scooter 135
|
||||
#define FMY_CATEGORY_Stroller 136
|
||||
#define FMY_CATEGORY_Wheelchair 137
|
||||
#define FMY_CATEGORY_Boat 138
|
||||
#define FMY_CATEGORY_Helmet 139
|
||||
#define FMY_CATEGORY_Skateboard 140
|
||||
#define FMY_CATEGORY_Skis 141
|
||||
#define FMY_CATEGORY_Snowboard 142
|
||||
#define FMY_CATEGORY_Surfboard 143
|
||||
#define FMY_CATEGORY_Camera 144
|
||||
#define FMY_CATEGORY_Laptop 145
|
||||
#define FMY_CATEGORY_Watch 146
|
||||
#define FMY_CATEGORY_Flash_drive 147
|
||||
#define FMY_CATEGORY_Drone 148
|
||||
#define FMY_CATEGORY_Headphones 149
|
||||
#define FMY_CATEGORY_Earphones 150
|
||||
#define FMY_CATEGORY_Inhaler 151
|
||||
#define FMY_CATEGORY_Sunglasses 152
|
||||
#define FMY_CATEGORY_Handbag 153
|
||||
#define FMY_CATEGORY_Wallet 154
|
||||
#define FMY_CATEGORY_Umbrella 155
|
||||
#define FMY_CATEGORY_Water_bottle 156
|
||||
#define FMY_CATEGORY_Tools_or_tool_box 157
|
||||
#define FMY_CATEGORY_Keys 158
|
||||
#define FMY_CATEGORY_Smart_case 159
|
||||
#define FMY_CATEGORY_Remote 160
|
||||
#define FMY_CATEGORY_Hat 161
|
||||
#define FMY_CATEGORY_Motorbike 162
|
||||
#define FMY_CATEGORY_Consumer_electronic_device 163
|
||||
#define FMY_CATEGORY_Apparel 164
|
||||
#define FMY_CATEGORY_Transportation_device 165
|
||||
#define FMY_CATEGORY_Sports_equipment 166
|
||||
#define FMY_CATEGORY_Personal_item 167
|
||||
|
||||
//Accessory capability
|
||||
#define FMY_CAPABILITY_SUPPORTS_PLAY_SOUND BIT(0) //Supports play sound
|
||||
#define FMY_CAPABILITY_SUPPORTS_MOTION_DETECTOR_UT BIT(1) //Supports motion detector UT
|
||||
#define FMY_CAPABILITY_SUPPORTS_SN_LOOKUP_BY_NFC BIT(2) //Supports serial number lookup by NFC
|
||||
#define FMY_CAPABILITY_SUPPORTS_SN_LOOKUP_BY_BLE BIT(3) //Supports serial number lookup by BLE
|
||||
#define FMY_CAPABILITY_SUPPORTS_FW_UPDATE_SERVICE BIT(4) //Supports firmware update service
|
||||
|
||||
//uuid,mac type
|
||||
#define STATIC_ADV_ADDR_TYPE_MASK (0x03 << 6)
|
||||
#define FMY_UUID_SERVICE 0xFD44
|
||||
#define APPLE_VENDOR_ID 0x004C
|
||||
|
||||
typedef struct {
|
||||
uint16_t pairing_control_point_handle;
|
||||
uint16_t owner_cfg_control_point_handle;
|
||||
uint16_t non_owner_control_point_handle;
|
||||
uint16_t owner_info_porint_handle;
|
||||
uint16_t debug_control_point_handle;
|
||||
uint16_t firmware_update_handle;
|
||||
} fmna_att_handle_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
int (*evnet_post_msg)(u8 priv_event, void *evt_data, u32 value, void *handler);
|
||||
int (*set_adv_data)(uint8_t fmna_state, uint8_t *fmna_payload, uint8_t size);
|
||||
int (*set_adv_mode)(uint8_t mode);
|
||||
int (*set_adv_enable)(uint8_t enable);
|
||||
int (*get_mac)(uint8_t *mac);
|
||||
int (*set_mac)(uint8_t *mac);
|
||||
int (*att_send_data)(uint16_t conn_handle, uint16_t att_handle, uint8_t *data, uint16_t len, att_op_type_e op_type);
|
||||
int (*get_battery_level)(void);
|
||||
int (*call_disconnect)(uint16_t conn_handle, uint8_t reason);
|
||||
int (*sound_control)(FMNA_SOUND_OP_t op);
|
||||
int (*uarp_ota_process)(uarp_cmd_type_t cmd_type, uint8_t *recv_data, uint32_t recv_len);
|
||||
int (*sensor_init)(void);
|
||||
int (*sensor_deinit)(void);
|
||||
bool (*motion_deteted)(void);
|
||||
uint16_t (*state_callback)(FMNA_SM_State_t fmy_state, const char *state_string);
|
||||
bool (*check_capability)(u8 cap);
|
||||
} fmna_app_api_t;
|
||||
|
||||
typedef struct {
|
||||
//读取信息时,指针为0则不获取对应项信息
|
||||
uint8_t *serial_number;//16byte
|
||||
uint8_t *uuid;//16byte
|
||||
uint8_t *token;//1024byte
|
||||
} fmna_input_cfg_t;
|
||||
//--------------------------------------------------------------------------------
|
||||
void fmna_gatt_set_att_handle_table(const fmna_att_handle_t *att_table);
|
||||
void fmna_gatt_platform_connect(uint16_t conn_handle);
|
||||
void fmna_state_machine_event_handle(void *event);
|
||||
fmna_ret_code_t fmna_gatt_config_char_write_handler(uint16_t conn_handle, uint16_t uuid, uint16_t length, uint8_t const *data);
|
||||
fmna_ret_code_t fmna_gatt_pairing_char_authorized_write_handler(uint16_t conn_handle, uint16_t uuid, uint16_t length, uint8_t const *data);
|
||||
fmna_ret_code_t fmna_gatt_nonown_char_write_handler(uint16_t conn_handle, uint16_t uuid, uint16_t length, uint8_t const *data);
|
||||
fmna_ret_code_t fmna_gatt_paired_owner_char_write_handler(uint16_t conn_handle, uint16_t uuid, uint16_t length, uint8_t const *data);
|
||||
fmna_ret_code_t fmna_gatt_debug_char_write_handler(uint16_t conn_handle, uint16_t uuid, uint16_t length, uint8_t const *data);
|
||||
fmna_ret_code_t fmna_gatt_uarp_char_write_handler(uint16_t conn_handle, uint16_t uuid, uint16_t length, uint8_t const *data);
|
||||
void fmna_debug_control_point_rx_handler(uint16_t conn_handle, uint8_t const *data, uint16_t length) ;
|
||||
void fmna_save_mac_vm_id(uint16_t vm_id);
|
||||
void fmna_set_app_api(fmna_app_api_t *api_table);
|
||||
bool fmna_connection_is_fmna_paired(void);
|
||||
uint8_t fmna_get_current_state(void);
|
||||
void fmna_gatt_set_mtu_size(uint16_t conn_handle, uint16_t mtu_size);
|
||||
const uint8_t *fmna_get_product_data(void);
|
||||
uint32_t fmna_version_get_fw_version(void);
|
||||
uint8_t *fmna_version_get_network_version(void);
|
||||
void fmna_set_accessory_category(const uint8_t *accessory_category);
|
||||
const uint8_t *fmna_get_accessory_category(void);
|
||||
uint32_t fmna_pm_peer_count(void);
|
||||
void fmna_version_init(uint16_t major_number, uint8_t minor_number, uint8_t revision_number);
|
||||
void fmna_paired_serialnumber_lookup_enable(uint8_t enable);
|
||||
int fmna_get_paired_serialnumber_lookup_state(void);
|
||||
|
||||
void fmna_connection_connected_handler(uint16_t conn_handle, uint16_t conn_interval);
|
||||
void fmna_connection_conn_param_update_handler(uint16_t conn_handle, uint16_t conn_interval);
|
||||
void fmna_connection_disconnected_handler(uint16_t conn_handle, uint8_t disconnect_reason);
|
||||
void fmna_connection_encryption_change_complete(uint16_t conn_handle, bool is_sucess);
|
||||
int fmna_connection_pair_request_check(uint16_t conn_handle);
|
||||
void fmna_connection_set_sys_max_connections(uint8_t max_connections);
|
||||
void fmna_config_user_vm_rang(uint16_t vm_start_id, uint16_t vm_end_id);
|
||||
void fmna_connection_disconnect_all(void);
|
||||
void fmna_gatt_platform_recieve_indication_response(uint16_t conn_handle, uint16_t att_handle);
|
||||
void fmna_plaform_reset_config(void);
|
||||
void fmna_set_product_data(const uint8_t *data);
|
||||
|
||||
int fmna_Base64Decode(char *inStr, char *outHex, int outBufLen);
|
||||
int uuid_str_to_hex(const char *uuid_str, uint8_t *out_buf);
|
||||
|
||||
void fmna_user_cfg_set_patch(const char *path);
|
||||
ret_code_t fmna_user_cfg_open(void);
|
||||
ret_code_t fmna_user_cfg_close(void);
|
||||
ret_code_t fmna_user_cfg_write(fmna_input_cfg_t *input_cfg);
|
||||
ret_code_t fmna_user_cfg_read(fmna_input_cfg_t *cfg);
|
||||
ret_code_t fmna_set_crypto_enc_key_config(const char *server_enc_key, const char *signature_vf_key);
|
||||
bool fmna_user_cfg_is_exist(void);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
|
||||
#ifndef _JL_RCSP_LIB_API_H_
|
||||
#define _JL_RCSP_LIB_API_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "uart.h"
|
||||
|
||||
#define USE_LITTLE_ENDIAN 0
|
||||
#define USE_BIG_ENDIAN 1
|
||||
|
||||
#define USE_ENDIAN_TYPE USE_LITTLE_ENDIAN
|
||||
|
||||
|
||||
#define AI_LICENCE_LEN 16
|
||||
|
||||
enum {
|
||||
TULING = 0,
|
||||
DEEPBRAIN,
|
||||
};
|
||||
|
||||
#pragma pack(1)
|
||||
struct _AI_platform {
|
||||
u8 platform;
|
||||
u8 license[AI_LICENCE_LEN];
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct _rcsp_auth_hdl {
|
||||
u16 ble_con_handle;
|
||||
u8 spp_remote_addr[6];
|
||||
bool rcsp_auth_flag; // 是否认证成功
|
||||
} JL_rcsp_auth_hdl;
|
||||
#pragma pack()
|
||||
|
||||
u16 app_htons(u16 n);
|
||||
u16 app_ntohs(u16 n);
|
||||
|
||||
u32 app_htonl(u32 n);
|
||||
u32 app_ntohl(u32 n);
|
||||
|
||||
void JL_rcsp_auth_init(int (*send)(u16, u8 *, u8 *, u16, uint16_t, u8), u8 *link_key, u8 *addr);
|
||||
void JL_rcsp_auth_reset(void);
|
||||
|
||||
/**
|
||||
* @brief 判断buf是否是rcsp协议头
|
||||
*
|
||||
* @param buf
|
||||
* @param len
|
||||
*/
|
||||
bool rcsp_protocol_head_check(u8 *buf, u16 len);
|
||||
|
||||
/**
|
||||
* @brief 设备断开ble/spp时调用,重置重置认证情况
|
||||
*
|
||||
* @param ble_con_handle ble的con_handle句柄
|
||||
* @param spp_remote_addr spp:mac_addr
|
||||
*/
|
||||
void JL_rcsp_reset_bthdl_auth(u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
|
||||
/**
|
||||
* @brief 获取设备是否rcsp验证
|
||||
*
|
||||
* @param ble_con_handle ble的con_handle句柄
|
||||
* @param spp_remote_addr spp:mac_addr
|
||||
*/
|
||||
bool JL_rcsp_get_auth_flag_with_bthdl(u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
|
||||
u8 JL_rcsp_get_auth_flag(void);
|
||||
void JL_rcsp_set_auth_flag(u8 auth_flag);
|
||||
|
||||
/**
|
||||
* @brief rcsp验证函数
|
||||
*
|
||||
* @param ble_con_handle ble的con_handle句柄
|
||||
* @param spp_remote_addr spp:mac_addr
|
||||
* @param buffer 手机发过来的验证数据
|
||||
* @param len buffer 's length
|
||||
*/
|
||||
void JL_rcsp_auth_recieve(u16 ble_con_handle, u8 *spp_remote_addr, u8 *buffer, u16 len);
|
||||
|
||||
u8 get_rcsp_version(void);
|
||||
|
||||
/**
|
||||
* @brief 设置设备rcsp验证情况
|
||||
*
|
||||
* @param hdl 第一个连接设备的认证情况
|
||||
* @param hdl1 第二个连接设备的认证情况
|
||||
*/
|
||||
void JL_rcsp_set_auth_hdl(JL_rcsp_auth_hdl *hdl, JL_rcsp_auth_hdl *hdl1);
|
||||
|
||||
/**
|
||||
* @brief 获取设备是否rcsp验证
|
||||
*
|
||||
* @param hdl 第一个连接设备的认证情况
|
||||
* @param hdl1 第二个连接设备的认证情况
|
||||
*/
|
||||
void JL_rcsp_get_auth_hdl(JL_rcsp_auth_hdl *hdl, JL_rcsp_auth_hdl *hdl1);
|
||||
|
||||
/**
|
||||
* @brief 设备连接认证/断开连接后lib会调用这个函数,
|
||||
* 应用层需要调用JL_rcsp_get_auth_hdl获取手机的认证状态,
|
||||
* 并把手机的认证情况同步到tws对端
|
||||
*/
|
||||
void JL_rcsp_auth_flag_tws_sync(void);
|
||||
|
||||
#endif //_JL_RCSP_LIB_H_
|
||||
@@ -0,0 +1,15 @@
|
||||
#ifndef __JL_RCSP_ATTR_H__
|
||||
#define __JL_RCSP_ATTR_H__
|
||||
#include "typedef.h"
|
||||
|
||||
typedef u32(*attr_get_func)(void *priv, u8 attr, u8 *buf, u16 buf_size, u32 offset);
|
||||
typedef void (*attr_set_func)(void *priv, u8 attr, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
|
||||
u16 add_one_attr_huge(u8 *buf, u16 max_len, u8 offset, u8 type, u8 *data, u16 size);
|
||||
u8 add_one_attr(u8 *buf, u16 max_len, u8 offset, u8 type, u8 *data, u8 size);
|
||||
u8 add_one_attr_ex(u8 *buf, u16 max_len, u8 offset, u8 type, u8 *data, u8 size, u8 att_size);
|
||||
u8 add_one_attr_continue(u8 *buf, u16 max_len, u8 offset, u8 type, u8 *data, u8 size);
|
||||
u32 attr_get(void *priv, u8 *buf, u16 buf_size, const attr_get_func *func_tab, u8 attr_max, u32 mask);
|
||||
void attr_set(void *priv, u8 *data, u16 len, const attr_set_func *func_tab, u8 attr_max, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
|
||||
#endif//__JL_RCSP_ATTR_H__
|
||||
@@ -0,0 +1,122 @@
|
||||
#ifndef __JL_PACKET_H__
|
||||
#define __JL_PACKET_H__
|
||||
|
||||
#include "typedef.h"
|
||||
#include "generic/list.h"
|
||||
|
||||
#define READ_BIG_U16(a) ((*((u8*)(a)) <<8) + *((u8*)(a)+1))
|
||||
#define READ_BIG_U32(a) ((*((u8*)(a)) <<24) + (*((u8*)(a)+1)<<16) + (*((u8*)(a)+2)<<8) + *((u8*)(a)+3))
|
||||
|
||||
#define READ_LIT_U16(a) (*((u8*)(a)) + (*((u8*)(a)+1)<<8))
|
||||
#define READ_LIT_U32(a) (*((u8*)(a)) + (*((u8*)(a)+1)<<8) + (*((u8*)(a)+2)<<16) + (*((u8*)(a)+3)<<24))
|
||||
|
||||
|
||||
#define WRITE_BIG_U16(a,src) {*((u8*)(a)+0) = (u8)(src>>8); *((u8*)(a)+1) = (u8)(src&0xff); }
|
||||
#define WRITE_BIG_U32(a,src) {*((u8*)(a)+0) = (u8)((src)>>24); *((u8*)(a)+1) = (u8)(((src)>>16)&0xff);*((u8*)(a)+2) = (u8)(((src)>>8)&0xff);*((u8*)(a)+3) = (u8)((src)&0xff);}
|
||||
|
||||
#define WRITE_LIT_U16(a,src) {*((u8*)(a)+1) = (u8)(src>>8); *((u8*)(a)+0) = (u8)(src&0xff); }
|
||||
#define WRITE_LIT_U32(a,src) {*((u8*)(a)+3) = (u8)((src)>>24); *((u8*)(a)+2) = (u8)(((src)>>16)&0xff);*((u8*)(a)+1) = (u8)(((src)>>8)&0xff);*((u8*)(a)+0) = (u8)((src)&0xff);}
|
||||
|
||||
|
||||
#pragma pack(1)
|
||||
typedef union __HEAD_BIT {
|
||||
struct {
|
||||
u16 _OpCode: 8; //OpCode val
|
||||
u16 _app_type : 3; //app_type
|
||||
u16 _unsed : 3; //unsed
|
||||
u16 _resp : 1; //request for response
|
||||
u16 _type : 1; //command or response
|
||||
} _i;
|
||||
u16 _t;
|
||||
} HEAD_BIT;
|
||||
|
||||
struct __JL_PACKET {
|
||||
u8 tag[3];
|
||||
HEAD_BIT head;
|
||||
u16 length;
|
||||
u8 data[0];
|
||||
};
|
||||
#pragma pack()
|
||||
typedef struct __JL_PACKET JL_PACKET;
|
||||
|
||||
typedef struct __JL_QUEUE {
|
||||
struct list_head head;
|
||||
u32 total_size;
|
||||
u32 max_size;
|
||||
} JL_QUEUE;
|
||||
|
||||
typedef struct __JL_PACKET_ENTRY {
|
||||
struct list_head entry;
|
||||
u16 packet_size;
|
||||
u8 packet[0];
|
||||
} JL_PACKET_ENTRY;
|
||||
|
||||
struct __JL_PACKET_CONTROL {
|
||||
JL_PACKET packet;
|
||||
JL_QUEUE queue;
|
||||
u8 *packet_buf;
|
||||
u32 packet_offset;
|
||||
u32 packet_remain;
|
||||
};
|
||||
typedef struct __JL_PACKET_CONTROL JL_PACKET_CONTROL;
|
||||
|
||||
#define JL_PACK_START_TAG0 (0xfe)
|
||||
#define JL_PACK_START_TAG1 (0xdc)
|
||||
#define JL_PACK_START_TAG2 (0xba)
|
||||
#define JL_PACK_END_TAG (0xef)
|
||||
#define JL_ONE_PACKET_LEN(n) (sizeof(JL_PACKET) + n + 1)
|
||||
|
||||
#ifdef JL_RCSP_UBOOT_LIB
|
||||
#define JL_MTU_RESV (540L)
|
||||
#define JL_MTU_SEND (128L)
|
||||
#define JL_RECIEVE_BUF_SIZE ((JL_MTU_RESV + sizeof(JL_PACKET))*2)
|
||||
#define JL_CMD_POOL_SIZE (JL_MTU_SEND)
|
||||
#define JL_RESP_POOL_SIZE (JL_MTU_SEND*2)
|
||||
#define JL_WAIT_RESP_POOL_SIZE (JL_MTU_SEND)
|
||||
#else
|
||||
#define JL_MTU_RESV (540L)
|
||||
#define JL_MTU_SEND (128L)
|
||||
#define JL_RECIEVE_BUF_SIZE (JL_MTU_RESV + sizeof(JL_PACKET) + 128)
|
||||
#define JL_CMD_POOL_SIZE (JL_MTU_SEND*4)
|
||||
#define JL_RESP_POOL_SIZE (JL_MTU_SEND*2)
|
||||
#define JL_WAIT_RESP_POOL_SIZE (JL_MTU_SEND*2)
|
||||
#endif
|
||||
|
||||
void set_jl_rcsp_recieve_buf_size(u16 size);
|
||||
u16 rcsp_packet_write_alloc_len(void);
|
||||
|
||||
u32 rcsp_packet_need_buf_size(void);
|
||||
u32 rcsp_packet_buf_init(u8 *buf, u32 len, u8 *buf1, u32 len1);
|
||||
|
||||
u16 JL_packet_get_rx_max_mtu(void);
|
||||
u16 JL_packet_get_tx_max_mtu(void);
|
||||
u16 JL_packet_set_mtu(u16 mtu);
|
||||
void JL_packet_recieve(void *buf, u16 len, u8 buf_index);
|
||||
void JL_packet_clear_all_data(void);
|
||||
bool JL_packet_find(u8 **r_buf, JL_PACKET **packet, u8 buf_index);
|
||||
void JL_packet_init(void);
|
||||
void JL_packet_clear(void);
|
||||
|
||||
void JL_packet_packing(
|
||||
JL_PACKET *packet,
|
||||
u8 OpCode,
|
||||
u8 type,
|
||||
u8 request_rsp,
|
||||
u8 *extra_param,
|
||||
u16 extra_len,
|
||||
u8 *data,
|
||||
u16 len);
|
||||
|
||||
void set_jl_mtu_resv(u16 jl_mtu_resv_var);
|
||||
void set_jl_mtu_send(u16 jl_mtu_send_var);
|
||||
|
||||
extern u16 jl_mtu_resv;
|
||||
extern u16 jl_mtu_send;
|
||||
extern u16 jl_recieve_buf_size;
|
||||
extern u16 jl_cmd_pool_size;
|
||||
extern u16 jl_rcsp_pool_size;
|
||||
extern u16 jl_wait_rcsp_pool_size;
|
||||
|
||||
#endif//__JL_PACKET_H__
|
||||
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
#ifndef __JL_PROTOCOL_H__
|
||||
#define __JL_PROTOCOL_H__
|
||||
|
||||
#include "typedef.h"
|
||||
#include "JL_rcsp_packet.h"
|
||||
|
||||
enum {
|
||||
JL_NOT_NEED_RESPOND = 0,
|
||||
JL_NEED_RESPOND,
|
||||
};
|
||||
|
||||
typedef enum __JL_ERR {
|
||||
JL_ERR_NONE = 0x0,
|
||||
JL_ERR_SEND_DATA_OVER_LIMIT,
|
||||
JL_ERR_SEND_BUSY,
|
||||
JL_ERR_SEND_NOT_READY,
|
||||
JL_ERR_EXIT,
|
||||
JL_ERR_SLAVE_SEND,
|
||||
JL_ERR_MAX,
|
||||
} JL_ERR;
|
||||
|
||||
typedef enum __JL_PRO_STATUS {
|
||||
JL_PRO_STATUS_SUCCESS = 0x0,
|
||||
JL_PRO_STATUS_FAIL,
|
||||
JL_PRO_STATUS_UNKOWN_CMD,
|
||||
JL_PRO_STATUS_BUSY,
|
||||
JL_PRO_STATUS_NO_RESPONSE,
|
||||
JL_PRO_STATUS_CRC_ERR,
|
||||
JL_PRO_STATUS_ALL_DATA_CRC_ERR,
|
||||
JL_PRO_STATUS_PARAM_ERR,
|
||||
JL_PRO_STATUS_RESP_DATA_OVER_LIMIT,
|
||||
|
||||
} JL_PRO_STATUS;
|
||||
|
||||
///*< JL_CMD、JL_CMD_response、JL_DATA、JL_DATA_response packet send functions>*/
|
||||
JL_ERR JL_CMD_send(u8 OpCode, u8 *data, u16 len, u8 request_rsp, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
JL_ERR JL_CMD_response_send(u8 OpCode, u8 status, u8 sn, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
JL_ERR JL_DATA_send(u8 OpCode, u8 CMD_OpCode, u8 *data, u16 len, u8 request_rsp, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
JL_ERR JL_DATA_response_send(u8 OpCode, u8 status, u8 sn, u8 CMD_OpCode, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
|
||||
///*<JL_CMD、JL_CMD_response、JL_DATA、JL_DATA_response recieve>*/
|
||||
typedef struct __JL_PRO_CB {
|
||||
/*send function callback, SPP or ble*/
|
||||
void *priv;
|
||||
// bool (*fw_ready)(void *priv);
|
||||
// s32(*fw_send)(void *priv, void *buf, u16 len);
|
||||
|
||||
/*JL_CMD、JL_CMD_response、JL_DATA、JL_DATA_response packet recieve callback*/
|
||||
void (*CMD_resp)(void *priv, u8 OpCode, u8 OpCode_SN, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
void (*DATA_resp)(void *priv, u8 OpCode_SN, u8 CMD_OpCode, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
void (*CMD_no_resp)(void *priv, u8 OpCode, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
void (*DATA_no_resp)(void *priv, u8 CMD_OpCode, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
void (*CMD_recieve_resp)(void *priv, u8 OpCode, u8 status, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
void (*DATA_recieve_resp)(void *priv, u8 status, u8 CMD_OpCode, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
u8(*wait_resp_timeout)(void *priv, u8 OpCode, u8 counter);
|
||||
// void (*auth_pass_callback)(void *priv);
|
||||
} JL_PRO_CB;
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct _rcsp_bound_hdl {
|
||||
u16 ble_con_handle;
|
||||
u8 spp_remote_addr[6];
|
||||
} JL_rcsp_bound_hdl;
|
||||
#pragma pack()
|
||||
|
||||
// 一拖二设备标识与底层buf的绑定
|
||||
void rcsp_protocol_bound(u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
// 一拖二设备标识与底层buf的解除绑定
|
||||
void rcsp_protocol_reset_bound(u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
|
||||
/**
|
||||
* @brief 设置协议绑定信息
|
||||
*
|
||||
* @param hdl 第一个连接设备的协议绑定信息
|
||||
* @param hdl1 第二个连接设备的协议绑定信息
|
||||
*/
|
||||
void rcsp_protocol_set_bound_hdl(JL_rcsp_bound_hdl *hdl, JL_rcsp_bound_hdl *hdl1);
|
||||
|
||||
/**
|
||||
* @brief 获取协议绑定信息
|
||||
*
|
||||
* @param hdl 第一个连接设备的协议绑定信息
|
||||
* @param hdl1 第二个连接设备的协议绑定信息
|
||||
*/
|
||||
void rcsp_protocol_get_bound_hdl(JL_rcsp_bound_hdl *hdl, JL_rcsp_bound_hdl *hdl1);
|
||||
|
||||
extern u32 rcsp_protocol_need_buf_size(void);
|
||||
|
||||
extern void JL_protocol_init(u8 *buf, u32 len);
|
||||
extern void JL_protocol_exit(void);
|
||||
|
||||
extern void JL_protocol_dev_switch(const JL_PRO_CB *cb);
|
||||
|
||||
extern void JL_protocol_data_recieve(void *priv, void *buf, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
extern void JL_protocol_resume(void);
|
||||
|
||||
extern bool rcsp_send_list_is_empty(void);
|
||||
|
||||
extern void JL_send_packet_process(void);
|
||||
extern void JL_recieve_packet_parse_process(void);
|
||||
|
||||
|
||||
#endif//__JL_PROTOCOL_H__
|
||||
|
||||
|
||||
@@ -0,0 +1,167 @@
|
||||
|
||||
#ifndef _BTSTACK_RCSP_USER_H_
|
||||
#define _BTSTACK_RCSP_USER_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "JL_rcsp_api.h"
|
||||
#include "JL_rcsp_packet.h"
|
||||
#include "JL_rcsp_protocol.h"
|
||||
#include "btstack/le/att.h"
|
||||
|
||||
extern void *rcsp_server_ble_hdl; // ble连接handle
|
||||
extern void *rcsp_server_ble_hdl1; // ble连接handle,rcsp双连的时候有效
|
||||
|
||||
/**
|
||||
* @brief rcsp ble/spp handle初始化
|
||||
*/
|
||||
void bt_rcsp_interface_init(const uint8_t *rcsp_profile_data);
|
||||
|
||||
/**
|
||||
* @brief rcsp ble/spp handle退出并销毁
|
||||
*/
|
||||
void bt_rcsp_interface_exit(void);
|
||||
|
||||
/**
|
||||
* @brief 获取rcsp已连接设备数目
|
||||
*
|
||||
* @result 返回连接的手机设备数
|
||||
*/
|
||||
u8 bt_rcsp_device_conn_num(void);
|
||||
/**
|
||||
* @brief 获取当前已连接ble数目
|
||||
*
|
||||
* @result 返回连接的ble手机设备数
|
||||
*/
|
||||
u8 bt_rcsp_ble_conn_num(void);
|
||||
/**
|
||||
* @brief 获取当前已连接spp数目
|
||||
*
|
||||
* @result 返回连接的spp手机设备数
|
||||
*/
|
||||
u8 bt_rcsp_spp_conn_num(void);
|
||||
|
||||
/**
|
||||
* @brief 在连接或断开的时候,设置rcsp蓝牙连接信息
|
||||
*
|
||||
* @param con_handle ble连接或断开时输入
|
||||
* @param remote_addr spp连接或断开时输入
|
||||
* @param isconn true:连接;false:断开
|
||||
*/
|
||||
void bt_rcsp_set_conn_info(u16 con_handle, void *remote_addr, bool isconn);
|
||||
|
||||
/**
|
||||
* @brief 用于tws同步,从机接收到主机的tws数据后同步到本地
|
||||
*
|
||||
* @param bt handle数据
|
||||
* @param bt handle数据长度
|
||||
*/
|
||||
void rcsp_interface_set_bt_hdl_with_tws_data(u8 *recieve_buf, u16 recieve_len);
|
||||
|
||||
|
||||
/**
|
||||
* @brief rcsp用户自定义ble广播名字
|
||||
*/
|
||||
// _WEAK_ const char *rcsp_ble_name()
|
||||
|
||||
/**
|
||||
* @brief 用于外部接收ble/spp自定义数据使用
|
||||
*
|
||||
* @param ble_con_hdl ble发送句柄
|
||||
* @param remote_addr spp发送地址
|
||||
* @param buf 接收数据
|
||||
* @param len 接收数据的长度
|
||||
* @param att_handle ble_con_hdl有值时,ble的特征值,一般是用户自定义的特征
|
||||
*/
|
||||
// _WEAK_ void bt_rcsp_custom_recieve_callback(u16 ble_con_hdl, void *remote_addr, u8 *buf, u16 len, uint16_t att_handle)
|
||||
|
||||
/**
|
||||
* @brief 用于发送ble/spp自定义数据使用
|
||||
*
|
||||
* @param ble_con_hdl ble发送句柄
|
||||
* @param remote_addr spp发送地址 注:当ble_con_hdl与remote_addr都不填时,给所有的设备都发数据
|
||||
* @param buf 发送的数据
|
||||
* @param len 发送的数据长度
|
||||
* @param att_handle ble_con_hdl有值时,可填用户自定义的特征, 为0是rcsp的特征值
|
||||
* @param att_op_type 参考att_op_type_e枚举的排序
|
||||
*/
|
||||
void bt_rcsp_custom_data_send(u16 ble_con_hdl, u8 *remote_addr, u8 *buf, u16 len, uint16_t att_handle, att_op_type_e att_op_type);
|
||||
|
||||
/**
|
||||
* @brief 用于rcsp接收ble/spp数据使用
|
||||
*
|
||||
* @param hdl ble/spp发送句柄
|
||||
* @param remote_addr spp发送地址
|
||||
* @param buf 接收数据
|
||||
* @param len 接收数据的长度
|
||||
*/
|
||||
void bt_rcsp_recieve_callback(void *hdl, void *remote_addr, u8 *buf, u16 len);
|
||||
|
||||
/**
|
||||
* @brief 设置rcsp的ble的默认发送特征
|
||||
*
|
||||
* @param att_handle ble_con_hdl有值时,可填用户自定义的特征, 为0是rcsp的特征值
|
||||
* @param att_op_type 参考att_op_type_e枚举的排序,为0是rcsp的特征值
|
||||
*/
|
||||
void bt_rcsp_set_default_send_att_msg(uint16_t att_handle, att_op_type_e att_op_type);
|
||||
|
||||
/**
|
||||
* @brief 用于发送rcsp的数据使用
|
||||
*
|
||||
* @param ble_con_hdl ble发送句柄
|
||||
* @param remote_addr spp发送地址 注:当ble_con_hdl与remote_addr都不填时,给所有的设备都发数据
|
||||
* @param buf 发送的数据
|
||||
* @param len 发送的数据长度
|
||||
* @param att_handle ble_con_hdl有值时,可填用户自定义的特征, 为0是rcsp的特征值,或者是bt_rcsp_set_default_send_att_msg设置的
|
||||
* @param att_op_type 参考att_op_type_e枚举的排序,为0是rcsp默认配置,或者是bt_rcsp_set_default_send_att_msg设置的
|
||||
*/
|
||||
int bt_rcsp_data_send(u16 ble_con_hdl, u8 *remote_addr, u8 *buf, u16 len, uint16_t att_handle, u8 att_op_type);
|
||||
|
||||
/**
|
||||
* @brief 获取当前ble连接设备的mac地址
|
||||
*/
|
||||
u8 *rcsp_get_ble_hdl_remote_mac_addr(u16 ble_con_handle);
|
||||
|
||||
/**
|
||||
* @brief 获取tws同步的bt handle的总buf大小
|
||||
*/
|
||||
u16 rcsp_interface_tws_sync_buf_size();
|
||||
|
||||
/**
|
||||
* @brief rcsp主机同步bt handle数据给从机
|
||||
*
|
||||
* @param send_buf 外部malloc的一个指针,size根据rcsp_interface_tws_sync_buf_size获取
|
||||
*/
|
||||
void rcsp_interface_tws_sync_buf_content(u8 *send_buf);
|
||||
|
||||
/**
|
||||
* @brief tws同步rcsp bt_handle信息,用于tws同步ble句柄信息
|
||||
* 已实现于rcsp_bt_manage.c
|
||||
*/
|
||||
// _WEAK_ void rcsp_interface_bt_handle_tws_sync(void)
|
||||
|
||||
/**
|
||||
* @brief 用于外部自定义att_read_callback的使用
|
||||
*
|
||||
* @param hdl ble的结构体句柄
|
||||
* @param connection_handle ble的连接句柄
|
||||
* @param att_handle ble特征值
|
||||
* @param offset
|
||||
* @param buffer 读特征的数据
|
||||
* @param buffer_size 读特征的数据长度
|
||||
*/
|
||||
// _WEAK_ uint16_t bt_rcsp_custom_att_read_callback(void *hdl, hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t offset, uint8_t *buffer, uint16_t buffer_size)
|
||||
|
||||
/**
|
||||
* @brief 用于外部自定义att_write_callback的使用
|
||||
*
|
||||
* @param hdl ble的结构体句柄
|
||||
* @param connection_handle ble的连接句柄
|
||||
* @param att_handle ble特征值
|
||||
* @param transaction_mode
|
||||
* @param offset
|
||||
* @param buffer 写特征的数据
|
||||
* @param buffer_size 写特征的数据长度
|
||||
*/
|
||||
// _WEAK_ void bt_rcsp_custom_att_write_callback(void *hdl, hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t transaction_mode, uint16_t offset, uint8_t *buffer, uint16_t buffer_size)
|
||||
|
||||
#endif // _BTSTACK_RCSP_USER_H_
|
||||
@@ -0,0 +1,50 @@
|
||||
#ifndef __SCREEN_EAR_INTERFACE_H__
|
||||
#define __SCREEN_EAR_INTERFACE_H__
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
/*-------------------CMD start----------------------*/
|
||||
#define CUSTOM_ALL_INFO_CMD 0xff // 所有信息
|
||||
#define CUSTOM_BT_CONNECT_STATE_CMD 0x1 // bt连接状态
|
||||
#define CUSTOM_BLE_CONNECT_STATE_CMD 0x2 // ble连接状态
|
||||
#define CUSTOM_BLE_BATTERY_STATE_CMD 0x3 // 电量信息
|
||||
#define CUSTOM_BLE_VOLUMEN_CMD 0x4 // 音量信息
|
||||
#define CUSTOM_BLE_TIME_DATE_CMD 0x5 // 时间信息
|
||||
#define CUSTOM_EQ_DATE_CMD 0x6 // EQ信息
|
||||
#define CUSTOM_ANC_DATE_CMD 0x7 // ANC信息
|
||||
#define CUSTOM_CALL_STATE_CMD 0x8 // 通话状态获取
|
||||
#define CUSTOM_PHONE_CALL_INFO_CMD 0x9 // 通话号码信息
|
||||
|
||||
#define CUSTOM_BLE_VOL_CONTROL_CMD 0x32 // 音量控制
|
||||
#define CUSTOM_BLE_MUSIC_STATE_CONTROL_CMD 0x33 // 音乐状态控制
|
||||
#define CUSTOM_BLE_ANC_MODE_CONTROL_CMD 0x34 // ANC 模式控制
|
||||
#define CUSTOM_BLE_EQ_MODE_CONTROL_CMD 0x35 // EQ 模式控制
|
||||
#define CUSTOM_BLE_PLAY_MODE_CONTROL_CMD 0x36 // 设置播放模式
|
||||
#define CUSTOM_BLE_ALARM_CLOCK_CONTROL_CMD 0x37 // 播放闹钟
|
||||
#define CUSTOM_BLE_FINE_EARPHONE_CMD 0x38 // 查找手机
|
||||
#define CUSTOM_BLE_FLASHLIGHT_CONTROL_CMD 0x39 // 手电筒
|
||||
#define CUSTOM_BLE_SWITCH_LANGUAGE 0x40 //切换语言 1中文,2英文
|
||||
#define CUSTOM_BLE_CONTRAL_CALL 0x41 //控制接听挂断 1接听 2挂断
|
||||
#define CUSTOM_BLE_USER_ADD_CMD 0X42 //用户自定义命令
|
||||
#define CUSTOM_BLE_CONTRAL_DOUYIN 0X43 //控制抖音操作
|
||||
#define CUSTOM_BLE_CONTRAL_PHOTO 0X44 //控制拍照操作
|
||||
|
||||
#define CUSTOM_EDR_CONTRAL_CONN 0X45 // 控制edr连接
|
||||
#define CUSTOM_EDR_SYNC_INFO 0X46 // 同步经典蓝牙信息
|
||||
#define CUSTOM_EDR_SIRI_CTRL 0X47 // 语音助手设置
|
||||
#define CUSTOM_BLE_CONTRAL_PHONEOUT 0X48 // 拨出电话
|
||||
#define CUSTOM_BLE_CONTRAL_KEY 0X49 // 按键同步设置
|
||||
#define CUSTOM_SLEEP_CTRL_CMD 0x4A // 屏幕亮灭状态
|
||||
#define CUSTOM_EDR_CLEAR_COMP 0x4B // br等待仓连接
|
||||
/*-------------------CMD end----------------------*/
|
||||
|
||||
|
||||
typedef void (*screen_app_receive_handle)(u8 cmd, u8 *data, u8 len);
|
||||
typedef int (*screen_app_operation_send_handle)(u8 *data, u16 len);
|
||||
|
||||
void register_receive_handle(screen_app_receive_handle callback);
|
||||
void register_send_handle(screen_app_operation_send_handle callback);
|
||||
void custom_ble_client_write_no_respond(u8 cmd, u8 *data, u8 len);
|
||||
int ble_notify_recv_data_handler(uint8_t *buffer, uint16_t buffer_size);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user