aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/ds/arm9
diff options
context:
space:
mode:
authorNeil Millstone2007-03-18 01:45:14 +0000
committerNeil Millstone2007-03-18 01:45:14 +0000
commit08d82864109807b5d5a2896bc261564b698731e7 (patch)
tree930f03c20eaa4a9bdb75aca7b68c8964b01ea447 /backends/platform/ds/arm9
parentd95fd5e3d4641c9bb4a956086d240f3e48112419 (diff)
downloadscummvm-rg350-08d82864109807b5d5a2896bc261564b698731e7.tar.gz
scummvm-rg350-08d82864109807b5d5a2896bc261564b698731e7.tar.bz2
scummvm-rg350-08d82864109807b5d5a2896bc261564b698731e7.zip
adding key scanning functions compatible with ScummVM's IPC
svn-id: r26188
Diffstat (limited to 'backends/platform/ds/arm9')
-rw-r--r--backends/platform/ds/arm9/source/keys.cpp151
-rw-r--r--backends/platform/ds/arm9/source/keys.h13
2 files changed, 164 insertions, 0 deletions
diff --git a/backends/platform/ds/arm9/source/keys.cpp b/backends/platform/ds/arm9/source/keys.cpp
new file mode 100644
index 0000000000..dcec2287b9
--- /dev/null
+++ b/backends/platform/ds/arm9/source/keys.cpp
@@ -0,0 +1,151 @@
+/*------------------------------------------------------------------------------
+ $Id: keys.c,v 1.13 2006/01/12 09:10:47 wntrmute Exp $
+
+ key input code -- provides slightly higher level input forming
+
+ Copyright (C) 2005
+ Christian Auby (DesktopMan)
+ Dave Murphy (WinterMute)
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any
+ damages arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any
+ purpose, including commercial applications, and to alter it and
+ redistribute it freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you
+ must not claim that you wrote the original software. If you use
+ this software in a product, an acknowledgment in the product
+ documentation would be appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and
+ must not be misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source
+ distribution.
+
+ $Log: keys.c,v $
+ Revision 1.13 2006/01/12 09:10:47 wntrmute
+ Added key repeat as suggested by pepsiman
+
+ Revision 1.12 2005/11/27 12:30:25 wntrmute
+ reverted to correct hardware REGisters
+
+ Revision 1.11 2005/11/27 07:48:45 joatski
+ Renamed REG_KEYINPUT and REG_KEYCNT back to KEYS and KEYS_CR, as the alternatives are defined in registers_alt.h.
+ Changed function returns to uint32
+
+ Revision 1.10 2005/11/03 23:38:49 wntrmute
+ don't use enum for key function returns
+
+ Revision 1.9 2005/10/13 16:30:11 dovoto
+ Changed KEYPAD_BITS to a typedef enum, this resolved some issues with multiple redefinition of KEYPAD_BITS (although this error did not allways occur).
+
+ Revision 1.8 2005/10/03 21:21:59 wntrmute
+ use enum types
+
+ Revision 1.7 2005/09/07 18:06:27 wntrmute
+ use new register names
+
+ Revision 1.6 2005/08/23 17:06:10 wntrmute
+ converted all endings to unix
+
+ Revision 1.5 2005/08/03 18:07:55 wntrmute
+ don't use nds.h
+
+ Revision 1.4 2005/07/25 02:31:07 wntrmute
+ made local variables static
+ added proper header to keys.h
+
+ Revision 1.3 2005/07/25 02:19:01 desktopman
+ Added support for KEY_LID in keys.c.
+ Moved KEYS_CUR from header to source file.
+ Changed from the custom abs() to stdlib.h's abs().
+
+ Revision 1.2 2005/07/14 08:00:57 wntrmute
+ resynchronise with ndslib
+
+
+------------------------------------------------------------------------------*/
+
+#include <stdlib.h>
+
+#include <NDS/scummvm_ipc.h>
+#include <nds/system.h>
+#include <nds/arm9/input.h>
+
+//------------------------------------------------------------------------------
+
+#define KEYS_CUR (( ((~REG_KEYINPUT)&0x3ff) | (((~IPC->buttons)&3)<<10) | (((~IPC->buttons)<<6) & (KEY_TOUCH|KEY_LID) ))^KEY_LID)
+
+namespace DS {
+
+static uint16 keys = 0;
+static uint16 keysold = 0;
+static uint16 keysrepeat = 0;
+
+static u8 delay = 60, repeat = 30, count = 60;
+
+static uint16 oldx = 0;
+static uint16 oldy = 0;
+
+//------------------------------------------------------------------------------
+void scanKeys(void) {
+//------------------------------------------------------------------------------
+ keysold = keys;
+ keys = KEYS_CUR;
+
+ oldx = IPC->touchXpx;
+ oldy = IPC->touchYpx;
+ if ( delay != 0 ) {
+ if ( keys != keysold ) {
+ count = delay ;
+ keysrepeat = keysDown() ;
+ }
+ count--;
+ if ( count == 0 ) {
+ count = repeat;
+ keysrepeat = keys;
+ }
+ }
+}
+
+//------------------------------------------------------------------------------
+uint32 keysHeld(void) {
+//------------------------------------------------------------------------------
+ return keys;
+}
+
+//------------------------------------------------------------------------------
+uint32 keysDown(void) {
+//------------------------------------------------------------------------------
+ return (keys ^ keysold) & keys;
+}
+
+//------------------------------------------------------------------------------
+uint32 keysDownRepeat(void) {
+//------------------------------------------------------------------------------
+ uint32 tmp = keysrepeat;
+
+ keysrepeat = 0;
+
+ return tmp;
+}
+
+//------------------------------------------------------------------------------
+void keysSetRepeat( u8 setDelay, u8 setRepeat ) {
+//------------------------------------------------------------------------------
+ delay = setDelay ;
+ repeat = setRepeat ;
+ count = delay ;
+ keysrepeat = 0 ;
+}
+
+//------------------------------------------------------------------------------
+uint32 keysUp(void) {
+//------------------------------------------------------------------------------
+ return (keys ^ keysold) & (~keys);
+}
+
+
+} // namespace ds \ No newline at end of file
diff --git a/backends/platform/ds/arm9/source/keys.h b/backends/platform/ds/arm9/source/keys.h
new file mode 100644
index 0000000000..e0f28a12cf
--- /dev/null
+++ b/backends/platform/ds/arm9/source/keys.h
@@ -0,0 +1,13 @@
+
+
+
+namespace DS {
+
+void scanKeys(void);
+uint32 keysHeld(void);
+uint32 keysDown(void);
+uint32 keysDownRepeat(void);
+void keysSetRepeat( u8 setDelay, u8 setRepeat );
+uint32 keysUp(void);
+
+}