board_key.h/board_key.c

  1 /*******************************************************************************
  2   Filename:       board_key.h
  3   Revised:        $Date: 2014-02-28 14:18:14 -0800 (Fri, 28 Feb 2014) $
  4   Revision:       $Revision: 37461 $
  5
  6   Description:    This file contains the SRF06EB Key Service definitions
  7                   and prototypes.
  8 ********************************************************************************
  9             适用于按键单击检测及处理,不能检测及处理连按2次按键(双击)
 10 ********************************************************************************
 11 使用说明:
 12     1.在需要使用board_key.c的应用程序中包含board_key.h头文件。
 13         #include "board_key.h"
 14     2.在需要使用board_key.c的应用程序中定义按键事件,宏名根据实际应用修改。
 15         #define SBP_KEY_CHANGE_EVT                    0x0010
 16     3.在需要使用board_key.c的应用程序中声明按键回调函数及按键处理函数。
 17         static void SimpleBLEPeripheral_keyChangeHandler(uint8 keys);                // 按键回调
 18         static void SimpleBLEPeripheral_handleKeys(uint8_t shift, uint8_t keys);    // 按键处理
 19     4.在需要使用board_key.c的应用程序中定义按键回调函数及按键处理函数,消息结构体
 20         可能需要根据实际应用修改。
 21         void SimpleBLEPeripheral_keyChangeHandler(uint8 keys)
 22         {
 23           SimpleBLEPeripheral_enqueueMsg(SBP_KEY_CHANGE_EVT, keys);        // 在swi中发按键消息
 24         }
 25         static void SimpleBLEPeripheral_handleKeys(uint8_t shift, uint8_t keys)
 26         {
 27           (void)shift;  // Intentionally unreferenced parameter
 28
 29           if (keys & Board_KEY_SELECT)
 30           {
 31             Board_blinkLed( Board_LED2, 250, 1 );                        // 闪烁周期500ms,闪烁1次
 32             return;
 33           }
 34           if (keys & Board_KEY_UP)
 35           {
 36             return;
 37           }
 38           if (keys & Board_KEY_RIGHT)
 39           {
 40             return;
 41           }
 42           if (keys & Board_KEY_SELECT)
 43           {
 44             return;
 45           }
 46           if (keys & Board_KEY_DOWN)
 47           {
 48             return;
 49           }
 50         }
 51     5.在应用程序中初始化按键,同时传入app层按建回调函数(发键值消息给task线程)
 52         Board_initKeys(SimpleBLEPeripheral_keyChangeHandler);
 53     6.在应用程序中的消息处理函数
 54         (如:static void SimpleBLEPeripheral_processAppMsg(sbpEvt_t *pMsg))
 55         中添加如下代码:
 56         case SBP_KEY_CHANGE_EVT:
 57               SimpleBLEPeripheral_handleKeys(0, pMsg->hdr.state);    // 在task线程处理按键
 58           break;
 59 ********************************************************************************
 60     原理说明:
 61         1.按键ISR中读取键值并保存键值                            // hwi线程
 62         2.按键回调函数发送键值消息                                // swi线程
 63         3.按键处理函数处理按键                                    // task线程
 64 *******************************************************************************/
 65
 66 #ifndef BOARD_KEY_H
 67 #define BOARD_KEY_H
 68
 69 #ifdef __cplusplus
 70 extern "C" {
 71 #endif
 72
 73 /*********************************************************************
 74  * INCLUDES
 75  */
 76
 77 /*********************************************************************
 78 *  EXTERNAL VARIABLES
 79 */
 80
 81 /*********************************************************************
 82  * CONSTANTS
 83  */
 84 #define KEY_SELECT            0x0001
 85 #define KEY_UP                0x0002
 86 #define KEY_DOWN              0x0004
 87 #define KEY_LEFT              0x0008
 88 #define KEY_RIGHT             0x0010
 89
 90 // Debounce timeout in milliseconds
 91 #define KEY_DEBOUNCE_TIMEOUT  200
 92
 93 /*********************************************************************
 94  * TYPEDEFS
 95  */
 96 typedef void (*keysPressedCB_t)(uint8 keysPressed);
 97
 98 /*********************************************************************
 99  * MACROS
100  */
101
102 /*********************************************************************
103  * API FUNCTIONS
104  */
105
106 /*********************************************************************
107  * @fn      Board_initKeys
108  *
109  * @brief   Enable interrupts for keys on GPIOs.
110  *
111  * @param   appKeyCB - application key pressed callback
112  *
113  * @return  none
114  */
115 void Board_initKeys(keysPressedCB_t appKeyCB);
116
117 /*********************************************************************
118 *********************************************************************/
119
120 #ifdef __cplusplus
121 }
122 #endif
123
124 #endif /* BOARD_KEY_H */
  1 /*******************************************************************************
  2   Filename:       board_key.c
  3   Revised:        $Date: 2014-03-10 07:29:12 -0700 (Mon, 10 Mar 2014) $
  4   Revision:       $Revision: 37597 $
  5
  6   Description:    This file contains the interface to the SRF06EB Key Service.
  7 *******************************************************************************/
  8
  9 /*********************************************************************
 10  * INCLUDES
 11  */
 12 #include <stdbool.h>
 13 #include <ti/sysbios/knl/Clock.h>
 14 #include <ti/sysbios/family/arm/m3/Hwi.h>
 15 #include <ti/sysbios/knl/Semaphore.h>
 16 #include <ti/sysbios/knl/Queue.h>
 17
 18 #include <ti/drivers/pin/PINCC26XX.h>
 19
 20 #ifdef USE_ICALL
 21 #include <ICall.h>
 22 #endif
 23
 24 #include <inc/hw_ints.h>
 25 #include "bcomdef.h"
 26
 27 #include "util.h"
 28 #include "board_key.h"
 29 #include "Board.h"
 30
 31 /*********************************************************************
 32  * TYPEDEFS
 33  */
 34
 35 /*********************************************************************
 36  * LOCAL FUNCTIONS
 37  */
 38 static void Board_keyChangeHandler(UArg a0);
 39 static void Board_keyCallback(PIN_Handle hPin, PIN_Id pinId);
 40
 41 /*******************************************************************************
 42  * EXTERNAL VARIABLES
 43  */
 44
 45 /*********************************************************************
 46  * LOCAL VARIABLES
 47  */
 48
 49 // Value of keys Pressed
 50 static uint8_t keysPressed;
 51
 52 // Key debounce clock
 53 static Clock_Struct keyChangeClock;
 54
 55 // Pointer to application callback
 56 keysPressedCB_t appKeyChangeHandler = NULL;
 57
 58 // Memory for the GPIO module to construct a Hwi
 59 Hwi_Struct callbackHwiKeys;
 60
 61 // PIN configuration structure to set all KEY pins as inputs with pullups enabled
 62 PIN_Config keyPinsCfg[] =
 63 {
 64     Board_KEY_SELECT    | PIN_GPIO_OUTPUT_DIS  | PIN_INPUT_EN  |  PIN_PULLUP,
 65     Board_KEY_UP        | PIN_GPIO_OUTPUT_DIS  | PIN_INPUT_EN  |  PIN_PULLUP,
 66     Board_KEY_DOWN      | PIN_GPIO_OUTPUT_DIS  | PIN_INPUT_EN  |  PIN_PULLUP,
 67     Board_KEY_LEFT      | PIN_GPIO_OUTPUT_DIS  | PIN_INPUT_EN  |  PIN_PULLUP,
 68     Board_KEY_RIGHT     | PIN_GPIO_OUTPUT_DIS  | PIN_INPUT_EN  |  PIN_PULLUP,
 69     PIN_TERMINATE
 70 };
 71
 72 PIN_State  keyPins;
 73 PIN_Handle hKeyPins;
 74
 75 /*********************************************************************
 76  * PUBLIC FUNCTIONS
 77  */
 78 /*********************************************************************
 79  * @fn      Board_initKeys
 80  *
 81  * @brief   Enable interrupts for keys on GPIOs.
 82  *
 83  * @brief   task
 84  *
 85  * @param   appKeyCB - application key pressed callback
 86  *
 87  * @return  none
 88  */
 89 void Board_initKeys(keysPressedCB_t appKeyCB)
 90 {
 91   // Initialize KEY pins. Enable int after callback registered
 92   hKeyPins = PIN_open(&keyPins, keyPinsCfg);
 93   PIN_registerIntCb(hKeyPins, Board_keyCallback);
 94
 95   PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_KEY_SELECT  | PIN_IRQ_NEGEDGE);
 96   PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_KEY_UP      | PIN_IRQ_NEGEDGE);
 97   PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_KEY_DOWN    | PIN_IRQ_NEGEDGE);
 98   PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_KEY_LEFT    | PIN_IRQ_NEGEDGE);
 99   PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_KEY_RIGHT   | PIN_IRQ_NEGEDGE);
