低功耗蓝牙相关项目开发

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进行蓝牙发送

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值