Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 1:d42ef49f54df, committed 2019-11-11
- Comitter:
- bwang
- Date:
- Mon Nov 11 03:38:40 2019 +0000
- Parent:
- 0:5d2320fc9350
- Commit message:
- added command line
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CommandProcessor/CommandProcessor.cpp Mon Nov 11 03:38:40 2019 +0000
@@ -0,0 +1,28 @@
+#include "mbed.h"
+#include "CommandProcessor.h"
+
+void processCmd(Serial *pc, char *buf) {
+ char *tokens[10];
+ int len = tokenize(buf, tokens, 10);
+
+ switch (len) {
+ case 1:
+ if (strcmp(tokens[0], "ls") == 0) cmd_ls(pc);
+ else if (strcmp(tokens[0], "defaults") == 0) cmd_defaults(pc);
+ else if (strcmp(tokens[0], "clear") == 0) cmd_clear(pc);
+ else pc->printf("%s\n", "Bad command");
+ break;
+ case 2:
+ if (strcmp(tokens[0], "ls") == 0) cmd_ls2(pc, tokens[1]);
+ else if (strcmp(tokens[0], "get") == 0) cmd_ls2(pc, tokens[1]);
+ else pc->printf("%s\n", "Bad command");
+ break;
+ case 3:
+ if (strcmp(tokens[0], "set") == 0) cmd_set(pc, tokens[1], tokens[2]);
+ else pc->printf("%s\n", "Bad command");
+ break;
+ default:
+ pc->printf("%s\n", "Bad command");
+ break;
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CommandProcessor/CommandProcessor.h Mon Nov 11 03:38:40 2019 +0000 @@ -0,0 +1,22 @@ +#ifndef __COMMAND_PROCESSOR_H +#define __COMMAND_PROCESSOR_H + +#include "mbed.h" + +void processCmd(Serial *pc, char *buf); + +/*---variable loading, setting, and flashing---*/ +void cmd_ls(Serial *pc); +void cmd_ls2(Serial *pc, char *buf); +void cmd_set(Serial *pc, char *buf, char *val); +void cmd_defaults(Serial *pc); + +/*---system commands---*/ +void cmd_clear(Serial *pc); + +/*---internal functions---*/ +int tokenize(char *buf, char **out, int max); +float *checkf(char *s); +int *checkn(char *s); + +#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CommandProcessor/cmd_helpers.cpp Mon Nov 11 03:38:40 2019 +0000
@@ -0,0 +1,31 @@
+#include "mbed.h"
+
+#include "CommandProcessor.h"
+#include "prefs.h"
+
+int tokenize(char *buf, char **out, int max) {
+ char* tok;
+ int k = 0;
+
+ tok = strtok(buf, " ");
+
+ while(tok != NULL && k < max) {
+ out[k] = tok;
+ k++;
+ tok = strtok(NULL, " ");
+ }
+ return k;
+}
+
+#define __check(x) if(strcmp(s, #x) == 0) return &_##x
+#define __check2(x) if (strcmp(s, #x) == 0) return &x
+
+float* checkf(char *s) {
+ return NULL;
+}
+
+int* checkn(char *s) {
+ __check(PULSE_WIDTH);
+ __check(PULSE_FREQ);
+ return NULL;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CommandProcessor/cmd_set_get.cpp Mon Nov 11 03:38:40 2019 +0000
@@ -0,0 +1,42 @@
+#include "mbed.h"
+#include "CommandProcessor.h"
+
+#include "defaults.h"
+#include "prefs.h"
+#include "globals.h"
+
+void cmd_ls(Serial *pc) {
+ DPRINT(PULSE_WIDTH);
+ DPRINT(PULSE_FREQ);
+}
+
+#define ls_specialf(a) if (strcmp(buf, #a) == 0) {pc->printf("%s: %f\n", #a, a); return;}
+#define ls_speciald(a) if (strcmp(buf, #a) == 0) {pc->printf("%s: %d\n", #a, a); return;}
+void cmd_ls2(Serial *pc, char *buf) {
+ float *fptr = checkf(buf);
+ if (fptr != NULL) pc->printf("%s: %f\n", buf, *fptr);
+ int *nptr = NULL;
+ if (fptr == NULL) nptr = checkn(buf);
+ if (nptr != NULL) pc->printf("%s: %d\n", buf, *nptr);
+ if (nptr == NULL && fptr == NULL) pc->printf("%s\n", "No Such Parameter");
+}
+
+void cmd_defaults(Serial *pc) {
+ DEFAULT(PULSE_WIDTH);
+ DEFAULT(PULSE_FREQ);
+ pc->printf("Defaults Loaded\n");
+}
+
+void cmd_set(Serial *pc, char *buf, char *val) {
+ float *fptr = checkf(buf);
+ if (fptr != NULL) *fptr = (float) (atof(val));
+ int *nptr = NULL;
+ if (fptr == NULL) nptr = checkn(buf);
+ if (nptr != NULL) *nptr = (int) (atoi(val));
+ if (nptr != NULL || fptr != NULL) cmd_ls2(pc, buf);
+ if (nptr == NULL && fptr == NULL) pc->printf("%s\n", "No Such Parameter");
+
+ if (strcmp(buf, "PULSE_FREQ") == 0) {
+ out.period_us(1000 / _PULSE_FREQ);
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CommandProcessor/cmd_sys.cpp Mon Nov 11 03:38:40 2019 +0000
@@ -0,0 +1,6 @@
+#include "mbed.h"
+#include "CommandProcessor.h"
+
+void cmd_clear(Serial *pc) {
+ pc->printf("\e[1;1H\e[2J");
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/defaults.h Mon Nov 11 03:38:40 2019 +0000 @@ -0,0 +1,8 @@ +#ifndef __DEFAULTS_H +#define __DEFAULTS_H + +/*---pulsewidth/frequency---*/ +#define PULSE_WIDTH 2 +#define PULSE_FREQ 100 + +#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/globals.h Mon Nov 11 03:38:40 2019 +0000 @@ -0,0 +1,6 @@ +#ifndef __GLOBALS_H +#define __GLOBALS_H + +extern PwmOut out; + +#endif \ No newline at end of file
--- a/main.cpp Mon Nov 11 02:53:52 2019 +0000
+++ b/main.cpp Mon Nov 11 03:38:40 2019 +0000
@@ -1,4 +1,9 @@
#include "mbed.h"
+#include "CommandProcessor.h"
+#include "prefs.h"
+
+float __float_reg[64];
+int __int_reg[64];
DigitalOut led(LED1);
InterruptIn in(PA_10);
@@ -6,8 +11,38 @@
Serial pc(USBTX, USBRX);
+char linebuf[128];
+int index = 0;
+void rxCallback() {
+ while (pc.readable()) {
+ char c = pc.getc();
+ if (c != 127 && c != 8 && c != '\r' && c != '\t') {
+ linebuf[index] = c;
+ if (index < 127) index++;
+ if (c < 128) pc.putc(c);
+ } else if (c == 127 || c == 8) {
+ if (index > 0) {
+ index--;
+ //BS (8) should delete previous char
+ pc.putc(127);
+ }
+ } else if (c == '\r') {
+ linebuf[index] = 0;
+ if (index > 0) {
+ pc.putc(c);
+ processCmd(&pc, linebuf);
+ pc.putc('>');
+ } else {
+ pc.putc(c);
+ pc.putc('>');
+ }
+ index = 0;
+ }
+ }
+}
+
void turn_on() {
- out.pulsewidth_us(2);
+ out.pulsewidth_us(_PULSE_WIDTH);
led = 1;
}
@@ -17,9 +52,15 @@
}
int main() {
+ pc.baud(115200);
+ pc.attach(rxCallback);
pc.printf("PYROFLEX\n");
+ cmd_clear(&pc);
+ cmd_defaults(&pc);
+ pc.printf(">");
+
out.period_us(10);
- out.pulsewidth_us(2);
+ out.pulsewidth_us(_PULSE_WIDTH);
in.rise(turn_on);
in.fall(turn_off);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/prefs.h Mon Nov 11 03:38:40 2019 +0000
@@ -0,0 +1,21 @@
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#include "mbed.h"
+
+/*---pulsewidth/frequency---*/
+#define _PULSE_WIDTH __int_reg[0]
+#define _PULSE_FREQ __int_reg[1]
+
+/*internal variables and macros*/
+
+extern float __float_reg[];
+extern int __int_reg[];
+
+#define DEFAULT(a) _##a = a
+#define FPRINT(a) pc->printf("%s: %f\n", #a, _##a)
+#define DPRINT(a) pc->printf("%s: %d\n", #a, _##a)
+#define FPRINT2(a) pc->printf("%s: %f\n", #a, a);
+#define DPRINT2(a) pc->printf("%s: %d\n", #a, a)
+
+#endif
\ No newline at end of file