Files
刘可亮 724d6bf65e v1.1.2
2025-01-08 19:12:06 +08:00

492 lines
12 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef __BT_API_H__
#define __BT_API_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "bt_type.h"
#include "bt_config.h"
#include "aic_log.h"
#define BT_MSG_MAX 512//BT MSG datalen
#define BT_CMD_MAX 512// 队列有512个元素
//蓝牙音乐播放状态获取
typedef enum __BT_STATUS
{
BT_STAT_IDLE = 0,
BT_STAT_PLAY ,
BT_STAT_PAUSE,
BT_STAT_
} bt_status_t;
//蓝牙时间获取
typedef struct
{
__u8 year;
__u8 month;
__u8 day;
__u8 hour;
__u8 minute;
__u8 second;
}bt_time_t;
/*******bt*******/
//蓝牙电话本获取
typedef struct
{
//////////////////电话本
__u8 phonebook_name[1000][64]; //名称
__u8 phonebook_number[1000][32]; //电话号码有两个以上的电话号码的用同一名称显示
__s32 cur_phone_total; //最后一个
//////////////////通话记录
//__u8 phonerem_name[64][64]; //通话记录,现在废弃
//__u8 phonerem_number[64][32]; //电话号码有两个以上的电话号码的用同一名称显示
//__u8 phonerem_date[64][32]; ////日期
//__u8 phonerem_type[64]; ////类型////1:打出2:打进3 :拒接
//__s32 cur_phonerem_total;
__u8 phoneout_name[32][64]; //打出
__u8 phoneout_number[32][32]; //电话号码有两个以上的电话号码的用同一名称显示
__u8 phoneout_date[32][32]; ////日期
__s32 cur_phoneout_total;
__u8 phonein_name[32][64]; //打进
__u8 phonein_number[32][32]; //电话号码有两个以上的电话号码的用同一名称显示
__u8 phonein_date[32][32]; ////日期
__s32 cur_phonein_total;
__u8 phonemiss_name[32][64]; //未接
__u8 phonemiss_number[32][32]; //电话号码有两个以上的电话号码的用同一名称显示
__u8 phonemiss_date[32][32]; ////日期
__s32 cur_phonemiss_total;
}bt_phonebook_state;
//蓝牙音乐ID3信息获取
typedef struct BT_ID3_INFO
{
__u8 title_name[256];//歌词
__u8 artist_name[256];//歌名
__u8 album_name[256];//歌手
__u8 cur_time[32]; //当前播放时间
__u8 total_time[32]; //播放总时间
}bt_ID3_info_t;
//车机蓝牙连接状态
typedef enum
{
BT_STATE_INIT = 0,
BT_STATE_NOTCONNECTE,
BT_STATE_CONNECTED,
BT_STATE_MAX,
}bt_connect_flag_t;
typedef enum
{
BT_SPP_STATE_INIT = 0,
BT_SPP_STATE_DISCONNECTED,
BT_SPP_STATE_CONNECTED,
BT_SPP_STATE_MAX,
}bt_spp_connect_flag_t;
typedef enum
{
BT_BLE_STATE_INIT = 0,
BT_BLE_STATE_DISCONNECTED,
BT_BLE_STATE_CONNECTED,
BT_BLE_STATE_MAX,
}bt_ble_connect_flag_t;
typedef enum
{
BT_HID_STATE_INIT = 0,
BT_HID_STATE_DISCONNECTED,
BT_HID_STATE_CONNECTED,
BT_HID_STATE_MAX,
}bt_hid_connect_flag_t;
//蓝牙电话状态
typedef enum
{
BT_PHONE_INIT = 0, ////初始化和一般情况
BT_PHONE_INING, ////电话打进
BT_PHONE_OUTING, ////电话打出
BT_PHONE_TALKINING, ////通话中
BT_PHONE_TALKOUTING, ////通话中
BT_MAX
}bt_phone_state_t;
//手机连接类型
typedef enum
{
PHONE_ANDROID_AUTO, ////android系统原生手机
PHONE_CARPLAY , ////苹果手机
PHONE_ANDROID_CARLIFE, ////android系统魔改手机
PHONE_HARMONY, ////HARMONY手机
PHONE_MAX
}bt_phone_type_t;
extern u8 phone_macaddr_buf[12];//手机蓝牙MAC ADDR
extern u8 phone_name_buf[24];//手机蓝牙名字
extern u8 bt_hostname_buf[24];//车机蓝牙名字
extern u8 bt_pincard_buf[4]; //蓝牙配对码
extern u8 bt_macaddr_buf[12];//车机蓝牙MAC ADDR
extern u8 bt_callin_buf[64];//手机来电号码
extern u8 spp_rxdata[512]; //rfcomm 通讯后从手机接收透传的数据
extern u8 system_do_msg[BT_MSG_MAX]; //系统要处理的消息
extern bt_connect_flag_t bt_connect_flag; //蓝牙是否连接
extern bt_spp_connect_flag_t bt_spp_connect_flag;//蓝牙spp是否连接
extern bt_ble_connect_flag_t bt_ble_connect_flag; //蓝牙BLE是否连接
extern bt_phone_state_t bt_phone_state; //蓝牙电话状态
extern bt_phone_type_t bt_phone_type; //手机连接类型
extern bt_time_t bt_time;
extern bt_phonebook_state *bt_phonebook_para;
extern bt_ID3_info_t *bt_ID3_info;
/******************************FMRX********************************************/
//本记录是BT的FM在不断电情况下保存数据如果BT要断电那么就要获取FMRX的LIST表在主控端记录
typedef struct {
u16 freq; //当前频点
u8 ch_cur;//当前节目
u8 ch_cnt;//总节目数
} bt_fmrx_info_t;
typedef struct {
u8 ch_cnt; //总节目数
u16 freq[64]; //第一个节目从序号0开始
} bt_fmrx_list_t;
extern bt_fmrx_info_t bt_fmrx_info;//某个节目的信息包括总节目数,当前节目号,以及对应的频点
extern bt_fmrx_list_t bt_fmrx_list;//节目的频点列表
//system api
extern __s32 lowercase_2_uppercase(char *str);
//倒车控制
extern __s32 check_pev_key(void);
//接收蓝牙时间
extern __s32 sys_bt_set_time(u8 *time);
//获取蓝牙时间给应用
extern __s32 sys_bt_get_time_to_app(bt_time_t *time);
//设置时间给蓝牙
extern __s32 sys_bt_set_time_to_bt(bt_time_t *time);
//控制开关屏
extern void sys_bt_ctrl_lcd(u8 lcd_ctrl);
//控制开关屏
extern void sys_bt_ctrl_light(u8 light_ctrl);
//控制倒车影像
extern void sys_bt_ctrl_pev(u8 pev_ctrl);
//调用发送bt_phonename_get命令之后以下函数获取电话本
extern __s32 sys_bt_set_phonebook(u8 *phonebook);
//清除本地获取电话本的BUFFER
extern void sys_bt_clear_phonebook(void);
//获取来电指示电话号码
extern __s32 sys_bt_get_phonenum(char *btstring);
//接收蓝牙FMRX信息执行的一些动作
extern __s32 sys_bt_fm_process(void);
//接收蓝牙信息执行的一些动作
extern __s32 sys_bt_dosomething(void);
//获取播放的蓝牙音乐的ID3等信息
extern __s32 sys_bt_set_music_info(void);
//获取播放的蓝牙音乐的状态(播放暂停)等信息
extern void sys_bt_set_music_status(u8 music_status);
//获取手机电话BT的状态
extern __s32 sys_bt_get_phone_state(void);
//bt返回设置手机电话BT的状态
extern __s32 sys_bt_set_phone_state(bt_phone_state_t phone_state);
//获取手机类型
__s32 sys_bt_get_phone_type(void);
//bt返回设置手机类型
__s32 sys_bt_set_phone_type(bt_phone_type_t phone_type);
//获取车机BT连接的状态在CPU端的变量查询
extern __s32 sys_bt_is_connected(void);
//cpu-bt cmd api
extern void BtCmdSend (char *CmdStr,unsigned char len);
//获取车机蓝牙时间
extern __s32 bt_time_get(void);
//设置车机蓝牙时间
extern __s32 bt_time_set(void);
//获取大灯状态需要车机蓝牙GPIO控制
extern __s32 bt_ill_get(void);
//获取车机蓝牙状态通过发送UART命令返回的第一次启动首先先要执行
//后面只要不断电蓝牙就会自动返回连接状态给到CPU端变量则通过sys_bt_is_connected查询
extern __s32 bt_state_get(void);
//获取手机连接的名字这里默认都是车机列表第0个由手机主动连接的车机蓝牙
//车机蓝牙不做主动搜索蓝牙列表去连接手机
extern __s32 bt_phonename_get(void);
//获取车机蓝牙的名字小于24字节
extern __s32 bt_hostname_get(void);
//获取车机蓝牙的PIN码(4位数字配对码),现在不用
extern __s32 bt_pincard_get(void);
///HFP状态查询
extern __s32 bt_get_hfpstate(void);
//蓝牙音乐播放停止,调用一次与上一次相反
extern __s32 bt_audio_play_pause(void);
//蓝牙音乐播放
extern __s32 bt_audio_play(void);
//蓝牙音乐暂停
extern __s32 bt_audio_pause(void);
//蓝牙音乐停止
extern __s32 bt_audio_stop(void);
//蓝牙音乐上一曲
extern __s32 bt_audio_prev(void);
//蓝牙音乐下一曲
extern __s32 bt_audio_next(void);
//获取蓝牙音乐的本地播放状态,必须先手机上播放蓝牙音乐传过来状态先,然后才能调用
extern __s32 bt_audio_get_status(void);
//获取蓝牙音乐的本地播放状态,必须先手机上播放蓝牙音乐传过来状态先,然后才能调用
extern __s32 bt_audio_set_status(uint8_t play_status);
//获取手机电话本通话记录等记录在bt_phonebook_state数据结构里面
extern __s32 bt_phonebook_get(void);
//切换音频通道
extern __s32 bt_audio_change(void);
//强行切到手机上
extern __s32 bt_audio_to_phone(void);
//强行切到车机上
extern __s32 bt_audio_to_machine(void);
//通知bt power off CPU
//BT做电源管理时才可以开关CPU电源
extern __s32 bt_power_off(void);
//来电接听
extern __s32 bt_phone_incoming(void);
//一次性发出电话号码。
extern __s32 bt_phone_call(char *phonenumber,__s32 len);
//挂断电话
extern __s32 bt_phone_break(void);
//拒接来电
extern __s32 bt_phone_reject(void);
//重拨电话
extern __s32 bt_phone_recall(void);
//BT是否已连接 ?
extern __s32 bt_is_connected(void);
//重新连接BT
extern __s32 bt_connect_set(void);
//断开连接BT
extern __s32 bt_disconnect_set(void);
//获取车机蓝牙MAC地址
extern __s32 bt_macaddr_get(void);
//EQ用户模式
extern __s32 bt_eq_user_mode(__u8 index, __u8 gain);
//EQ流行模式
extern __s32 bt_eq_pop_mode(__u8 index, __u8 gain);
//EQ摇滚模式
extern __s32 bt_eq_rock_mode(__u8 index, __u8 gain);
//EQ爵士模式
extern __s32 bt_eq_jazz_mode(__u8 index, __u8 gain);
//EQ经典模式
extern __s32 bt_eq_classic_mode(__u8 index, __u8 gain);
//EQ柔和模式
extern __s32 bt_eq_gentle_mode(__u8 index, __u8 gain);
//音效前移
extern __s32 bt_dac_vol_front(__u8 vol);
//音效后移
extern __s32 bt_dac_vol_behind(__u8 vol);
//音效左移
extern __s32 bt_dac_vol_left(__u8 vol);
//音效右移
extern __s32 bt_dac_vol_right(__u8 vol);
//vol+
extern __s32 bt_vol_add(void);
//vol-
extern __s32 bt_vol_dec(void);
//静音
extern __s32 bt_vol_mute(void);
//解除静音
extern __s32 bt_vol_unmute(void);
/*********************SPP COMM******************************/
//"AT#"打头的指令透传通道
//发送透传数据
extern __s32 bt_spp_tx_data (char *CmdStr,unsigned char len);
//接收透传数据
extern __s32 bt_spp_rx_data(char *CmdStr,unsigned char len);
extern __s32 bt_spp_rfcomm_is_connected(void);
extern __s32 bt_spp_rfcomm_connect(void);
extern __s32 bt_spp_rfcomm_disconnect(void);
//RFCOMM连接成功后AT#SG加上第三方手机互联库发过来的形成数据串转为AT##再通过RFCOMM发送给手机
extern __s32 bt_spp_tx_data_rfcomm(char *CmdStr,unsigned char len);
//RFCOMM连接成功后手机上层发过来的RFCOMM数据串后面可发送第三方手机互联库
extern __s32 bt_spp_rx_data_rfcomm(char *CmdStr,unsigned char len);
/*********************BLE COMM******************************/
//extern __s32 bt_ble_tx_data(char *CmdStr,unsigned char len);
//extern __s32 bt_ble_rx_data(char *CmdStr,unsigned char len);
//extern __s32 bt_ble_rfcomm_is_connected(void);
//extern __s32 bt_ble_rfcomm_is_connect(void);
//extern __s32 bt_ble_rfcomm_disconnect(void);
//extern __s32 bt_ble_tx_data_rfcomm(char *CmdStr,unsigned char len);
//extern __s32 bt_ble_rx_data_rfcomm(char *CmdStr,unsigned char len);
/*********************HID COMM******************************/
//"AT#@"打头的指令透传通道
//发送数据
extern __s32 bt_hid_tx_data(char *CmdStr,unsigned char len);
//接收bt数据
extern __s32 bt_hid_rx_data(char *CmdStr,unsigned char len);
//HID是否连接
extern __s32 bt_hid_is_connected(void);
// 注册HID连接callback
extern void bt_hid_request_connect_cb(void *cb(int status));
//连接HID
extern __s32 bt_hid_connect(void);
//断开HID
extern __s32 bt_hid_disconnect(void);
//设置手机光标指针的坐标位置给蓝牙
extern __s32 bt_hid_set_cursor_pos(s16 x_pos,s16 y_pos);
//发送触摸滑动点坐标相对变化值(需要减去上一次坐标值)给bt
//action 0:指针移动1:鼠标左键按下2:鼠标左键抬起3:鼠标中键按下4:鼠标中键抬起;
//5:鼠标右键按下6:鼠标右键抬起;
extern __s32 bt_hid_set_cursor_xy(u8 action,s16 x_diff,s16 y_diff);
//重置手机光标指针的坐标位置给蓝牙这个时候的光标位置就是bt_hid_set_cursor_pos函数设置的坐标
extern __s32 bt_hid_reset_cursor_pos(void);
//测试鼠标滑动点击效果给bt
extern __s32 bt_hid_mouse_test(void);
/*********************FMRX COMM******************************/
//搜台
extern __s32 bt_fmrx_search (void);
//获取节目频道号信息,如当前频点,总节目数
extern __s32 bt_fmrx_get_info (void);
//获取节目频道列表
extern __s32 bt_fmrx_get_list (void);
//获取总节目数
extern __s32 bt_fmrx_get_ch_cnt (void);
//播放节目号
extern __s32 bt_fmrx_set_ch (__u8 ch);
//播放频点
extern __s32 bt_fmrx_set_freq (__u16 freq);
//切节目号dir为1往108M方向切0往78.5M方向切
extern __s32 bt_fmrx_switch_channel (__s8 dir);
//切频点dir为1往108M方向切0往78.5M方向切
extern __s32 bt_fmrx_switch_freq (__s8 dir);
//获取节目号对应的频点
__s32 bt_fmrx_get_ch_to_freq (__u8 ch);
/*********************BT MOUDLE******************************/
//切换蓝牙的应用,BT启动默认蓝牙应用//
//index值如下:
//0x41: FMRX; 0x42:AUX2; 0x43:BT; 0x44:MUSIC
extern __s32 bt_switch_app(u8 index);
//字符转换成十六进制显示,转换后长度减半 srcLen/2
extern void bt_StrToHex(unsigned char *pbDest, unsigned char *pbSrc, int srcLen);
//十六进制转换成字符显示,转换后长度加倍 srcLen*2
extern void bt_HexToStr(char *pszDest, char *pbSrc, int srcLen);
//bt_init 初始化内部数据结构和创建线程/定时器
extern __s32 bt_init(void);
//bt_exit 初始化内部数据结构和释放线程/定时器
extern __s32 bt_exit(void);
#ifdef __cplusplus
}
#endif
#endif