|
From: <c99...@us...> - 2007-07-28 19:00:44
|
Revision: 428
http://cadcdev.svn.sourceforge.net/cadcdev/?rev=428&view=rev
Author: c99koder
Date: 2007-07-28 12:00:43 -0700 (Sat, 28 Jul 2007)
Log Message:
-----------
Tiki: NDS: Touchscreen support
Modified Paths:
--------------
tiki/nds/src/plathid.cpp
Modified: tiki/nds/src/plathid.cpp
===================================================================
--- tiki/nds/src/plathid.cpp 2007-07-28 06:27:21 UTC (rev 427)
+++ tiki/nds/src/plathid.cpp 2007-07-28 19:00:43 UTC (rev 428)
@@ -3,46 +3,76 @@
#include "Tiki/hid.h"
#include <dswifi9.h>
+using namespace Tiki::Hid;
+
volatile uint64 __timecounter = 0;
+class MouseDevice : public Device {
+public:
+ MouseDevice() { }
+ virtual ~MouseDevice() { }
+
+ virtual Type getType() const { return TypeMouse; }
+ virtual string getName() const { return "NDS Touchscreen"; }
+};
+
+class JsDevice : public Device {
+public:
+ JsDevice() { }
+ virtual ~JsDevice() { }
+
+ virtual Type getType() const { return TypeJoystick; }
+ virtual string getName() const { return "NDS Controller"; }
+};
+
+static RefPtr<MouseDevice> NDSmouse;
+static RefPtr<JsDevice> NDSjs;
+
namespace Tiki {
namespace Hid {
#define CONTROLLER_BUTTON_MAP(OLDSTATE, NEWSTATE, BUTTON, EVENT) \
- if((NEWSTATE & BUTTON) && !(OLDSTATE & BUTTON)) { \
- Event evt(Event::EvtBtnPress); \
- evt.btn = EVENT; \
- evt.port = 1; \
- sendEvent(evt); \
- } \
- if(!(NEWSTATE & BUTTON) && (OLDSTATE & BUTTON)) { \
- Event evt(Event::EvtBtnRelease); \
- evt.btn = EVENT; \
- evt.port = 1; \
- sendEvent(evt); \
- }
+ if((NEWSTATE & BUTTON) && !(OLDSTATE & BUTTON)) { \
+ Event evt(Event::EvtBtnPress); \
+ evt.dev = NDSjs; \
+ evt.btn = EVENT; \
+ evt.port = 1; \
+ sendEvent(evt); \
+ } \
+ if(!(NEWSTATE & BUTTON) && (OLDSTATE & BUTTON)) { \
+ Event evt(Event::EvtBtnRelease); \
+ evt.dev = NDSjs; \
+ evt.btn = EVENT; \
+ evt.port = 1; \
+ sendEvent(evt); \
+ }
#define CONTROLLER_KEY_MAP(OLDSTATE, NEWSTATE, BUTTON, EVENT) \
- if((NEWSTATE & BUTTON) && !(OLDSTATE & BUTTON)) { \
- Event evtPress(Event::EvtKeypress); \
- evtPress.key = EVENT; \
- evtPress.port = 1; \
- sendEvent(evtPress); \
- \
- Event evt(Event::EvtKeyDown); \
- evt.key = EVENT; \
- evt.port = 1; \
- sendEvent(evt); \
- } \
- if(!(NEWSTATE & BUTTON) && (OLDSTATE & BUTTON)) { \
- Event evt(Event::EvtKeyUp); \
- evt.key = EVENT; \
- evt.port = 1; \
- sendEvent(evt); \
- }
+ if((NEWSTATE & BUTTON) && !(OLDSTATE & BUTTON)) { \
+ Event evtPress(Event::EvtKeypress); \
+ evtPress.dev = NDSjs; \
+ evtPress.key = EVENT; \
+ evtPress.port = 1; \
+ sendEvent(evtPress); \
+ \
+ Event evt(Event::EvtKeyDown); \
+ evt.dev = NDSjs; \
+ evt.key = EVENT; \
+ evt.port = 1; \
+ sendEvent(evt); \
+ } \
+ if(!(NEWSTATE & BUTTON) && (OLDSTATE & BUTTON)) { \
+ Event evt(Event::EvtKeyUp); \
+ evt.dev = NDSjs; \
+ evt.key = EVENT; \
+ evt.port = 1; \
+ sendEvent(evt); \
+ }
void TikiVBlank(void)
{
static u32 oldkeys = 0;
+ static u16 mouseX = 0, mouseY = 0;
+ touchPosition tp;
scanKeys();
u32 keys = keysHeld();
@@ -66,6 +96,26 @@
CONTROLLER_KEY_MAP(oldkeys, keys, KEY_A, 32);
CONTROLLER_KEY_MAP(oldkeys, keys, KEY_B, Event::KeyEsc);
+ //Touchscreen
+ if(keys & KEY_TOUCH) {
+ tp = touchReadXY();
+ Event evt(Event::EvtBtnPress);
+ evt.dev = NDSmouse;
+ evt.btn = Event::MouseLeftBtn;
+ evt.port = 1;
+ evt.x = mouseX = tp.px;
+ evt.y = mouseY = tp.py;
+ sendEvent(evt);
+ } else if(oldkeys & KEY_TOUCH) {
+ Event evt(Event::EvtBtnRelease);
+ evt.dev = NDSmouse;
+ evt.btn = Event::MouseLeftBtn;
+ evt.port = 1;
+ evt.x = mouseX;
+ evt.y = mouseY;
+ sendEvent(evt);
+ }
+
oldkeys = keys;
Wifi_Timer(50);
__timecounter += 15000;
@@ -74,6 +124,8 @@
bool platInit() {
irqSet(IRQ_VCOUNT,&TikiVBlank);
irqEnable(IRQ_VBLANK | IRQ_VCOUNT);
+ NDSjs = new JsDevice;
+ NDSmouse = new MouseDevice;
return true;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|