我是靠谱客的博主 贪玩心锁,最近开发中收集的这篇文章主要介绍zigbee 是怎样注册,产生,处理 按键事件的?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

当硬件有按键按下时调用

uint8 OnBoard_SendKeys( uint8 keys, uint8 state )
{
  keyChange_t *msgPtr;


  if ( registeredKeysTaskID != NO_TASK_ID )
  {
    // Send the address to the task
    msgPtr = (keyChange_t *)osal_msg_allocate( sizeof(keyChange_t) );
    if ( msgPtr )
    {
      msgPtr->hdr.event = KEY_CHANGE;
      msgPtr->state = state;
      msgPtr->keys = keys;


      osal_msg_send( registeredKeysTaskID, (uint8 *)msgPtr );
    }
    return ( ZSuccess );
  }
  else
    return ( ZFailure );
}

调用osal_msg_send( registeredKeysTaskID, (uint8 *)msgPtr );  将消息发送个任务registeredKeysTaskID;

按键事件能且只能在一个任务中注册;我们看看registeredKeysTaskID他是在被注册到哪个任务中去了;

uint8 RegisterForKeys( uint8 task_id )
{
  // Allow only the first task
  if ( registeredKeysTaskID == NO_TASK_ID )
  {
    registeredKeysTaskID = task_id;
    return ( true );
  }
  else
    return ( false );
}

GenericApp.c中我们看到 按键事件被注册到APP任务中;

RegisterForKeys( GenericApp_TaskID );


总结下按键事件:

在应用程序中,用户将按键事件注册到应用层任务中, 当硬件检测到有按键事件发生时,将消息发送个应用层的任务ID交由应用程序处理;

UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events )
{if ( events & SYS_EVENT_MSG )
  {
    MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );
    while ( MSGpkt )
    {
      switch ( MSGpkt->hdr.event )
      {

case KEY_CHANGE:
          GenericApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );
          break;

  osal_msg_deallocate( (uint8 *)MSGpkt );


      // Next
      MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );
    }


    // return unprocessed events
    return (events ^ SYS_EVENT_MSG);
  }



最后

以上就是贪玩心锁为你收集整理的zigbee 是怎样注册,产生,处理 按键事件的?的全部内容,希望文章能够帮你解决zigbee 是怎样注册,产生,处理 按键事件的?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部