100
101 #ifdef POWER_SAVING
102   //Enable wakeup
103   PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_SELECT | PINCC26XX_WAKEUP_NEGEDGE);
104   PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_UP | PINCC26XX_WAKEUP_NEGEDGE);
105   PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_DOWN | PINCC26XX_WAKEUP_NEGEDGE);
106   PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_LEFT | PINCC26XX_WAKEUP_NEGEDGE);
107   PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_RIGHT | PINCC26XX_WAKEUP_NEGEDGE);
108 #endif
109
110   // Setup keycallback for keys
111   Util_constructClock(&keyChangeClock, Board_keyChangeHandler,
112                       KEY_DEBOUNCE_TIMEOUT, 0, false, 0);
113
114   // Set the application callback
115   appKeyChangeHandler = appKeyCB;
116 }
117
118 /*********************************************************************
119  * @fn      Board_keyCallback
120  *
121  * @brief   Interrupt handler for Keys
122  *
123  * @brief   hwi
124  *
125  * @param   none
126  *
127  * @return  none
128  */
129 static void Board_keyCallback(PIN_Handle hPin, PIN_Id pinId)
130 {
131   keysPressed = 0;
132
133   if ( PIN_getInputValue(Board_KEY_SELECT) == 0 )
134   {
135     keysPressed |= KEY_SELECT;
136   }
137
138   if ( PIN_getInputValue(Board_KEY_UP) == 0 )
139   {
140     keysPressed |= KEY_UP;
141   }
142
143   if ( PIN_getInputValue(Board_KEY_DOWN) == 0 )
144   {
145     keysPressed |= KEY_DOWN;
146   }
147
148   if ( PIN_getInputValue(Board_KEY_LEFT) == 0 )
149   {
150     keysPressed |= KEY_LEFT;
151   }
152
153   if ( PIN_getInputValue(Board_KEY_RIGHT) == 0 )
154   {
155     keysPressed |= KEY_RIGHT;
156   }
157
158   Util_startClock(&keyChangeClock);
159 }
160
161 /*********************************************************************
162  * @fn      Board_keyChangeHandler
163  *
164  * @brief   Handler for key change
165  *
166  * @brief   swi
167  *
168  * @param   UArg a0 - ignored
169  *
170  * @return  none
171  */
172 static void Board_keyChangeHandler(UArg a0)
173 {
174   if (appKeyChangeHandler != NULL)
175   {
176     // Notify the application
177     (*appKeyChangeHandler)(keysPressed);
178   }
179 }
180 /*********************************************************************
181 *********************************************************************/
时间: 2024-10-08 10:00:36

