crashtest-r0ket/firmware/l0dable/minichat.c

198 lines
3.6 KiB
C

/* CCC MSN 0.1b @ CCC 2011 Germany
* Developers:
* - Simpson
* - 0xCC
*
* Base Codes:
* - sign.c (For Mesh Communication)
* - blink.c (For Led Notification)
*
* */
#include <sysinit.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#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);
}
}