1.采用osal操作系统,在OSAL_hidkbd.c中
taskCnt 任务总数
taskEvents 指向事件表首地址的指针
taskArr 事件处理函数数组,每一项都是一个函数指针
//这些是用与蓝牙传输,详细代码看不到会用就行
const pTaskEventHandlerFn tasksArr[] =
{
LL_ProcessEvent,
HCI_ProcessEvent,
#if defined ( OSAL_CBTIMER_NUM_TASKS )
OSAL_CBTIMER_PROCESS_EVENT( osal_CbTimerProcessEvent ), // task 3
#endif
L2CAP_ProcessEvent,
SM_ProcessEvent,
GAP_ProcessEvent,
GATT_ProcessEvent,
GAPRole_ProcessEvent,
GAPBondMgr_ProcessEvent,
GATTServApp_ProcessEvent,
HidDev_ProcessEvent,
HidKbd_ProcessEvent,
}
2.按键是通过硬件进行检测,在hal_keyboard_mattrix.c中的回调函数hal_bsp_btn_callback中存在按键事件检测
//key_index为11是蓝牙发送88 99
__ATTR_SECTION_SRAM__ void hal_bsp_btn_callback(uint8 evt)
{
uint8 key_index = BSP_BTN_INDEX(evt);
switch( BSP_BTN_TYPE(evt) )
{
case BSP_BTN_PD_TYPE:
if( key_index==11)
{
if( hidDevGapState == GAPROLE_CONNECTED )
{
if( get_ir_sending_mode() == true )
{
}
else
{
bt_control_key_code_report_start(0x88,0x99,0);
}
}
}
case BSP_BTN_UP_TYPE:
if( key_index==11)
{
if( hidDevGapState == GAPROLE_CONNECTED )
{
if( get_ir_sending_mode() == true )
{
}
else
{
bt_key_code_sending_over_handle( key_index );
}
}
}
}
}
3.对按键进行增加或者减少的修改时需修改app_cfg_h,修改其中的row gpio和col gpio即可
// ! row gpio
#define KSCAN_ROW_0_GPIO GPIO_P00
#define KSCAN_ROW_1_GPIO GPIO_P14
#define KSCAN_ROW_2_GPIO GPIO_P07
#define KSCAN_ROW_3_GPIO GPIO_P34
// ! col gpio
#define KSCAN_COL_0_GPIO GPIO_P01
#define KSCAN_COL_1_GPIO GPIO_P25
#define KSCAN_COL_2_GPIO GPIO_P11
#define KSCAN_COL_3_GPIO GPIO_P26
/*key index = {Key_R0*C0,Key_R0*C1,Key_R0*C2,Key_R0*C3,Key_R1*C0,Key_R1*C1,Key_R1*C2,Key_R1*C3,Key_R2*C0,Key_R2*C1,Key_R2*C2,Key_R2*C3,Key_R3*C0,Key_R3*C1,Key_R3*C2,Key_R3*C3}*/
4.红外发送,在ir_task.c中,发送函数为ir_right_sending_handle( key_index );
红外码分为用户码(两个字节 ),数据码(一个字节 ),数据反码(一个字节 )
如果要修改红外码值需修改app_cfg.h中的 REMOTE_CONTROL_IR_XXXX
修改红外频率啥的需修改ir_task.h中#define 的ir值
5.蓝牙发送,发送函数为 HidDev_Report( uint8 id, uint8 type, uint8 len, uint8* pData )
语言和按键的蓝牙发送都是通过这个函数,但这个函数未能详细了解,此函数与蓝牙各层传输协议有关,使用配对成功后可以直接发送具体的细节无需关系。
6.语音输入,在按键事件中添加按键进行语音控制,当按下按键时语音捕获开启,松开时语音捕获关闭
if( key_index == 10)//KEY_INDEX_AUDIO
{
VOICE_Start();
}
当语音捕获时间开启后便osal_set_event(voice_TaskID, VOICE_RECORD_START_EVT);将osal中的语音事件开启事件开启后持续更新voice_data(此过程在中断中进行),当捕获结束后将voice_data进行蓝牙发送