board_key.h/board_key.c的相关文章

《linux 内核全然剖析》 include/asm/io.h

include/asm/io.h #define outb(value,port) __asm__ ("outb %%al,%%dx"::"a" (value),"d" (port)) //宏定义outb用汇编实现了在端口地址port处写入值value //使用的寄存器是al,一个byte长度,而端口port使用的是2byte长度地址来标记的寄存器,注意这里寄存器的使用 #define inb(port) ({ unsigned char _v;

CUDA gputimer.h头文件

#ifndef __GPU_TIMER_H__ #define __GPU_TIMER_H__ struct GpuTimer { cudaEvent_t start; cudaEvent_t stop; GpuTimer() { cudaEventCreate(&start); cudaEventCreate(&stop); } ~GpuTimer() { cudaEventDestroy(start); cudaEventDestroy(stop); } void Start() {

2017.5 校内预选赛 A H

题目描述: 目前图像识别是一项非常热门的技术,最流行的莫不过是深度学习的图像识别,识别率甚至能达到99%以上.当然,对于简单的图像来说,深度学习是没有必要的.比如如果要识别安徽拼音的首字母A和H,就可以不用深度学习就可以判断.现在有一些只含A或者H的图像,你知道该如何识别吗? 输入描述: 第一行输入正整数T,表示数据的组数. 每组数据中,第一行是两个正整数n和m,表示图像的大小. 接下来有n行,每行m个字符,只可能为'.'或者'#'.'.'表示白色,'#'表示黑色.'#'会通过上下左右或者左上左

编译过程中,termcap.h 文件找不到路径 licli.a终于生成

编译过程中,termcap.h      文件找不到路径 查看是linux  源码下找不到termcap.h文件 安装了所有关于*cap*的源码包也不起作用 今天终于解决了这个问题,搜termcap.h  发现一篇文章,如下 ----------------------------------------------------------------------------------------- 安装minicom2.3出现termcap.h错误解决方法 2010-05-06 17:12:

使用javah生成.h文件, 出现无法访问android.app,Activity的错误的解决

在工程ndk22/bin/classes中 运行javah  com.cn.ndk22.Ndk22.Activity ,出现了.h文件 我在bin/classes目录中 ,就是无法访问, : 错误:无法访问android.app.Activity 找不到android.app.Activity 如下图所示 于是我cmd定位到ndk/src,中运行 javah com.heima.ndk.ndkActivity, 成功了就能成功了 ...我也不知道为什么.,如下图 总结:  使用javah生成.h

mppe +H -M +S -L -D -C中个字母意思

mppe +H -M +S -L -D -C what each character mean. 根据Microsoft Point-To-Point Encryption (MPPE) Protocol的rfc3078文件中第2节Configuration Option Format: H:使用stateless模式(this indicates that the sender wishes to negotiate the use of stateless mode) M:使用56bit密钥

gnu/stubs-32.h: No such file

On Ubuntu it's called libc6-dev-i386 - do sudo apt-get install libc6-dev-i386. See below for extra instructions for Ubuntu 12.04. On Red Hat distros, the package name is glibc-devel.i686 (Thanks to David Gardner's comment) On CentOS 5.8, the package

VS2013找不到winres.h的解决办法

好久没有搞C++了,搞C++最烦就各种版本问题的报错.我对C++项目开发不是很熟悉,因为项目需要用VS2013修改一个C++/MFC工程,一编译就报错无法打开包括文件:"winres.h": No such file or directory. 上网查了一下,这个'winres.h'是Windows SDK的一个头文件,打开C盘找一下,果然在Windows SDK目录C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include下

php安装编译时 configure: error: Cannot find OpenSSL&#39;s &lt;evp.h&gt;

=============================================== yum install error: protected multilib versions error===============================================sudo yum downgrade openssl 降级sudo yum install openssl-devel ===另外参考====================================