library to modify and read program variable in runtime from a serial console. You can reset as well the mbed from the console without pushing buttons. Handy for debugging from the online compiler as you can change the behavior of the program without need to recompile each time.

Committer:
julmbed
Date:
Tue Aug 26 09:09:50 2014 +0000
Revision:
14:6cbe8366d587
Parent:
13:e1ba5bf9e51f
Child:
15:a794a7ef6170
added beta comment

Who changed what in which revision?

UserRevisionLine numberNew contents of line
julmbed 0:85afbf3c9fad 1 #ifndef VARSTORE_H
julmbed 0:85afbf3c9fad 2 #define VARSTORE_H
julmbed 0:85afbf3c9fad 3 #include "mbed.h"
julmbed 0:85afbf3c9fad 4 #include "VarItems.h"
julmbed 0:85afbf3c9fad 5
julmbed 3:cf43e6de918e 6 #define STR_OK ""
julmbed 0:85afbf3c9fad 7
julmbed 14:6cbe8366d587 8 /** VarStore Class beta !!!!!!!
julmbed 13:e1ba5bf9e51f 9 * Used for reading/modifying program variables
julmbed 13:e1ba5bf9e51f 10 * from the console at runtime. Helpful for
julmbed 13:e1ba5bf9e51f 11 * debugging.
julmbed 13:e1ba5bf9e51f 12 * It has a facility as well to reset the mbed
julmbed 13:e1ba5bf9e51f 13 * from the serial console without pressing
julmbed 13:e1ba5bf9e51f 14 * any button.
julmbed 13:e1ba5bf9e51f 15 * It does not block the serial/input channel
julmbed 13:e1ba5bf9e51f 16 * in case it is needed for other stuff
julmbed 13:e1ba5bf9e51f 17 *
julmbed 13:e1ba5bf9e51f 18 * Example:
julmbed 13:e1ba5bf9e51f 19 * @code
julmbed 13:e1ba5bf9e51f 20
julmbed 13:e1ba5bf9e51f 21 * #include "mbed.h"
julmbed 13:e1ba5bf9e51f 22 * #include "rtos.h"
julmbed 13:e1ba5bf9e51f 23 * #include "VarStore.h"
julmbed 13:e1ba5bf9e51f 24 *
julmbed 13:e1ba5bf9e51f 25 * #include <RawSerial.h>
julmbed 13:e1ba5bf9e51f 26 *
julmbed 13:e1ba5bf9e51f 27 * RawSerial pc(USBTX,USBRX); // Be aware !!!! need rawserial. No printf for you anymore !!
julmbed 13:e1ba5bf9e51f 28 * // no malloc nither as this works in ISR
julmbed 13:e1ba5bf9e51f 29 *
julmbed 13:e1ba5bf9e51f 30 * VarStore Store(&pc,20); // create storage for 20 variables/arrays attach to serial pc
julmbed 13:e1ba5bf9e51f 31 *
julmbed 13:e1ba5bf9e51f 32 * DigitalOut led1(LED1);
julmbed 13:e1ba5bf9e51f 33 * DigitalOut led2(LED2);
julmbed 13:e1ba5bf9e51f 34 *
julmbed 13:e1ba5bf9e51f 35 * void led2_thread(void const *args) {
julmbed 13:e1ba5bf9e51f 36 *
julmbed 13:e1ba5bf9e51f 37 * int wait2=1000;
julmbed 13:e1ba5bf9e51f 38 * Store.Load("wait2",&wait2,T_int); // load variable wait2 in Store
julmbed 13:e1ba5bf9e51f 39 *
julmbed 13:e1ba5bf9e51f 40 * while (true) {
julmbed 13:e1ba5bf9e51f 41 * led2 = !led2;
julmbed 13:e1ba5bf9e51f 42 * Thread::wait(wait2); // remember, no WAIT, STOPS CPU FROM RUNNING WHOLE PROGRAM.
julmbed 13:e1ba5bf9e51f 43 // use Thread::wait to stop just your path of execution.
julmbed 13:e1ba5bf9e51f 44 * }
julmbed 13:e1ba5bf9e51f 45 * }
julmbed 13:e1ba5bf9e51f 46 *
julmbed 13:e1ba5bf9e51f 47 * int main() {
julmbed 13:e1ba5bf9e51f 48 *
julmbed 13:e1ba5bf9e51f 49 * int wait1=500;
julmbed 13:e1ba5bf9e51f 50 * Store.Load("wait1",&wait1,T_int); // Load variable wait1 in Store
julmbed 13:e1ba5bf9e51f 51 * Thread VS_thread(VarStore::Worker,&Store,osPriorityNormal,DEFAULT_STACK_SIZE,NULL); // launch VarStore Thread
julmbed 13:e1ba5bf9e51f 52 *
julmbed 13:e1ba5bf9e51f 53 * Thread thread(led2_thread);
julmbed 13:e1ba5bf9e51f 54 *
julmbed 13:e1ba5bf9e51f 55 * while (true) {
julmbed 13:e1ba5bf9e51f 56 * led1 = !led1;
julmbed 13:e1ba5bf9e51f 57 * Thread::wait(wait1); // remember, no WAIT, STOPS CPU FROM RUNNING WHOLE PROGRAM.
julmbed 13:e1ba5bf9e51f 58 * // use Thread::wait to stop just your path of execution.
julmbed 13:e1ba5bf9e51f 59 * }
julmbed 13:e1ba5bf9e51f 60 * }
julmbed 13:e1ba5bf9e51f 61 *
julmbed 13:e1ba5bf9e51f 62 * @endcode
julmbed 13:e1ba5bf9e51f 63 *
julmbed 13:e1ba5bf9e51f 64 *
julmbed 13:e1ba5bf9e51f 65 *
julmbed 13:e1ba5bf9e51f 66 *
julmbed 13:e1ba5bf9e51f 67 */
julmbed 0:85afbf3c9fad 68 class VarStore
julmbed 0:85afbf3c9fad 69 {
julmbed 7:fafe81a95c08 70
julmbed 7:fafe81a95c08 71
julmbed 10:34d368966675 72 // friend void Worker2();
julmbed 0:85afbf3c9fad 73 public:
julmbed 13:e1ba5bf9e51f 74 /*
julmbed 13:e1ba5bf9e51f 75 * Constructor
julmbed 13:e1ba5bf9e51f 76 */
julmbed 12:e9c8d2d9ac71 77 VarStore( RawSerial *ser, int sz);
julmbed 13:e1ba5bf9e51f 78
julmbed 13:e1ba5bf9e51f 79 /*
julmbed 13:e1ba5bf9e51f 80 * destr
julmbed 13:e1ba5bf9e51f 81 */
julmbed 0:85afbf3c9fad 82 virtual ~VarStore();
julmbed 13:e1ba5bf9e51f 83
julmbed 13:e1ba5bf9e51f 84 /* assigns (a) value(s) to a variable or array
julmbed 13:e1ba5bf9e51f 85 */
julmbed 2:a59207652720 86 char * Set(char *Input);
julmbed 0:85afbf3c9fad 87
julmbed 13:e1ba5bf9e51f 88 /*Get contents of a variable as a string
julmbed 13:e1ba5bf9e51f 89 */
julmbed 0:85afbf3c9fad 90 char* Get(char *Name);
julmbed 0:85afbf3c9fad 91
julmbed 13:e1ba5bf9e51f 92 /** Load a variable on VarStore
julmbed 2:a59207652720 93 *
julmbed 13:e1ba5bf9e51f 94 * @param Name string that will be used to query/set the value of the variable/array
julmbed 13:e1ba5bf9e51f 95 * @param VarPtr pointer to variable
julmbed 13:e1ba5bf9e51f 96 * @param VarType enumerated type indicating int/float ( only supported currently) enum VarTypes {T_int,T_float};
julmbed 13:e1ba5bf9e51f 97 *
julmbed 13:e1ba5bf9e51f 98 * @returns ERR on error / NULL on success
julmbed 13:e1ba5bf9e51f 99 */
julmbed 0:85afbf3c9fad 100 int Load(char *Name, void *VarPtr,VarTypes VarType );
julmbed 2:a59207652720 101
julmbed 13:e1ba5bf9e51f 102 /** Load an array on VarStore
julmbed 2:a59207652720 103 *
julmbed 13:e1ba5bf9e51f 104 * @param Name string that will be used to query/set the value of the variable/array
julmbed 13:e1ba5bf9e51f 105 * @param VarPtr pointer to base of array
julmbed 13:e1ba5bf9e51f 106 * @param VarType enumerated type indicating int/float ( only supported currently) enum VarTypes {T_int,T_float};
julmbed 13:e1ba5bf9e51f 107 * @param Size number of elements in the array
julmbed 13:e1ba5bf9e51f 108 *
julmbed 13:e1ba5bf9e51f 109 * @returns ERR on error / NULL on success
julmbed 13:e1ba5bf9e51f 110 */
julmbed 0:85afbf3c9fad 111 int Load(char *Name, void *VarPtr,VarTypes VarType, int Size );
julmbed 0:85afbf3c9fad 112
julmbed 13:e1ba5bf9e51f 113
julmbed 13:e1ba5bf9e51f 114
julmbed 13:e1ba5bf9e51f 115 /** Thread that will manage the concole interaction. Main role is to remain sleeping
julmbed 13:e1ba5bf9e51f 116 * and only awakening to fire worker2 to deal with console input
julmbed 2:a59207652720 117 *
julmbed 13:e1ba5bf9e51f 118 * @param args pointer to the VarStore Object that will be managing.
julmbed 13:e1ba5bf9e51f 119 *
julmbed 13:e1ba5bf9e51f 120 * @returns ERR on error / NULL on success
julmbed 13:e1ba5bf9e51f 121 */
julmbed 13:e1ba5bf9e51f 122 static void Worker(void const *args);
julmbed 6:9848fdaf2ad9 123
julmbed 0:85afbf3c9fad 124
julmbed 0:85afbf3c9fad 125 protected:
julmbed 2:a59207652720 126
julmbed 0:85afbf3c9fad 127 private:
julmbed 13:e1ba5bf9e51f 128 /* Get variable item by name
julmbed 13:e1ba5bf9e51f 129 */
julmbed 0:85afbf3c9fad 130 VarItem *GetVar(char *name);
julmbed 0:85afbf3c9fad 131
julmbed 13:e1ba5bf9e51f 132 /* do stuff with console input
julmbed 13:e1ba5bf9e51f 133 */
julmbed 7:fafe81a95c08 134 char *Do(char *str);
julmbed 5:47b67a7c0bb7 135
julmbed 13:e1ba5bf9e51f 136 /* manages console input
julmbed 13:e1ba5bf9e51f 137 */
julmbed 10:34d368966675 138 static void Worker2();
julmbed 5:47b67a7c0bb7 139
julmbed 13:e1ba5bf9e51f 140
julmbed 12:e9c8d2d9ac71 141 VarItem *Store;
julmbed 12:e9c8d2d9ac71 142 int sz; // number of varibales to store / array size
julmbed 0:85afbf3c9fad 143 int VarCounter;
julmbed 12:e9c8d2d9ac71 144 RawSerial *pc;
julmbed 12:e9c8d2d9ac71 145
julmbed 6:9848fdaf2ad9 146 static VarStore *MyThis; // used by the workers reading the terminal
julmbed 13:e1ba5bf9e51f 147 // instantiation via a static fucntion so need to record
julmbed 13:e1ba5bf9e51f 148 // who am I
julmbed 0:85afbf3c9fad 149 };
julmbed 0:85afbf3c9fad 150
julmbed 7:fafe81a95c08 151
julmbed 6:9848fdaf2ad9 152
julmbed 0:85afbf3c9fad 153 #endif // VARSTORE_H