From bfac51e4ff32f7e4016fb841b20651922697b7ea Mon Sep 17 00:00:00 2001 From: Stefan `Sec` Zehl Date: Fri, 12 Aug 2011 22:24:37 +0200 Subject: [PATCH] Mini short-range chat app. --- firmware/l0dable/minichat.c | 197 ++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 firmware/l0dable/minichat.c diff --git a/firmware/l0dable/minichat.c b/firmware/l0dable/minichat.c new file mode 100644 index 0000000..46e395a --- /dev/null +++ b/firmware/l0dable/minichat.c @@ -0,0 +1,197 @@ +/* CCC MSN 0.1b @ CCC 2011 Germany + * Developers: + * - Simpson + * - 0xCC + * + * Base Codes: + * - sign.c (For Mesh Communication) + * - blink.c (For Led Notification) + * + * */ +#include +#include +#include +#include + +#include "basic/basic.h" +#include "basic/config.h" + +#include "funk/nrf24l01p.h" +#include "funk/rftransfer.h" + +#include "lcd/render.h" +#include "lcd/print.h" + +#include "usetable.h" + +/*Global Communication Config*/ +uint8_t mac[5] = {1,2,3,5,5}; +struct NRF_CFG config = +{ + .channel= 81, + .txmac= "\x1\x2\x3\x5\x5", + .nrmacs=1, + .mac0= "\x1\x2\x3\x5\x5", + .maclen ="\x20", +}; + +/*Possible Messages*/ +char msgs[5][20]={" Hi There!"," At Kourou"," At Baikonur","Party Hard!","Like a Boss!"}; + +void initDisplay(void); +void initMesh(void); +void waitMsg(void); +void blink(void); + +/*Main Loop*/ +void ram(void) +{ + initDisplay(); + uint8_t key; + do + { + key = getInput(); + if(key == BTN_DOWN) + waitMsg(); + else if (key == BTN_UP) + initMesh(); + } while(key != BTN_ENTER); +} + +/*Message Receiver*/ +void waitMsg() +{ + uint8_t key; + unsigned char buf[32]; + char sender_nick[10]; + int n,i; + int index=0; + int rcv =0; + int try=0; + do + { + key = getInput(); + if(1) + { + nrf_config_set(&config); + n = nrf_rcv_pkt_time(100,32,buf); + getInputWaitTimeout(100); + if(n == 32) + { + index=buf[0]; + for(i=0;i<10;i++) + sender_nick[i]=buf[i+1]; + lcdClear(); + lcdPrintln(""); + lcdPrintln("CCC MSN 0.1b"); + lcdPrintln("---------------"); + lcdPrintln(msgs[index]); + lcdPrintln(""); + lcdPrintln("Received"); + lcdPrintln(""); + lcdPrintln("_______________"); + lcdPrintln(sender_nick); + lcdRefresh(); + blink(); + rcv=1; + try=0; + } else if(rcv) + { + lcdClear(); + lcdPrintln(""); + lcdPrintln("CCC MSN 0.1b"); + lcdPrintln("-----------------"); + lcdPrintln("Waiting..."); + lcdPrint("Try "); + lcdPrintln(IntToStr(try,5,0)); + lcdPrintln(""); + lcdPrintln(msgs[index]); + lcdPrintln("_______________"); + lcdPrintln(sender_nick); + lcdRefresh(); + } + try++; + } + if(!rcv) + { + lcdClear(); + lcdPrintln(""); + lcdPrintln("CCC MSN 0.1b"); + lcdPrintln("-----------------"); + lcdPrintln("Waiting..."); + lcdPrintln(""); + lcdPrint("Try "); + lcdPrintln(IntToStr(try,5,0)); + lcdPrintln(""); + lcdPrintln("_______________"); + lcdPrintln("W8 Users Auto"); + lcdRefresh(); + } + }while(key != BTN_ENTER); + initDisplay(); +} + +/*Starter*/ +void initDisplay(void) +{ + lcdClear(); + lcdPrintln(""); + lcdPrintln("CCC MSN 0.1b"); + lcdNl(); + lcdPrintln("Commands:"); + lcdPrintln("UP/Down"); + lcdPrintln("Press to Exit!"); + lcdPrintln(""); + lcdPrintln("_______________"); + lcdPrintln(GLOBAL(nickname)); + lcdRefresh(); +} + +/*Start to Talk*/ +void initMesh(void) +{ + char buf[32]; + uint8_t key; + int index=0; + int trys=0; + int i; + do + { + key = getInput(); + if(key == BTN_RIGHT) + index=(index+1)%5; + if(key == BTN_UP) + { + memset(buf,0,32); + buf[0]=index; + for(i=0;i<11;i++) + buf[i+1]=GLOBAL(nickname)[i]; + nrf_config_set(&config); + nrf_snd_pkt_crc(32,(uint8_t *)buf); + trys=trys+1; + } + lcdClear(); + lcdPrintln(""); + lcdPrintln("CCC MSN 0.1b"); + lcdPrintln("-----------------"); + lcdPrintln(msgs[index]); + lcdPrintln(""); + lcdPrint("Try "); + lcdPrintln(IntToStr(trys,5,0)); + lcdPrintln(""); + lcdPrintln("_______________"); + lcdPrintln("UP To Send Msg"); + lcdRefresh(); + } while(key != BTN_ENTER); + initDisplay(); +} + +/*Led Blink*/ +void blink(void) +{ + for (int x=0;x<20;x++) + { + gpioSetValue (RB_LED1, x%2); + delayms(50); + } +}