1 定义ID:
static uint8 SimpleBLETest_TaskID;
2 初始化的时候给ID赋值:
SimpleBLETest_TaskID = task_id;
3 注册按键的任务:
RegisterForKeys( SimpleBLETest_TaskID );
4 启动初始化任务,基本没个工程都是如此,也就是初始化函数初始化后执行的事件,我们自己定义的:
osal_set_event( SimpleBLETest_TaskID,SBP_START_DEVICE_EVT );
5 应用程序事件响应函数
uint16 SimpleBLETest_ProcessEvent( uint8task_id, uint16 events )
a 系统事件,这个事件就是包括了按键事件,和蓝牙接收数据,发送数据事件。
if ( events & SYS_EVENT_MSG )
{
uint8 *pMsg;
if ( (pMsg =osal_msg_receive( SimpleBLETest_TaskID )) != NULL )//接收这个任务来的消息。
{
simpleBLECentral_ProcessOSALMsg((osal_event_hdr_t *)pMsg );//相当于消息处理
// Release the OSALmessage
VOIDosal_msg_deallocate( pMsg );释放这个消息
}
// return unprocessedevents
return (events ^SYS_EVENT_MSG);
}
b 初始化函数执行后的事件,这个系统开始运行了。
if ( events &SBP_START_DEVICE_EVT )
{
HalLedSet(HAL_LED_1,HAL_LED_MODE_ON); // 点亮led1
// 返回这个, 告诉osal,这个实践你已经处理了
return ( events ^SBP_START_DEVICE_EVT );
}
6 首先是当系统事件来的时候,会设置SYS_EVENT_MSG,然后我们在接收系统消息,后执行处理消息函数simpleBLECentral_ProcessOSALMsg( (osal_event_hdr_t *)pMsg );
可以根据接收到消息的pMsg->event值,来判断是按键还是别的消息。
7 当是按键消息的时候,我们直接调用按键处理函数,
8 按键处理函数
simpleBLECentral_HandleKeys(((keyChange_t *)pMsg)->state, ((keyChange_t *)pMsg)->keys );
9 static voidsimpleBLECentral_HandleKeys( uint8 shift, uint8 keys );
课根据keys的不同,断定出是哪个按键被按下了。
问题:
看到这里现在处在的问题有如下:
1 按键事件是怎么产生的,以及对应的是那个引脚?
答:
首先从驱动说起,
上图是宏定义了几个寄存器;
接下来就是初始化函数:
设置触发沿
接下来就直接进入中断处理函数;
当我们定义的按键发生了的时候,会设置valid变量为true最后面的if语句,判断否执行
在下面的这个函数就能确定按键是谁产生的了
在应用层可用。