Hackaday demo: Signal generator
Dependencies: SDFileSystem mbed
command.cpp
- Committer:
- wd5gnr
- Date:
- 2015-09-11
- Revision:
- 0:8baa10bd07de
- Child:
- 1:c229c3ceb909
File content as of revision 0:8baa10bd07de:
#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 } }