Hackaday demo: Signal generator
Dependencies: SDFileSystem mbed
Diff: command.cpp
- Revision:
- 0:8baa10bd07de
- Child:
- 1:c229c3ceb909
diff -r 000000000000 -r 8baa10bd07de command.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/command.cpp Fri Sep 11 02:32:43 2015 +0000 @@ -0,0 +1,134 @@ +#include "mbed.h" +#define _EXTERN_ extern +#include "main.h" +#include "command.h" +#include "sdcard.h" + +#include <cctype> + +// Commands (except SDCARD commands) + +// Print help +void help(void) +{ + pc.printf("Pat Gen V1.0. Buffers size %d\r\n",BUFSIZE); + pc.printf("l=load decimal\r\nx=load hex\r\nf=load floating\r\ng=go\r\nt=timebase\r\nz=zap\r\nd=sd card dir\r\nr=sd read\r\nw=sd write\r\n"); +} + +// Fill memory with one or two values (helper function) +static void zapengine(unsigned int v1, unsigned int v2) +{ + int i; + for (i=0; i<sizeof(buffer)/sizeof(buffer[0]); i++) { + buffer[i]=(i&1)?v1:v2; + } + +} + +// UI for fill memory (zap) +void zap(void) +{ + unsigned int v1,v2; + pc.printf("First value (Esc to quit): "); + if (gethex(&v1)<=0) return; + pc.printf("\r\nSecond value (Enter for none): "); + v2=v1; + if (gethex(&v2)<0) return; + if (ibuf[0]) + sscanf(ibuf,"%x",&v2); + zapengine(v1,v2); + pc.printf("\r\nDone"); +} + + + + +// Load from PC +void load(int decflag) // -1 is float (-1,1), 0 is hex, 1 is dec +{ + unsigned int i, n=0; + int rc; + float f=0.0; + pc.printf("Transfer file now (%d items Esc or ; to quit early)\r\n",sizeof(buffer)/sizeof(buffer[0])); + for (i=0; i<sizeof(buffer)/sizeof(buffer[0]); i++) { + if (decflag<0) { + rc=getfloat(&f); + if (f<-1.0f || f>1.0f) { + printf("Range error %f\r\n",f); + rc=-1; + } else + n=(unsigned int)((f+1.0f)*32767.0f+0.5f); + } else + rc=decflag?getdec(&n):gethex(&n); + if (rc<0) { + pc.printf("\r\nAborted at %d\r\n",i); + return; + } else buffer[i]=n; + } + pc.printf("\r\nDone\r\n"); +} + +// Set time base +void timebase() +{ + float v; + pc.printf("Time/tick in uS: "); + if (getfloat(&v)>0) timebaseus=v; +} + + + +// Command parser +void command(void) +{ + char cmd=' '; + zapengine(0xaaaa,0x5555); + help(); + while (1) { + pc.printf("\r\n? "); + // commands: ? = help, l=load CSV, g=go, t=set timebase + cmd=getachar(); + cmd=tolower(cmd); + pc.printf("\r\n"); + switch (cmd) { + case '?': + help(); + break; + case 'f': + load(-1); + break; + case 'l': + load(1); + break; + case 'x': + load(0); + break; + case 'g': + break; + case 't': + timebase(); + break; + case 'z': + zap(); + break; + case 'd': + dir(); + break; + case 'r': + sdread(); + break; + case 'w': + sdwrite(); + break; + case '\r': + break; + case '\n': + break; + default: + help(); + } + if (cmd=='g') break; // return to caller + } +} + +