ZigBee Z-Stack 3.14 按鍵驅動1-輪詢模式
(配套原始碼、軟體、開發板等資源,可移步部落格同名QQ群:拿破崙940911)
(1)上面已經提及,Z-Stack協議棧中預設使用的就是“輪詢模式”,第一次觸發硬體抽象層任務(Hal_TaskID)中的按鍵查詢事件(HAL_KEY_EVENT)後,隨即也就觸發了間隔為100ms(1秒10次)的定時按鍵檢測(迴圈呼叫HalKeyPoll( )),故稱為“輪詢模式”:
uint16 Hal_ProcessEvent( uint8 task_id, uint16 events ) { ...... if (events & HAL_KEY_EVENT) { #if (defined HAL_KEY) && (HAL_KEY == TRUE) /* Check for keys */ HalKeyPoll(); /* if interrupt disabled, do next polling */ if (!Hal_KeyIntEnable) { osal_start_timerEx( Hal_TaskID, HAL_KEY_EVENT, 100); } #endif // HAL_KEY return events ^ HAL_KEY_EVENT; } ...... }
(2)在HalKeyPoll( )函式中,對各個定義的按鍵狀態做完檢測之後,即呼叫前面指定的按鍵回撥函式OnBoard_KeyCallback( ),對鍵值做進一步處理:
void HalKeyPoll (void)
{
......
/* Invoke Callback if new keys were depressed */
if (keys && (pHalKeyProcessFunction))
{
(pHalKeyProcessFunction) (keys, HAL_KEY_STATE_NORMAL);
}
......
}
OnBoard_KeyCallback( )函式的程式碼如下,可見其中又進一步呼叫了OnBoard_SendKeys( ):在OnBoard_SendKeys( )函式中,最終將鍵值(keys)封裝成了一個keyChange_t型別的資料包,傳送至了registeredKeysTaskID任務:void OnBoard_KeyCallback ( uint8 keys, uint8 state ) { uint8 shift; (void)state; shift = (keys & HAL_KEY_SW_6) ? true : false; if ( OnBoard_SendKeys( keys, shift ) != ZSuccess ) { ...... } }
uint8 OnBoard_SendKeys( uint8 keys, uint8 state ) { ...... // 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 ); } ...... }
至於registeredKeysTaskID,其實就是在RegisterForKeys( )函式中被賦值指定的:
uint8 RegisterForKeys( uint8 task_id )
{
// Allow only the first task
if ( registeredKeysTaskID == NO_TASK_ID )
{
registeredKeysTaskID = task_id;
return ( true );
}
else
return ( false );
}
而呼叫RegisterForKeys( )函式,則是在我們的應用層任務ProjectApp中,也就是所謂的“註冊按鍵”:void ProjectApp_Init( uint8 task_id )
{
ProjectApp_TaskID = task_id;
......
RegisterForKeys( ProjectApp_TaskID );// Register for all key events - This app will handle all key events
......
}
(3)緊接著,我們的應用層任務ProjectApp就會收到鍵值所在的資料包,具體處理鍵值的程式碼如下:
uint16 ProjectApp_ProcessEvent( uint8 task_id, uint16 events )
{
......
if ( events & SYS_EVENT_MSG )
{
......
case KEY_CHANGE : ProjectApp_HandleKeys(((keyChange_t *)MSGpkt)->state,((keyChange_t *)MSGpkt)->keys);break;
......
}
......
}
具體ProjectApp_HandleKeys( )這個鍵值處理函式實現什麼功能,就完全取決於大家自己啦~
(配套原始碼、軟體、開發板等資源,可移步部落格同名QQ群:拿破崙940911)
相關推薦
ZigBee Z-Stack 3.14 按鍵驅動1-輪詢模式
(配套原始碼、軟體、開發板等資源,可移步部落格同名QQ群:拿破崙940911)(1)上面已經提及,Z-Stack協議棧中預設使用的就是“輪詢模式”,第一次觸發硬體抽象層任務(Hal_TaskID)中的按鍵查詢事件(HAL_KEY_EVENT)後,隨即也就觸發了間隔為100ms
ZigBee Z-Stack 3.15 按鍵驅動2-中斷模式
(配套原始碼、軟體、開發板等資源,可移步部落格同名QQ群:拿破崙940911)在Z-Stack協議棧中,對於按鍵的檢測,分為兩種不同的機制,分別稱為“輪詢模式”和“中斷模式”,類比微控制器中的按鍵檢測,還是很好理解的。但是相比我們之前所學所用,Z-Stack協議棧中的按鍵檢測
ZigBee Z-Stack 3.18 串列埠1-傳送
(配套原始碼、軟體、開發板等資源,可移步部落格同名QQ群:拿破崙940911)這一節,基於《ZigBee CC2530 Z-Stack 06 建立基於Z-Stack的全新工程》一節中建立的全新工程ProjectApp進行進一步實驗,實現呼叫Z-Stack中現成的串列埠驅動函式
zigbee Z-Stack 3.0.1 利用廣播的方式修改通道
TI的zigbee協議棧的預設通道是11,如何快速修改為15通道呢? 方法就是給0xFFFF傳送廣播,來進行修改。 呼叫MTsys.c裡面提供的MT_ZdoMgmtNwkUpdateRequest函
ZigBee Z-Stack 3.17 串列埠00-總
(配套原始碼、文件、軟體等資源,可移步QQ群:拿破崙ZigBee) 一、前言 二、其他 關於如何在Z-Stack協議棧中使用串列埠實現資料的收發,很多朋友一上來就非常自信地開始按照自己的想法開始碼程式碼了。但是最終的實現效果卻總是不如意。 其實,作為一個協議
Z-Stack 3.0.1 ZNP開發(一)--通訊串列埠調整
概述 晶片:CC2530 協議棧: Z-Stack 3.0.1 功能:使用串列埠1的P1.6,P1.7連線MT7628,讓CC2530通過ZNP和MT7628進行通訊。 TI所提供的ZNP工程預設情況下是採用串列埠0與MCU進行通訊,所以接下來就需要通過修
zigbee z-stack實現按鍵的長按
由於按鍵檢測有中斷、和輪詢兩種方式,預設採用輪詢方式,對於輪詢方式的長按處理比較簡單,利用鬆開的時間點和松下的時間點之間的時間差即可實現。對於中斷的方式可以採用定時器方式,當中斷觸發的時候,開一個定時器,如果定時器到期了,按鈕還是按下狀態,就認為是長按。 vo
ZIGBEE-Z-stack協議棧
Z-stack--一個小作業系統。使用者通過 API 函式就可以輕易用 ZigBee。 協議棧主函式 ----Zmain.C /****************************************************************
ZigBee Z-Stack 4.02 基本網路引數設定
(配套原始碼、軟體、開發板等資源,可移步部落格同名QQ群:拿破崙940911)一、Device Types(裝置型別)在ZigBee網路中存在三種邏輯裝置型別:Coordinator(協調器)、Router(路由器)和EndDevice(終端裝置)。ZigBee網路由一個Co
ZigBee Z-Stack 2.02 ZigBee規範版本
(配套原始碼、軟體、開發板等資源,可移步部落格同名QQ群:拿破崙940911)一、ZigBee規範發展歷史2000年12月,成立了工作小組起草IEEE 802.15.4標準。2001年 8月,美國Honeywell等公司發起成立了ZigBee聯盟。2002年12月,IEEE8
ZigBee Z-Stack 2.05 搭建開發環境
(配套原始碼、軟體、開發板等資源,可移步部落格同名QQ群:拿破崙940911)一、安裝TI提供的半開源SDK—— ZStack-CC2530-2.5.1a.exe1、安裝過程非常簡單,全部選擇預設即可(可以更改安裝路徑);2、安裝好ZStack-CC2530-2.5.1a.e
十一、編寫按鍵混雜設備驅動(輪詢)
turn nbsp print gis tdi [] 運行 mage dynamic 1. 確定硬件連接 主要電路連接如下: 從電路圖中可以發現開發板上6個按鍵連接到了GPN0~5,當按鍵彈起時IO狀態應為高電平,當按鍵按下時IO口狀態為低電平。 2. 確定寄存器
ElasticSearch5.4.3 環境搭建 2017 (1-單節點模式/開發模式)
官網說:ElasticSearch-是分散式高可用全文搜尋-分析引擎。 官網入門教程:打我 居然還有中文版:再打我 軟體環境: ElasticSearch5.4.3 Centos 6.8 Java
zabbix-3.4監控nginx-1.14.0狀態
pid alt cto col stub tar ip地址 $1 mage zabbix需要監控nginx,則nginx需要配置nginx_status[root@nginx1 scripts]# /usr/local/nginx/sbin/nginx -Vnginx ve
基於Z-Stack的ZigBee開發環境搭建
一、硬體環境 CC2530開發板 除錯工具:CC Debugger或SmartRF04EB ZigBee USB Dongle:用於抓包 二、軟體環境 2.1 Z-Stack 下載及安裝 Z-Stack下載路徑連結 下載HA協議棧 進入
演算法第四版習題1.3.14和1.3.19(Java實現)
近來在啃資料結構與演算法,歡迎交流。 1.3.14:用可變長度的陣列實現佇列(FIFO) 資料結構ResizingArrayQueueOfStrings 的實現: public class ResizingArrayQueueOfStrings { Stri
Method for Discovering Network Topology中文翻譯【Z-Stack Home 1.2.0開發文件】
1.Purpose 本文描述了在任何給定的網路測定網路技術的方法,使用Z-Stack的 ZDO(Zigbee Device Object)層的API。在繼續之前請先閱讀ZStack Developer’s Guide和ZStack API文件。 2.Method 使用ZDP_IE
linux裝置驅動(3)字元驅動 -按鍵(查詢法)
本文描述查詢法。 所謂查詢法,就是在應用程式裡面執行 while (1) { read(fd, key_vals, sizeof(key_vals)); ... } 載入驅動並在後臺執行應用程式時, 通過top可以看到CPU利用率,該應用程序佔用9
kali 3.14 安裝RT3070 無線網絡卡驅動
最近對無線安全比較感興趣,買了個無線網絡卡,RT3070的晶片,去官網下了個linux的驅動,編譯安裝 rar, bunzip2, tar解壓,隨便說一下,tar解壓時需要自己重新命名,改為.tar的字尾 修改os/linux/ 下的config 檔案 # Support
Zigbee通訊之開發篇(基於TI 的Z-Stack)
1.Zigbee協議和Z-Stack Zigbee協議和Z-Stack是什麼關係?這可能是初學Zigbee同學想知道的問題。給大家舉個例子吧,我們生活中使用的插排是要符合一定的標準的,現在國家標準是GB2099.3-2008,裡面規定了好多插排的電氣、機械等