julian C / VarStore
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers VarStore.h Source File

VarStore.h

00001 #ifndef VARSTORE_H
00002 #define VARSTORE_H
00003 #include "mbed.h"
00004 #include "VarItems.h"
00005 
00006 #define STR_OK ""
00007 
00008 /** VarStore Class beta !!!!!!!
00009  *  Used for reading/modifying program variables from the console at runtime.
00010  *   Helpful for   debugging
00011  *  It has a facility as well to reset the mbed
00012  *  from the serial console without pressing  
00013  *  any button.
00014  *  It does not block the serial/input channel
00015  *  in case it is needed for other stuff
00016  *  
00017  *  From the console ( be aware that if you do not have local echo activated you wil not see what you tye. Commands are 
00018  *  triggered at CR
00019  *
00020  *  s:var:value               -> sets the value of var to value at runtime
00021  *  d:var                     -> dump content of var
00022  *  s:arr:val1,val2,val3      -> set first three values of arr to val1,val2,val3
00023  *  r                         -> reset mbed... and reload program
00024  *  w:milisecs                -> (beta) release the console input for your program for a period of time7
00025  *
00026  *  I do have in a note pad sets of commands, e.g. dumps of variables I want to check and then I just 
00027  *  copy and paste in to the terminal so see all of them at once or repeteadly show them.
00028  *  
00029  * hope it helps.
00030  *  
00031  * Example:
00032  * @code
00033  *
00034  * #include "mbed.h"
00035  * #include "rtos.h"
00036  * #include "VarStore.h"
00037  *
00038  * #include <RawSerial.h>
00039  *
00040  * RawSerial  pc(USBTX,USBRX);  // Be aware !!!! need rawserial. No printf for you anymore !! 
00041  *                              // no malloc nither as this works in ISR
00042  *
00043  * VarStore Store(&pc,20);      // create storage for 20 variables/arrays attach to serial pc
00044  * 
00045  * DigitalOut led1(LED1);
00046  * DigitalOut led2(LED2);
00047  * 
00048  * void led2_thread(void const *args) {
00049  *    
00050  *    int wait2=1000;
00051  *    Store.Load("wait2",&wait2,T_int);   // load variable wait2 in Store
00052  *    
00053  *    while (true) {
00054  *        led2 = !led2;
00055  *        Thread::wait(wait2);  // remember, no WAIT, STOPS CPU FROM RUNNING WHOLE PROGRAM.
00056  *                               // use Thread::wait to stop just your path of execution.
00057  *    }
00058  * }
00059  * 
00060  * int main() {
00061  *    
00062  *    int wait1=500;
00063  *    Store.Load("wait1",&wait1,T_int);  // Load variable wait1 in Store
00064  *    Thread VS_thread(VarStore::Worker,&Store,osPriorityNormal,DEFAULT_STACK_SIZE,NULL); // launch VarStore Thread
00065  *    
00066  *    Thread thread(led2_thread);
00067  *    
00068  *    while (true) {
00069  *        led1 = !led1;
00070  *        Thread::wait(wait1); // remember, no WAIT, STOPS CPU FROM RUNNING WHOLE PROGRAM.
00071  *                              // use Thread::wait to stop just your path of execution.
00072  *    }
00073  * }
00074  *
00075  * @endcode
00076  *
00077  *
00078  *
00079  *
00080  */
00081 class VarStore
00082 {
00083     
00084  
00085 // friend    void Worker2();
00086 public:
00087     /*
00088     * Constructor        
00089     */
00090     VarStore(   RawSerial *ser, int sz);
00091     
00092     /*
00093     * destr        
00094     */
00095     virtual ~VarStore();
00096     
00097     /* assigns (a) value(s) to a variable or array        
00098     */
00099     char * Set(char *Input);
00100 
00101     /*Get contents of a variable as a string
00102     */
00103     char*  Get(char *Name);
00104 
00105     /** Load a variable on VarStore
00106     *
00107     * @param Name string that will be used to query/set the value of the variable/array
00108     * @param VarPtr pointer to variable 
00109     * @param VarType enumerated type indicating int/float ( only supported currently) enum VarTypes {T_int,T_float};
00110     *
00111     * @returns ERR on error / NULL on success
00112     */
00113     int Load(char *Name, void *VarPtr,VarTypes VarType );
00114 
00115     /** Load an array on VarStore
00116     *
00117     * @param Name string that will be used to query/set the value of the variable/array
00118     * @param VarPtr pointer to base of array
00119     * @param VarType enumerated type indicating int/float ( only supported currently) enum VarTypes {T_int,T_float};
00120     * @param Size number of elements in the array
00121     *
00122     * @returns ERR on error / NULL on success
00123     */
00124     int Load(char *Name, void *VarPtr,VarTypes VarType, int Size );
00125 
00126 
00127 
00128    /** Thread that will manage the console interaction. Main role is to remain sleeping 
00129     * and only awakening to fire worker2 to deal with console input
00130     *
00131     * @param args pointer to the VarStore Object that will be managing.
00132     *
00133     * @returns ERR on error / NULL on success
00134     */
00135     static  void Worker(void const *args);
00136    
00137 
00138 protected:
00139 
00140 private:
00141     /* Get variable item by name
00142     */
00143     VarItem *GetVar(char *name);
00144 
00145     /* do stuff with console input
00146     */
00147     char  *Do(char *str);
00148     
00149     /* manages console input
00150     */
00151     static void Worker2();
00152     
00153    
00154     VarItem *Store;
00155     int sz;         // number of varibales to store / array size
00156     int VarCounter;
00157     RawSerial  *pc;
00158 
00159     static VarStore *MyThis;   // used by the workers reading the terminal
00160                                // instantiation via a static fucntion so need to record
00161                                // who am I 
00162 };
00163 
00164     
00165 
00166 #endif // VARSTORE_H