From: <c99...@us...> - 2007-07-17 23:06:59
|
Revision: 417 http://svn.sourceforge.net/cadcdev/?rev=417&view=rev Author: c99koder Date: 2007-07-17 16:06:07 -0700 (Tue, 17 Jul 2007) Log Message: ----------- NDS: Link with libfat, initialize libfat and the DS hardware, remove AutoLock calls from Stream class, and handle DS input events during VBlank interrupt Modified Paths: -------------- tiki/nds/Makefile.rules tiki/nds/src/audio/stream.cpp tiki/nds/src/init_shutdown.cpp tiki/nds/src/plathid.cpp tiki/nds/src/tikitime.cpp Modified: tiki/nds/Makefile.rules =================================================================== --- tiki/nds/Makefile.rules 2007-07-08 01:05:36 UTC (rev 416) +++ tiki/nds/Makefile.rules 2007-07-17 23:06:07 UTC (rev 417) @@ -12,7 +12,7 @@ $(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitARM) endif -TIKI_BASE_LIBS=-ltiki -L$(DEVKITPRO)/libnds/lib -lnds9 +TIKI_BASE_LIBS=-ltiki -L$(DEVKITPRO)/libnds/lib -lfat -lnds9 CXXFLAGS=-I$(DEVKITPRO)/libnds/include Modified: tiki/nds/src/audio/stream.cpp =================================================================== --- tiki/nds/src/audio/stream.cpp 2007-07-08 01:05:36 UTC (rev 416) +++ tiki/nds/src/audio/stream.cpp 2007-07-17 23:06:07 UTC (rev 417) @@ -36,83 +36,61 @@ m_queueing = false; m_state = StateStopped; m_volume = 0.8f; - m_mutex = new Mutex(); } Stream::~Stream() { - destroy(); } bool Stream::create() { - AutoLock lock(m_mutex); return true; } void Stream::destroy() { - AutoLock lock(m_mutex); } // virtual void filter(int freq, int chncount, void * buffer, int smpcnt) { } void Stream::filterAdd(Filter * f) { - AutoLock lock(m_mutex); - m_filters.insertTail(f); } void Stream::filterRemove(Filter * f) { - AutoLock lock(m_mutex); - m_filters.del(f); } void Stream::setQueueing(bool isQueued) { - AutoLock lock(m_mutex); - m_queueing = isQueued; } void Stream::setFrequency(int freq) { - AutoLock lock(m_mutex); - m_freq = freq; } void Stream::setChannelCount(int chncount) { - AutoLock lock(m_mutex); - m_chnCount = chncount; } void Stream::start() { - AutoLock lock(m_mutex); m_state = StatePlaying; } void Stream::stop() { - AutoLock lock(m_mutex); m_state = StateStopped; } void Stream::pause() { - AutoLock lock(m_mutex); m_state = StatePaused; } void Stream::resume() { - AutoLock lock(m_mutex); m_state = StatePlaying; } void Stream::setVolume(float vol) { - AutoLock lock(m_mutex); - m_volume = vol; } bool Stream::isPlaying() { - AutoLock lock(m_mutex); - return m_state == StatePlaying; } Modified: tiki/nds/src/init_shutdown.cpp =================================================================== --- tiki/nds/src/init_shutdown.cpp 2007-07-08 01:05:36 UTC (rev 416) +++ tiki/nds/src/init_shutdown.cpp 2007-07-17 23:06:07 UTC (rev 417) @@ -13,9 +13,15 @@ #include "Tiki/plxcompat.h" #include "Tiki/hid.h" +#include <nds.h> +#include <fat.h> + namespace Tiki { bool init(int argc, char **argv) { + REG_POWERCNT = POWER_ALL; + irqInit(); + fatInitDefault(); return Hid::init(); } Modified: tiki/nds/src/plathid.cpp =================================================================== --- tiki/nds/src/plathid.cpp 2007-07-08 01:05:36 UTC (rev 416) +++ tiki/nds/src/plathid.cpp 2007-07-17 23:06:07 UTC (rev 417) @@ -4,7 +4,71 @@ 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); \ + } + +#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); \ + } + +void TikiVBlank(void) +{ + static u32 oldkeys = 0; + scanKeys(); + u32 keys = keysHeld(); + + //Controller events + CONTROLLER_BUTTON_MAP(oldkeys, keys, KEY_UP, Event::BtnUp); + CONTROLLER_BUTTON_MAP(oldkeys, keys, KEY_DOWN, Event::BtnDown); + CONTROLLER_BUTTON_MAP(oldkeys, keys, KEY_LEFT, Event::BtnLeft); + CONTROLLER_BUTTON_MAP(oldkeys, keys, KEY_RIGHT, Event::BtnRight); + CONTROLLER_BUTTON_MAP(oldkeys, keys, KEY_A, Event::BtnA); + CONTROLLER_BUTTON_MAP(oldkeys, keys, KEY_B, Event::BtnB); + CONTROLLER_BUTTON_MAP(oldkeys, keys, KEY_X, Event::BtnX); + CONTROLLER_BUTTON_MAP(oldkeys, keys, KEY_Y, Event::BtnY); + CONTROLLER_BUTTON_MAP(oldkeys, keys, KEY_START, Event::BtnStart); + + //Keyboard emulation + CONTROLLER_KEY_MAP(oldkeys, keys, KEY_UP, Event::KeyUp); + CONTROLLER_KEY_MAP(oldkeys, keys, KEY_DOWN, Event::KeyDown); + CONTROLLER_KEY_MAP(oldkeys, keys, KEY_LEFT, Event::KeyLeft); + CONTROLLER_KEY_MAP(oldkeys, keys, KEY_RIGHT, Event::KeyRight); + CONTROLLER_KEY_MAP(oldkeys, keys, KEY_START, 13); + CONTROLLER_KEY_MAP(oldkeys, keys, KEY_A, 32); + CONTROLLER_KEY_MAP(oldkeys, keys, KEY_B, Event::KeyEsc); + + oldkeys = keys; +} + bool platInit() { + irqSet(IRQ_VBLANK,&TikiVBlank); + irqEnable(IRQ_VBLANK); return true; } Modified: tiki/nds/src/tikitime.cpp =================================================================== --- tiki/nds/src/tikitime.cpp 2007-07-08 01:05:36 UTC (rev 416) +++ tiki/nds/src/tikitime.cpp 2007-07-17 23:06:07 UTC (rev 417) @@ -11,6 +11,7 @@ #include <sys/time.h> #include <unistd.h> +#include <nds.h> namespace Tiki { namespace Time { @@ -25,17 +26,12 @@ } void sleep(uint64 us) { -// TODO: add this -} + float seconds = (float)us / 1000000.0f; + int blanks = (int)(seconds * 60.0f); + for(int i=0; i < blanks; i++) { + swiWaitForVBlank(); + } } } - - - - - - - - - +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |