keys.c
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:5k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*****************************************************************************
  2.  *
  3.  * This program is free software ; you can redistribute it and/or modify
  4.  * it under the terms of the GNU General Public License as published by
  5.  * the Free Software Foundation; either version 2 of the License, or
  6.  * (at your option) any later version.
  7.  *
  8.  * This program is distributed in the hope that it will be useful,
  9.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11.  * GNU General Public License for more details.
  12.  *
  13.  * You should have received a copy of the GNU General Public License
  14.  * along with this program; if not, write to the Free Software
  15.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  16.  *
  17.  * $Id: keys.c 271 2005-08-09 08:31:35Z picard $
  18.  *
  19.  * The Core Pocket Media Player
  20.  * Copyright (c) 2004-2005 Gabor Kovacs
  21.  *
  22.  ****************************************************************************/
  23. #include "../../common/common.h"
  24. #if defined(TARGET_PALMOS)
  25. #include "../../common/palmos/pace.h"
  26. #ifdef HAVE_PALMONE_SDK
  27. #include <Common/System/palmOneChars.h>
  28. #include <Common/System/palmOneNavigator.h>
  29. #endif
  30. #ifdef HAVE_SONY_SDK
  31. #include <SonyChars.h>
  32. #include <Libraries/SonyRmcLib.h>
  33. #endif
  34. bool_t KeyHold(EventPtr Event)
  35. {
  36. return (Event->eType==keyDownEvent && (Event->data.keyDown.modifiers & autoRepeatKeyMask)) || 
  37. Event->eType==keyHoldEvent;
  38. }
  39. static int KeyDir(EventPtr Event)
  40. {
  41. if (Event->eType==keyDownEvent)
  42. return (Event->data.keyDown.modifiers & (willSendUpKeyMask|autoRepeatKeyMask))?1:2; 
  43. if (Event->eType==keyHoldEvent)
  44. return 1;
  45. return -1;
  46. }
  47. #ifdef HAVE_PALMONE_SDK
  48. static int NOINLINE PalmNav(EventPtr Event,int Change,int Bit)
  49. {
  50. if (Event->data.keyDown.chr != vchrNavChange) 
  51. return 0;
  52. Bit &= Event->data.keyDown.keyCode;
  53. if ((Event->data.keyDown.modifiers & autoRepeatKeyMask) && Bit)
  54. return 1;
  55. if (Event->data.keyDown.keyCode & Change)
  56. return Bit ? 1:-1;
  57. return 0;
  58. }
  59. #endif
  60. int KeySelect(EventPtr Event)
  61. {
  62. #ifdef HAVE_SONY_SDK
  63. if (Event->eType==keyDownEvent)
  64. {
  65. if (Event->data.keyDown.chr == vchrJogPush ||
  66. Event->data.keyDown.chr == vchrJogPushRepeat) return 1;
  67. if (Event->data.keyDown.chr == vchrJogRelease) return -1;
  68. }
  69. #endif
  70. if ((Event->eType==keyHoldEvent || Event->eType==keyDownEvent) && 
  71. Event->data.keyDown.chr == vchrHardRockerCenter)
  72. return 1; // avoid keyUpEvent because vchrRocketCenter still generated
  73. if (Event->data.keyDown.chr == vchrRockerCenter)
  74. return KeyDir(Event);
  75. #ifdef HAVE_PALMONE_SDK
  76. return PalmNav(Event,navChangeSelect,navBitSelect);
  77. #endif
  78. return 0;
  79. }
  80. int KeyLeft(EventPtr Event)
  81. {
  82. #ifdef HAVE_SONY_SDK
  83. if (Event->data.keyDown.chr == vchrJogLeft)
  84. return KeyDir(Event);
  85. #endif
  86. if (Event->data.keyDown.chr == vchrRockerLeft)
  87. return KeyDir(Event);
  88. #ifdef HAVE_PALMONE_SDK
  89. return PalmNav(Event,navChangeLeft,navBitLeft);
  90. #else
  91. return 0;
  92. #endif
  93. }
  94. int KeyRight(EventPtr Event)
  95. {
  96. #ifdef HAVE_SONY_SDK
  97. if (Event->data.keyDown.chr == vchrJogRight)
  98. return KeyDir(Event);
  99. #endif
  100. if (Event->data.keyDown.chr == vchrRockerRight)
  101. return KeyDir(Event);
  102. #ifdef HAVE_PALMONE_SDK
  103. return PalmNav(Event,navChangeRight,navBitRight);
  104. #else
  105. return 0;
  106. #endif
  107. }
  108. int KeyUp(EventPtr Event)
  109. {
  110. if (Event->data.keyDown.chr == vchrRockerUp ||
  111. Event->data.keyDown.chr == vchrPageUp)
  112. return KeyDir(Event);
  113. #ifdef HAVE_PALMONE_SDK
  114. return PalmNav(Event,navChangeUp,navBitUp);
  115. #else
  116. return 0;
  117. #endif
  118. }
  119. int KeyDown(EventPtr Event)
  120. {
  121. if (Event->data.keyDown.chr == vchrRockerDown ||
  122.     Event->data.keyDown.chr == vchrPageDown)
  123. return KeyDir(Event);
  124. #ifdef HAVE_PALMONE_SDK
  125. return PalmNav(Event,navChangeDown,navBitDown);
  126. #else
  127. return 0;
  128. #endif
  129. }
  130. #ifdef HAVE_SONY_SDK
  131. static int NOINLINE RmcKey(EventPtr Event,int Code)
  132. {
  133. if (GetRmcKey(Event->data.keyDown.keyCode) == Code)
  134. {
  135. if (Event->data.keyDown.chr == vchrRmcKeyPush)
  136. return 1;
  137. if (Event->data.keyDown.chr == vchrRmcKeyRelease)
  138. return -1;
  139. }
  140. return 0;
  141. }
  142. #endif
  143. int KeyMediaPlay(EventPtr Event)
  144. {
  145. int i = 0;
  146. #ifdef HAVE_SONY_SDK
  147. i = RmcKey(Event,rmcKeyPlay);
  148. #endif
  149. return i;
  150. }
  151. int KeyMediaStop(EventPtr Event)
  152. {
  153. int i = 0;
  154. #ifdef HAVE_SONY_SDK
  155. i = RmcKey(Event,rmcKeyStop);
  156. #endif
  157. return i;
  158. }
  159. int KeyMediaVolumeUp(EventPtr Event)
  160. {
  161. int i = 0;
  162. #ifdef HAVE_SONY_SDK
  163. i = RmcKey(Event,rmcKeyUp);
  164. #endif
  165. return i;
  166. }
  167. int KeyMediaVolumeDown(EventPtr Event)
  168. {
  169. int i = 0;
  170. #ifdef HAVE_SONY_SDK
  171. i = RmcKey(Event,rmcKeyDown);
  172. #endif
  173. return i;
  174. }
  175. int KeyMediaNext(EventPtr Event)
  176. {
  177. int i = 0;
  178. #ifdef HAVE_SONY_SDK
  179. i = RmcKey(Event,rmcKeyFfPlay);
  180. #endif
  181. return i;
  182. }
  183. int KeyMediaPrev(EventPtr Event)
  184. {
  185. int i = 0;
  186. #ifdef HAVE_SONY_SDK
  187. i = RmcKey(Event,rmcKeyFrPlay);
  188. #endif
  189. return i;
  190. }
  191. #endif