From e3a1c15e832623132d691be3bfef84a49cb774ce Mon Sep 17 00:00:00 2001 From: zeromus Date: Tue, 29 Nov 2011 23:13:12 +0000 Subject: [PATCH] add twltouch demo to tests directory --- tools/ds_tests/twltouch/Makefile | 41 ++++++ tools/ds_tests/twltouch/arm7/Makefile | 135 ++++++++++++++++++ tools/ds_tests/twltouch/arm7/source/codec.c | 135 ++++++++++++++++++ .../ds_tests/twltouch/arm7/source/template.c | 96 +++++++++++++ tools/ds_tests/twltouch/arm7/source/tp.c | 59 ++++++++ tools/ds_tests/twltouch/arm9/Makefile | 127 ++++++++++++++++ .../ds_tests/twltouch/arm9/source/template.c | 31 ++++ 7 files changed, 624 insertions(+) create mode 100644 tools/ds_tests/twltouch/Makefile create mode 100644 tools/ds_tests/twltouch/arm7/Makefile create mode 100644 tools/ds_tests/twltouch/arm7/source/codec.c create mode 100644 tools/ds_tests/twltouch/arm7/source/template.c create mode 100644 tools/ds_tests/twltouch/arm7/source/tp.c create mode 100644 tools/ds_tests/twltouch/arm9/Makefile create mode 100644 tools/ds_tests/twltouch/arm9/source/template.c diff --git a/tools/ds_tests/twltouch/Makefile b/tools/ds_tests/twltouch/Makefile new file mode 100644 index 000000000..d4006b40c --- /dev/null +++ b/tools/ds_tests/twltouch/Makefile @@ -0,0 +1,41 @@ +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITARM)),) +$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") +endif + +include $(DEVKITARM)/ds_rules + +export TARGET := $(shell basename $(CURDIR)) +export TOPDIR := $(CURDIR) + +PARAMS := +ifeq ($(USETWLSDMMC),1) +PARAMS += USETWLSDMMC=1 +endif + +.PHONY: arm7/$(TARGET).elf arm9/$(TARGET).elf + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +all: $(TARGET).nds + +#--------------------------------------------------------------------------------- +$(TARGET).nds : arm7/$(TARGET).elf arm9/$(TARGET).elf + ndstool -c $(TARGET).nds -7 arm7/$(TARGET).elf -9 arm9/$(TARGET).elf + +#--------------------------------------------------------------------------------- +arm7/$(TARGET).elf: + $(MAKE) -C arm7 $(PARAMS) + +#--------------------------------------------------------------------------------- +arm9/$(TARGET).elf: + $(MAKE) -C arm9 $(PARAMS) + +#--------------------------------------------------------------------------------- +clean: + $(MAKE) -C arm9 clean + $(MAKE) -C arm7 clean + rm -f $(TARGET).nds $(TARGET).arm7 $(TARGET).arm9 diff --git a/tools/ds_tests/twltouch/arm7/Makefile b/tools/ds_tests/twltouch/arm7/Makefile new file mode 100644 index 000000000..e0f4618db --- /dev/null +++ b/tools/ds_tests/twltouch/arm7/Makefile @@ -0,0 +1,135 @@ +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITARM)),) +$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") +endif + +include $(DEVKITARM)/ds_rules + +#--------------------------------------------------------------------------------- +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +# DATA is a list of directories containing binary files +# all directories are relative to this makefile +#--------------------------------------------------------------------------------- +BUILD := build +SOURCES := source +INCLUDES := include build +DATA := + +DEFINES := +ifeq ($(USETWLSDMMC),1) +DEFINES += -DUSETWLSDMMC +endif + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +ARCH := -mthumb-interwork + +CFLAGS := -g -Wall -O2\ + -mcpu=arm7tdmi -mtune=arm7tdmi -fomit-frame-pointer\ + -ffast-math \ + $(ARCH) + +CFLAGS += $(INCLUDE) -DARM7 $(DEFINES) +CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -fno-rtti + + +ASFLAGS := -g $(ARCH) +LDFLAGS = -specs=ds_arm7.specs -g $(ARCH) -Wl,-Map,$(notdir $*).map + +LIBS := +ifeq ($(USETWLSDMMC),1) +LIBS += -ltwlsdmmc7 +endif +LIBS += -ldswifi7 -lmm7 -lnds7 + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(LIBNDS) + + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export ARM7ELF := $(CURDIR)/$(TARGET).elf +export DEPSDIR := $(CURDIR)/$(BUILD) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#--------------------------------------------------------------------------------- + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) *.elf + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(ARM7ELF) : $(OFILES) + @echo linking $(notdir $@) + @$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@ + + +#--------------------------------------------------------------------------------- +# you need a rule like this for each extension you use as binary data +#--------------------------------------------------------------------------------- +%.bin.o : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- diff --git a/tools/ds_tests/twltouch/arm7/source/codec.c b/tools/ds_tests/twltouch/arm7/source/codec.c new file mode 100644 index 000000000..805a3ab6e --- /dev/null +++ b/tools/ds_tests/twltouch/arm7/source/codec.c @@ -0,0 +1,135 @@ +#include + +static u32 cdcCurrentPage = -1; + +void CDC_WriteRegister(u32 reg, u32 val); + +void CDC_ChangePage(u32 page) +{ + if (cdcCurrentPage == page) + return; + + if (cdcCurrentPage == 0xFF) + CDC_WriteRegister(0x7F, page); + else + CDC_WriteRegister(0, page); + + cdcCurrentPage = page; +} + + +void CDC_WriteRegister(u32 reg, u32 val) +{ + while(REG_SPICNT & 0x80); + + REG_SPICNT = 0x8A00; + REG_SPIDATA = (reg<<1) & 0xFF; + + while(REG_SPICNT & 0x80); + + REG_SPICNT = 0x8200; + REG_SPIDATA = val & 0xFF; +} + +void CDC_WriteRegisterEx(u32 page, u32 reg, u32 val) +{ + CDC_ChangePage(page); + CDC_WriteRegister(reg, val); +} + +void CDC_WriteRegisters(u32 reg, u8* buf, u32 size) +{ + if (size == 0) + return; + + + while(REG_SPICNT & 0x80); + + REG_SPICNT = 0x8A00; + REG_SPIDATA = (reg<<1) & 0xFF; + + while(REG_SPICNT & 0x80); + + while(size-- > 1) + { + REG_SPIDATA = 0; + + while(REG_SPICNT & 0x80); + + *buf++ = REG_SPIDATA; + } + + REG_SPICNT = 0x8200; + REG_SPIDATA = 0; + + while(REG_SPICNT & 0x80); + + *buf++ = REG_SPIDATA; +} + +void CDC_WriteRegistersEx(u32 page, u32 reg, u8* buf, u32 size) +{ + CDC_ChangePage(page); + CDC_WriteRegisters(reg, buf, size); +} + +u32 CDC_ReadRegister(u32 reg) +{ + while(REG_SPICNT & 0x80); + + REG_SPICNT = 0x8A00; + REG_SPIDATA = ((reg<<1) | 1) & 0xFF; + + while(REG_SPICNT & 0x80); + + REG_SPICNT = 0x8200; + REG_SPIDATA = 0; + + while(REG_SPICNT & 0x80); + + return REG_SPIDATA; +} + +u32 CDC_ReadRegisterEx(u32 page, u32 reg) +{ + CDC_ChangePage(page); + return CDC_ReadRegister(reg); +} + + +void CDC_ReadRegisters(u32 reg, u8* buf, u32 size) +{ + if (size == 0) + return; + + + while(REG_SPICNT & 0x80); + + REG_SPICNT = 0x8A00; + REG_SPIDATA = ((reg<<1)|1) & 0xFF; + + while(REG_SPICNT & 0x80); + + while(size-- > 1) + { + REG_SPIDATA = 0; + + while(REG_SPICNT & 0x80); + + *buf++ = REG_SPIDATA; + } + + REG_SPICNT = 0x8200; + REG_SPIDATA = 0; + + while(REG_SPICNT & 0x80); + + *buf++ = REG_SPIDATA; +} + +void CDC_ReadRegistersEx(u32 page, u32 reg, u8* buf, u32 size) +{ + CDC_ChangePage(page); + CDC_ReadRegisters(reg, buf, size); +} + diff --git a/tools/ds_tests/twltouch/arm7/source/template.c b/tools/ds_tests/twltouch/arm7/source/template.c new file mode 100644 index 000000000..08439bc91 --- /dev/null +++ b/tools/ds_tests/twltouch/arm7/source/template.c @@ -0,0 +1,96 @@ +/*--------------------------------------------------------------------------------- + + default ARM7 core + + Copyright (C) 2005 - 2010 + Michael Noland (joat) + Jason Rogers (dovoto) + 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. + +---------------------------------------------------------------------------------*/ +#include +#include +#include + +u32 TouchRead(u32* xpos, u32* ypos); + +//--------------------------------------------------------------------------------- +void VblankHandler(void) { +//--------------------------------------------------------------------------------- + Wifi_Update(); +} + + +//--------------------------------------------------------------------------------- +void VcountHandler() { +//--------------------------------------------------------------------------------- + //inputGetAndSend(); +} + +volatile bool exitflag = false; + +//--------------------------------------------------------------------------------- +void powerButtonCB() { +//--------------------------------------------------------------------------------- + exitflag = true; +} + +//--------------------------------------------------------------------------------- +int main() { +//--------------------------------------------------------------------------------- + u32 *ptr = (u32*)0x02400000; +// readUserSettings(); + + irqInit(); + // Start the RTC tracking IRQ +// initClockIRQ(); + fifoInit(); + +/* mmInstall(FIFO_MAXMOD); + + SetYtrigger(80); + + installWifiFIFO(); + installSoundFIFO(); + + installSystemFIFO(); + + irqSet(IRQ_VCOUNT, VcountHandler); + irqSet(IRQ_VBLANK, VblankHandler); + + irqEnable( IRQ_VBLANK | IRQ_VCOUNT | IRQ_NETWORK); + + setPowerButtonCB(powerButtonCB); */ + + //ptr[0] = TouchRead(ptr+1, ptr+2); + + // Keep the ARM7 mostly idle + while (!exitflag) { + ptr[0] = TouchRead(ptr+1, ptr+2); + + // if ( 0 == (REG_KEYINPUT & (KEY_SELECT | KEY_START | KEY_L | KEY_R))) { + // exitflag = true; + // } + // swiWaitForVBlank(); + } + return 0; +} diff --git a/tools/ds_tests/twltouch/arm7/source/tp.c b/tools/ds_tests/twltouch/arm7/source/tp.c new file mode 100644 index 000000000..b3905abd7 --- /dev/null +++ b/tools/ds_tests/twltouch/arm7/source/tp.c @@ -0,0 +1,59 @@ +/* + Read touchscreen positions. + + Returns 1 if touched, and the average position in xpos and ypos. Otherwise, if not touched, returns 0. + */ + +#include + +void CDC_ReadRegistersEx(u32 page, u32 reg, u8* buf, u32 size); + +u32 TouchRead(u32* xpos, u32* ypos) +{ + int i; + u8 buf[20]; + u16 x[5]; + u16 y[5]; + u32 xavg; + u32 yavg; + u8 state; + + + state = CDC_ReadRegisterEx(3,9); + if ( (state & 0xC0) == 0x40 ) + return 0; + + state = CDC_ReadRegisterEx(3, 14); + if (state & 2) + return 2; + + + CDC_ReadRegistersEx(252, 1, buf, 20); + + xavg = 0; + yavg = 0; + + for(i=0; i<5; i++) + { + x[i] = buf[i*2+1] | (buf[i*2+0]<<8); + y[i] = buf[10+i*2+1] | (buf[10+i*2+0]<<8); + + if (x[i] & 0xF000) + return 3; + + if (y[i] & 0xF000) + return 4; + + xavg += x[i]; + yavg += y[i]; + } + + xavg /= 5; + yavg /= 5; + + *xpos = xavg; + *ypos = yavg; + + return 1; +} + diff --git a/tools/ds_tests/twltouch/arm9/Makefile b/tools/ds_tests/twltouch/arm9/Makefile new file mode 100644 index 000000000..0e4fbdfb0 --- /dev/null +++ b/tools/ds_tests/twltouch/arm9/Makefile @@ -0,0 +1,127 @@ +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITARM)),) +$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") +endif + +include $(DEVKITARM)/ds_rules + +#--------------------------------------------------------------------------------- +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +# DATA is a list of directories containing binary files +# all directories are relative to this makefile +#--------------------------------------------------------------------------------- +BUILD := build +SOURCES := source +INCLUDES := include +DATA := + + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +ARCH := -mthumb -mthumb-interwork + +CFLAGS := -g -Wall -O2\ + -march=armv5te -mtune=arm946e-s -fomit-frame-pointer\ + -ffast-math \ + $(ARCH) + +CFLAGS += $(INCLUDE) -DARM9 +CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions + +ASFLAGS := -g $(ARCH) -march=armv5te -mtune=arm946e-s + +LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lnds9 + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(LIBNDS) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export ARM9ELF := $(CURDIR)/$(TARGET).elf +export DEPSDIR := $(CURDIR)/$(BUILD) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#--------------------------------------------------------------------------------- + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) *.elf *.nds* *.bin + + +#--------------------------------------------------------------------------------- +else + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(ARM9ELF) : $(OFILES) + @echo linking $(notdir $@) + @$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@ + +#--------------------------------------------------------------------------------- +# you need a rule like this for each extension you use as binary data +#--------------------------------------------------------------------------------- +%.bin.o : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + +-include $(DEPSDIR)/*.d + +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- diff --git a/tools/ds_tests/twltouch/arm9/source/template.c b/tools/ds_tests/twltouch/arm9/source/template.c new file mode 100644 index 000000000..47820ac40 --- /dev/null +++ b/tools/ds_tests/twltouch/arm9/source/template.c @@ -0,0 +1,31 @@ +/*--------------------------------------------------------------------------------- + + Simple console print demo + -- dovoto + +---------------------------------------------------------------------------------*/ +#include +#include + +//--------------------------------------------------------------------------------- +int main(void) { +//--------------------------------------------------------------------------------- + u32 *ptr = (u32*)0x02400000; + + consoleDemoInit(); //setup the sub screen for printing + + printf("twltouch\n"); + swiWaitForVBlank(); + + while(1) { + + DC_InvalidateRange(ptr, 0x10); + iprintf("\x1b[10;0H%x, x = %04i, y = %04i\n", ptr[0], ptr[1], ptr[2]); + + swiWaitForVBlank(); + scanKeys(); + if (keysDown()&KEY_START) break; + } + + return 0; +}