diff --git a/firmware/applications/Makefile b/firmware/applications/Makefile index 82b69df..d8be88a 100644 --- a/firmware/applications/Makefile +++ b/firmware/applications/Makefile @@ -71,6 +71,21 @@ $(LOBJ): OBJS += $(LOBJ) endif +ifeq "$(APP)" "l0dable" +ifndef LAPP +LAPP=blinktest +endif +LSRC=../l0dable/$(LAPP).c +LOBJ=l0dable_$(LAPP).o + +.PHONY: $(LOBJ) + +$(LOBJ): + $(CC) $(CFLAGS) -o $@ $(LSRC) + +OBJS += $(LOBJ) +endif + ifeq "$(wildcard $(APP))" "$(APP)" ifndef TYPE TYPE=$(APP) diff --git a/firmware/applications/final/flame.c b/firmware/applications/final/flame.c index a9ce06a..06d02b1 100644 --- a/firmware/applications/final/flame.c +++ b/firmware/applications/final/flame.c @@ -151,7 +151,6 @@ void init_flame(void) { #include "lcd/print.h" -//# MENU debug ChkFlame void ChkFlame(void) { do{ lcdClear(); diff --git a/firmware/applications/final/mesh.c b/firmware/applications/final/mesh.c index 82ffc73..ef3fa22 100644 --- a/firmware/applications/final/mesh.c +++ b/firmware/applications/final/mesh.c @@ -199,6 +199,15 @@ void m_choose(){ lcdPrint(":"); lcdPrint(IntToStr(tm->tm_sec,2,F_LONG|F_ZEROS)); lcdNl(); + + if(tmm[i]=='T'){ + lcdPrint(IntToStr(tm->tm_mday,2,F_LONG)); + lcdPrint("."); + lcdPrint(IntToStr(tm->tm_mon+1,2,0)); + lcdPrint("."); + lcdPrint(IntToStr(tm->tm_year+YEAR0,4,F_LONG|F_ZEROS)); + lcdNl(); + }; }; char *foo=(char *)MO_BODY(meshbuffer[j].pkt); while(strlen(foo)>13){ diff --git a/firmware/applications/l0dable.c b/firmware/applications/l0dable.c new file mode 100644 index 0000000..f96a280 --- /dev/null +++ b/firmware/applications/l0dable.c @@ -0,0 +1,43 @@ +#include +#include + +#include "basic/basic.h" +#include "lcd/lcd.h" +#include "lcd/print.h" +#include "usb/usbmsc.h" + +/**************************************************************************/ +void gotoISP(void) { + DoString(0,0,"Enter ISP!"); + lcdDisplay(); + ISPandReset(); +} + +void msc_menu(void){ + DoString(0,8,"MSC Enabled."); + lcdDisplay(); + usbMSCInit(); + while(!getInputRaw())delayms(10); + DoString(0,16,"MSC Disabled."); + usbMSCOff(); +}; + +extern void (*ram)(void); + +static const struct MENU mainmenu = {"Mainmenu", { + {"Run Loadable", &ram}, + {"Invoke ISP", &gotoISP}, + {"MSC", &msc_menu}, + {NULL,NULL} +}}; + + + +/**************************************************************************/ + +void main_l0dable(void) { + lcdClear(); + lcdDisplay(); + handleMenu(&mainmenu); + gotoISP(); +}; diff --git a/firmware/applications/mkwrapper b/firmware/applications/mkwrapper index 4c65d03..7bb27fc 100755 --- a/firmware/applications/mkwrapper +++ b/firmware/applications/mkwrapper @@ -3,6 +3,7 @@ for a in $* ; do case $a in loadable_*) continue;; + l0dable_*) continue;; */*) continue;; esac base=${a%.o} @@ -16,6 +17,7 @@ echo "void wrapper(void){" for a in $* ; do case $a in loadable_*) continue;; + l0dable_*) continue;; */*) continue;; esac base=${a%.o} @@ -29,6 +31,7 @@ echo "void tick_wrapper(void){" for a in $* ; do case $a in loadable_*) continue;; + l0dable_*) continue;; */*) continue;; esac base=${a%.o} diff --git a/firmware/l0dable/EXPORTS b/firmware/l0dable/EXPORTS index c25d631..e77c938 100644 --- a/firmware/l0dable/EXPORTS +++ b/firmware/l0dable/EXPORTS @@ -65,3 +65,5 @@ meshGetMessage nickname uint32touint8p uint8ptouint32 +memset +nrf_config_set diff --git a/firmware/l0dable/debug.c b/firmware/l0dable/debug.c index 4686da0..a4c329b 100644 --- a/firmware/l0dable/debug.c +++ b/firmware/l0dable/debug.c @@ -27,7 +27,6 @@ void uuid(void); static const struct MENU submenu_debug={ "debug", { { "ChkBattery", &ChkBattery}, -// { "ChkFlame", &ChkFlame}, { "ChkLight", &ChkLight}, { "MeshInfo", &m_time}, { "Qstatus", &Qstatus}, @@ -118,10 +117,10 @@ void uuid(void) { iap_return = iapReadSerialNumber(); lcdClear(); lcdPrintln("UUID:"); - lcdPrintIntHex(iap_return.Result[0]); lcdNl(); - lcdPrintIntHex(iap_return.Result[1]); lcdNl(); - lcdPrintIntHex(iap_return.Result[2]); lcdNl(); - lcdPrintIntHex(iap_return.Result[3]); lcdNl(); + lcdPrintln(IntToStrX(iap_return.Result[0],8)); + lcdPrintln(IntToStrX(iap_return.Result[1],8)); + lcdPrintln(IntToStrX(iap_return.Result[2],8)); + lcdPrintln(IntToStrX(iap_return.Result[3],8)); lcdNl(); lcdPrintln("Beacon ID:"); lcdPrintln(IntToStrX(GetUUID32(),8)); @@ -227,4 +226,3 @@ void m_time(void){ delayms_queue(50); }while ((getInputRaw())==BTN_NONE); }; - diff --git a/firmware/l0dable/recvcard.c b/firmware/l0dable/recvcard.c index d19da8d..3ef7bfb 100644 --- a/firmware/l0dable/recvcard.c +++ b/firmware/l0dable/recvcard.c @@ -24,9 +24,20 @@ uint8_t mac[5] = {1,2,3,2,1}; + struct NRF_CFG config = { + .channel= 81, + .txmac= "\x1\x2\x3\x2\x1", + .nrmacs=1, + .mac0= "\x1\x2\x3\x2\x1", + .maclen ="\x20", + }; void ram(void) { + memset(0,0,0); + nrf_config_set(&config); + + if( sendKeys() ) return; diff --git a/firmware/l0dable/sendcard.c b/firmware/l0dable/sendcard.c index 8bcf110..cf2a3d7 100644 --- a/firmware/l0dable/sendcard.c +++ b/firmware/l0dable/sendcard.c @@ -30,12 +30,23 @@ //#include "lcd/print.h" - +void sendFile(char *filename); uint8_t mac[5] = {1,2,3,2,1}; + struct NRF_CFG config = { + .channel= 81, + .txmac= "\x1\x2\x3\x2\x1", + .nrmacs=1, + .mac0= "\x1\x2\x3\x2\x1", + .maclen ="\x20", + }; void ram(void) { + + nrf_config_set(&config); + + char file[13]; selectFile(file,"TXT"); sendFile(file); @@ -43,7 +54,8 @@ void ram(void) void sendR(uint8_t *rx, uint8_t *ry) { - uint8_t exp[2 + 4*NUMWORDS + 2]; + //uint8_t exp[2 + 4*NUMWORDS + 2]; + uint8_t exp[32]; exp[0] = 'R'; for(int i=0; i<4*NUMWORDS; i++) exp[2+i] = rx[i]; @@ -54,6 +66,7 @@ void sendR(uint8_t *rx, uint8_t *ry) for(int i=0; i<4*NUMWORDS; i++) exp[2+i] = ry[i]; nrf_snd_pkt_crc(32, exp); + delayms(10); } diff --git a/firmware/l0dable/system-include-hack.h b/firmware/l0dable/system-include-hack.h index 4f8f217..f1f77e5 100644 --- a/firmware/l0dable/system-include-hack.h +++ b/firmware/l0dable/system-include-hack.h @@ -1,3 +1,4 @@ size_t strlen(const char *s); -char * strcpy(char * restrict dst, const char * restrict src); -void * memcpy(void *dst, const void *src, size_t len); +char strcpy(char * restrict dst, const char * restrict src); +void memcpy(void *dst, const void *src, size_t len); +void memset(void *s, int c, size_t n); diff --git a/firmware/lcd/render.c b/firmware/lcd/render.c index 2a2f692..69c6d6e 100644 --- a/firmware/lcd/render.c +++ b/firmware/lcd/render.c @@ -432,9 +432,9 @@ int DoInt(int sx, int sy, int num){ #undef mxlen }; +#define MAX 8 int DoIntXn(int sx, int sy, unsigned int num, unsigned int mxlen){ - char s[(mxlen+1)]; - char * o=s; + char s[(MAX+1)]; int len; s[mxlen]=0; for (len=(mxlen-1);len>=0;len--){ @@ -443,8 +443,9 @@ int DoIntXn(int sx, int sy, unsigned int num, unsigned int mxlen){ s[len]+='A'-'9'-1; num/=16; }; - return DoString(sx,sy,o); + return DoString(sx,sy,s); }; +#undef MAX int DoIntX(int sx, int sy, unsigned int num){ return DoIntXn(sx, sy, num, 8);