From 3fb6d28abe2ab1e5c032ae977324e03807eceb6d Mon Sep 17 00:00:00 2001 From: meepingsnesroms Date: Thu, 31 May 2018 17:35:04 -0700 Subject: [PATCH] Basic stuff for 3dsIrForwarder --- localTester/3dsIrForwarder/Makefile | 196 +++++++++++++++++++ localTester/3dsIrForwarder/README.md | 3 + localTester/3dsIrForwarder/icon.png | Bin 0 -> 5620 bytes localTester/3dsIrForwarder/source/main.c | 36 ++++ localTester/3dsIrForwarder/source/relay.c | 72 +++++++ localTester/LocalTester/LocalTester.pro.user | 2 +- qtBuildSystem/Mu/Mu.pro.user | 2 +- readme.md | 1 + 8 files changed, 310 insertions(+), 2 deletions(-) create mode 100644 localTester/3dsIrForwarder/Makefile create mode 100644 localTester/3dsIrForwarder/README.md create mode 100644 localTester/3dsIrForwarder/icon.png create mode 100644 localTester/3dsIrForwarder/source/main.c create mode 100644 localTester/3dsIrForwarder/source/relay.c diff --git a/localTester/3dsIrForwarder/Makefile b/localTester/3dsIrForwarder/Makefile new file mode 100644 index 0000000..4f5cda2 --- /dev/null +++ b/localTester/3dsIrForwarder/Makefile @@ -0,0 +1,196 @@ +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- + +ifeq ($(strip $(DEVKITARM)),) +$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") +endif + +TOPDIR ?= $(CURDIR) +include $(DEVKITARM)/3ds_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# DATA is a list of directories containing data files +# INCLUDES is a list of directories containing header files +# +# NO_SMDH: if set to anything, no SMDH file is generated. +# ROMFS is the directory which contains the RomFS, relative to the Makefile (Optional) +# APP_TITLE is the name of the app stored in the SMDH file (Optional) +# APP_DESCRIPTION is the description of the app stored in the SMDH file (Optional) +# APP_AUTHOR is the author of the app stored in the SMDH file (Optional) +# ICON is the filename of the icon (.png), relative to the project folder. +# If not set, it attempts to use one of the following (in this order): +# - .png +# - icon.png +# - /default_icon.png +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := include +#ROMFS := romfs + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft + +CFLAGS := -g -Wall -O2 -mword-relocations \ + -fomit-frame-pointer -ffunction-sections \ + $(ARCH) + +CFLAGS += $(INCLUDE) -DARM11 -D_3DS + +CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 + +ASFLAGS := -g $(ARCH) +LDFLAGS = -specs=3dsx.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) + +LIBS := -lctru -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(CTRULIB) + + +#--------------------------------------------------------------------------------- +# 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 OUTPUT := $(CURDIR)/$(TARGET) +export TOPDIR := $(CURDIR) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +PICAFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.v.pica))) +SHLISTFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.shlist))) +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)) \ + $(PICAFILES:.v.pica=.shbin.o) $(SHLISTFILES:.shlist=.shbin.o) \ + $(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) + +ifeq ($(strip $(ICON)),) + icons := $(wildcard *.png) + ifneq (,$(findstring $(TARGET).png,$(icons))) + export APP_ICON := $(TOPDIR)/$(TARGET).png + else + ifneq (,$(findstring icon.png,$(icons))) + export APP_ICON := $(TOPDIR)/icon.png + endif + endif +else + export APP_ICON := $(TOPDIR)/$(ICON) +endif + +ifeq ($(strip $(NO_SMDH)),) + export _3DSXFLAGS += --smdh=$(CURDIR)/$(TARGET).smdh +endif + +ifneq ($(ROMFS),) + export _3DSXFLAGS += --romfs=$(CURDIR)/$(ROMFS) +endif + +.PHONY: $(BUILD) clean all + +#--------------------------------------------------------------------------------- +all: $(BUILD) + +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(TARGET).3dsx $(OUTPUT).smdh $(TARGET).elf + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +ifeq ($(strip $(NO_SMDH)),) +$(OUTPUT).3dsx : $(OUTPUT).elf $(OUTPUT).smdh +else +$(OUTPUT).3dsx : $(OUTPUT).elf +endif + +$(OUTPUT).elf : $(OFILES) + +#--------------------------------------------------------------------------------- +# you need a rule like this for each extension you use as binary data +#--------------------------------------------------------------------------------- +%.bin.o : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + +#--------------------------------------------------------------------------------- +# rules for assembling GPU shaders +#--------------------------------------------------------------------------------- +define shader-as + $(eval CURBIN := $(patsubst %.shbin.o,%.shbin,$(notdir $@))) + picasso -o $(CURBIN) $1 + bin2s $(CURBIN) | $(AS) -o $@ + echo "extern const u8" `(echo $(CURBIN) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(CURBIN) | tr . _)`.h + echo "extern const u8" `(echo $(CURBIN) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(CURBIN) | tr . _)`.h + echo "extern const u32" `(echo $(CURBIN) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(CURBIN) | tr . _)`.h +endef + +%.shbin.o : %.v.pica %.g.pica + @echo $(notdir $^) + @$(call shader-as,$^) + +%.shbin.o : %.v.pica + @echo $(notdir $<) + @$(call shader-as,$<) + +%.shbin.o : %.shlist + @echo $(notdir $<) + @$(call shader-as,$(foreach file,$(shell cat $<),$(dir $<)/$(file))) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- diff --git a/localTester/3dsIrForwarder/README.md b/localTester/3dsIrForwarder/README.md new file mode 100644 index 0000000..a2147e7 --- /dev/null +++ b/localTester/3dsIrForwarder/README.md @@ -0,0 +1,3 @@ +# 3dsIrForwarder + +Sends raw data received over an encrypted WIFI connection over IR and sends the results back. diff --git a/localTester/3dsIrForwarder/icon.png b/localTester/3dsIrForwarder/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8ebec57ebcccfde1b30425a5e00e371bd57b014d GIT binary patch literal 5620 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 MUHx3vIVCg!0D8uL +#include +#include <3ds.h> + + +int main(int argc, char* argv[]){ + gfxInitDefault(); + consoleInit(GFX_TOP, NULL); + + /* + printf("3dsIrForwarder Starting..."); + printf("Getting Encryption Certificates..."); + printf("Opening WIFI Connection..."); + printf("WIFI Connection Opened..."); + printf("Opening IR Connection..."); + printf("IR Connection Opened..."); + printf("Init Success!"); + */ + + //Loop as long as the status is not exit + while(aptMainLoop()){ + //Scan hid shared memory for input events + hidScanInput(); + + + + //Flush + swap framebuffers and wait for VBlank + gfxFlushBuffers(); + gfxSwapBuffers(); + gspWaitForVBlank(); + } + + + gfxExit(); + return 0; +} diff --git a/localTester/3dsIrForwarder/source/relay.c b/localTester/3dsIrForwarder/source/relay.c new file mode 100644 index 0000000..3a82442 --- /dev/null +++ b/localTester/3dsIrForwarder/source/relay.c @@ -0,0 +1,72 @@ +#include <3ds.h> +#include +#include +#include +#include +#include +#include + + +#define SOC_ALIGN 0x1000 +#define SOC_BUFFERSIZE 0x100000 + + +bool relayInited = false; +static u32* irBuffer = NULL; +static u32* socketBuffer = NULL; +static s32 sock = -1; +static struct sockaddr_in client; +static struct sockaddr_in server; + + +static void failCleanup(){ + if(irBuffer) + free(irBuffer); + if(socketBuffer) + free(socketBuffer); +} + +bool relayInit(){ + if(!relayInited){ + int ret; + + socketBuffer = (u32*)memalign(SOC_ALIGN, SOC_BUFFERSIZE); + irBuffer = (u32*)memalign(SOC_ALIGN, SOC_BUFFERSIZE); + if(!irBuffer || !socketBuffer){ + failCleanup(); + return false; + } + + ret = iruInit(irBuffer, SOC_BUFFERSIZE); + if(ret != RL_SUCCESS){ + failCleanup(); + return false; + } + + ret = socInit(socketBuffer, SOC_BUFFERSIZE) + if(ret != RL_SUCCESS){ + failCleanup(); + return false; + } + + sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); + csock = accept(sock, (struct sockaddr *) &client, &clientlen); + + relayInited = true; + } + + return true;//already inited return success +} + +void relayExit(){ + if(relayInited){ + iruExit(); + socExit(); + free(irBuffer); + free(socketBuffer); + + relayInited = false; + } +} + +void relayRun diff --git a/localTester/LocalTester/LocalTester.pro.user b/localTester/LocalTester/LocalTester.pro.user index a31d757..876032b 100644 --- a/localTester/LocalTester/LocalTester.pro.user +++ b/localTester/LocalTester/LocalTester.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/qtBuildSystem/Mu/Mu.pro.user b/qtBuildSystem/Mu/Mu.pro.user index 89c5bb5..5feda09 100644 --- a/qtBuildSystem/Mu/Mu.pro.user +++ b/qtBuildSystem/Mu/Mu.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/readme.md b/readme.md index 7a29300..fd2f913 100644 --- a/readme.md +++ b/readme.md @@ -51,6 +51,7 @@ Musashi v3.4(last version that builds outside of mame) (68k core) http://www.iconarchive.com/show/clean-3d-icons-by-mysitemyway.html (Palm Action Buttons , clean3d-blue.zip) http://www.iconarchive.com/show/crystal-clear-icons-by-everaldo/App-palm-icon.html (Desktop Icon) http://tango.freedesktop.org/Tango_Icon_Library (All UI buttons) +https://www.iconexperience.com/v_collection/icons/?icon=led_red (3dsIrForwarder icon) Some main board photos by Reddit /u/KHRoN ## Building