1) 向一个全局变量 registeredKeysTaskID中赋值自己的任务 ID,调用了这个函数就能成功注册按键服务
在osal_init_system()中调用osalInitTasks()初始化系统任务,调用应用程序初始化函数void SimpleBLETest_Init( uint8 task_id );
void SimpleBLETest_Init( uint8 task_id ) { //保存任务id到全局变量 SimpleBLETest_TaskID = task_id; // 串口初始化 波特率默认是115200, 形参是回调函数 NPI_InitTransport(NpiSerialCallback); //lcd 显示 HalLcdWriteString( "SimpleBLETest 11", HAL_LCD_LINE_1 ); // Register for all key events - This app will handle all key events RegisterForKeys( SimpleBLETest_TaskID ); // Setup a delayed profile startup /* 设置一个任务, 这么做的目的是按照多任务处理的方法来做 SimpleBLETest_ProcessEvent 就是处理 SBP_START_DEVICE_EVT */ osal_set_event( SimpleBLETest_TaskID, SBP_START_DEVICE_EVT ); }
2) 一个按键回调服务注册函数,注册了一个OnBoard_KeyCallback函数
void InitBoard( uint8 level ) { if ( level == OB_COLD ) { // Interrupts off osal_int_disable( INTS_ALL ); // Turn all LEDs off HalLedSet( HAL_LED_ALL, HAL_LED_MODE_OFF ); // Check for Brown-Out reset // ChkReset(); } else // !OB_COLD { /* Initialize Key stuff */ OnboardKeyIntEnable = HAL_KEY_INTERRUPT_ENABLE; //OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE; HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback); } }
3) 有按键值,则进入void halProcessKeyInterrupt (void)函数
void halProcess