在static void zclSampleLight_process_loop(void):
if(events & SAMPLEAPP_KEY_EVT)
{
// Process Key Presses
zclSampleLight_processKey(keys);
keys = 0;
events &= ~SAMPLEAPP_KEY_EVT;
}
是通过初始化阶段通过 Board_Key_initialize(zclSampleLight_changeKeyCallback);调用:
/* Setup keycallback for keys */
Timer_construct(&keyChangeClock, board_key_changeHandler,
(KEY_DEBOUNCE_TIMEOUT),
0, false, 0);
/* Set the application callback */
appKeyChangeHandler = appKeyCB;
来实现的吗???
static void zclSampleLight_changeKeyCallback(uint8_t keysPressed)
{
keys = keysPressed;
events |= SAMPLEAPP_KEY_EVT;
// Wake up the application thread when it waits for clock event
Semaphore_post(sem);
}
函数 Timer_construct(&keyChangeClock, board_key_changeHandler,
(KEY_DEBOUNCE_TIMEOUT),
0, false, 0); 是什么用途???
Alvin Chen:
回调函数触发定时器,定时触发events,你自己去写一个events你就可以知道是怎么一个逻辑。
有一个SAMPLEAPP_END_DEVICE_REJOIN_DELAY的events你可以去根据这个梳理一下。
user5325333:
回复 Alvin Chen:
events 不是应该ZC接收到相应的命令来触发吗,如果没有key的event发过来,用定时器来触发,岂不是错误的吗? 但调试的时候并不是定时触发key的event的??? 好疑惑???
YiKai Chen:
這個timer是DEBOUNCE用的
Alvin Chen:
回复 Alvin Chen:
定时器写的很清楚;KEY_DEBOUNCE_TIMEOUT
就是消抖