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.
VarStore.cpp@0:85afbf3c9fad, 2014-08-25 (annotated)
- Committer:
- julmbed
- Date:
- Mon Aug 25 08:43:23 2014 +0000
- Revision:
- 0:85afbf3c9fad
- Child:
- 1:bbd6b84fc908
version inicial de la librer?a VarStore
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
julmbed | 0:85afbf3c9fad | 1 | |
julmbed | 0:85afbf3c9fad | 2 | #include <string.h> |
julmbed | 0:85afbf3c9fad | 3 | #include <stdio.h> |
julmbed | 0:85afbf3c9fad | 4 | #include "mbed.h" |
julmbed | 0:85afbf3c9fad | 5 | #include "rtos.h" |
julmbed | 0:85afbf3c9fad | 6 | |
julmbed | 0:85afbf3c9fad | 7 | #include "VarStore.h" |
julmbed | 0:85afbf3c9fad | 8 | |
julmbed | 0:85afbf3c9fad | 9 | #define CI_SZ 100 |
julmbed | 0:85afbf3c9fad | 10 | |
julmbed | 0:85afbf3c9fad | 11 | /******************************* |
julmbed | 0:85afbf3c9fad | 12 | * |
julmbed | 0:85afbf3c9fad | 13 | * |
julmbed | 0:85afbf3c9fad | 14 | ********************************/ |
julmbed | 0:85afbf3c9fad | 15 | VarStore::VarStore(Serial *ser) |
julmbed | 0:85afbf3c9fad | 16 | { |
julmbed | 0:85afbf3c9fad | 17 | VarCounter=0; |
julmbed | 0:85afbf3c9fad | 18 | this->pc=ser; |
julmbed | 0:85afbf3c9fad | 19 | } |
julmbed | 0:85afbf3c9fad | 20 | |
julmbed | 0:85afbf3c9fad | 21 | /******************************* |
julmbed | 0:85afbf3c9fad | 22 | * |
julmbed | 0:85afbf3c9fad | 23 | * |
julmbed | 0:85afbf3c9fad | 24 | ********************************/ |
julmbed | 0:85afbf3c9fad | 25 | |
julmbed | 0:85afbf3c9fad | 26 | VarStore::~VarStore() |
julmbed | 0:85afbf3c9fad | 27 | { |
julmbed | 0:85afbf3c9fad | 28 | //dtor |
julmbed | 0:85afbf3c9fad | 29 | } |
julmbed | 0:85afbf3c9fad | 30 | |
julmbed | 0:85afbf3c9fad | 31 | /******************************* |
julmbed | 0:85afbf3c9fad | 32 | * |
julmbed | 0:85afbf3c9fad | 33 | * |
julmbed | 0:85afbf3c9fad | 34 | ********************************/ |
julmbed | 0:85afbf3c9fad | 35 | |
julmbed | 0:85afbf3c9fad | 36 | int VarStore::Set(char *Input) |
julmbed | 0:85afbf3c9fad | 37 | { |
julmbed | 0:85afbf3c9fad | 38 | VarItem *V; |
julmbed | 0:85afbf3c9fad | 39 | char *Name; |
julmbed | 0:85afbf3c9fad | 40 | |
julmbed | 0:85afbf3c9fad | 41 | if(Input [0] == 's') { |
julmbed | 0:85afbf3c9fad | 42 | strtok(Input,":"); |
julmbed | 0:85afbf3c9fad | 43 | Name=strtok(NULL,":"); |
julmbed | 0:85afbf3c9fad | 44 | if((V=GetVar(Name)) != NULL) |
julmbed | 0:85afbf3c9fad | 45 | return V->SetVal(strtok(NULL,":")); |
julmbed | 0:85afbf3c9fad | 46 | } |
julmbed | 0:85afbf3c9fad | 47 | return ERR; |
julmbed | 0:85afbf3c9fad | 48 | } |
julmbed | 0:85afbf3c9fad | 49 | |
julmbed | 0:85afbf3c9fad | 50 | /******************************* |
julmbed | 0:85afbf3c9fad | 51 | * |
julmbed | 0:85afbf3c9fad | 52 | * |
julmbed | 0:85afbf3c9fad | 53 | ********************************/ |
julmbed | 0:85afbf3c9fad | 54 | |
julmbed | 0:85afbf3c9fad | 55 | |
julmbed | 0:85afbf3c9fad | 56 | int VarStore::Load(char *Name, void *VarPtr,VarTypes VarType ) |
julmbed | 0:85afbf3c9fad | 57 | { |
julmbed | 0:85afbf3c9fad | 58 | return Load(Name, VarPtr,VarType,0 ); |
julmbed | 0:85afbf3c9fad | 59 | } |
julmbed | 0:85afbf3c9fad | 60 | |
julmbed | 0:85afbf3c9fad | 61 | /******************************* |
julmbed | 0:85afbf3c9fad | 62 | * |
julmbed | 0:85afbf3c9fad | 63 | * |
julmbed | 0:85afbf3c9fad | 64 | ********************************/ |
julmbed | 0:85afbf3c9fad | 65 | |
julmbed | 0:85afbf3c9fad | 66 | int VarStore::Load(char *Name, void *VarPtr,VarTypes VarType, int Size ) |
julmbed | 0:85afbf3c9fad | 67 | { |
julmbed | 0:85afbf3c9fad | 68 | |
julmbed | 0:85afbf3c9fad | 69 | if(GetVar(Name) ==NULL) { |
julmbed | 0:85afbf3c9fad | 70 | if(VarCounter < SZ) { |
julmbed | 0:85afbf3c9fad | 71 | Store[VarCounter].SetVar(VarType,VarPtr); |
julmbed | 0:85afbf3c9fad | 72 | Store[VarCounter].SetVarName(Name); |
julmbed | 0:85afbf3c9fad | 73 | Store[VarCounter].SetVarArraySize(Size); |
julmbed | 0:85afbf3c9fad | 74 | VarCounter++; |
julmbed | 0:85afbf3c9fad | 75 | return 0; |
julmbed | 0:85afbf3c9fad | 76 | } |
julmbed | 0:85afbf3c9fad | 77 | } |
julmbed | 0:85afbf3c9fad | 78 | return ERR; |
julmbed | 0:85afbf3c9fad | 79 | } |
julmbed | 0:85afbf3c9fad | 80 | |
julmbed | 0:85afbf3c9fad | 81 | /******************************* |
julmbed | 0:85afbf3c9fad | 82 | * |
julmbed | 0:85afbf3c9fad | 83 | * |
julmbed | 0:85afbf3c9fad | 84 | ********************************/ |
julmbed | 0:85afbf3c9fad | 85 | |
julmbed | 0:85afbf3c9fad | 86 | VarItem *VarStore::GetVar(char *Name) |
julmbed | 0:85afbf3c9fad | 87 | { |
julmbed | 0:85afbf3c9fad | 88 | |
julmbed | 0:85afbf3c9fad | 89 | for (int i=0; i<SZ; i++) |
julmbed | 0:85afbf3c9fad | 90 | if((strcmp(Name,Store[i].GetVarName()))==0) |
julmbed | 0:85afbf3c9fad | 91 | return &Store[i]; |
julmbed | 0:85afbf3c9fad | 92 | |
julmbed | 0:85afbf3c9fad | 93 | return NULL; |
julmbed | 0:85afbf3c9fad | 94 | } |
julmbed | 0:85afbf3c9fad | 95 | |
julmbed | 0:85afbf3c9fad | 96 | char* VarStore::Get(char *Name) |
julmbed | 0:85afbf3c9fad | 97 | { |
julmbed | 0:85afbf3c9fad | 98 | |
julmbed | 0:85afbf3c9fad | 99 | VarItem *V; |
julmbed | 0:85afbf3c9fad | 100 | |
julmbed | 0:85afbf3c9fad | 101 | V=GetVar(Name); |
julmbed | 0:85afbf3c9fad | 102 | if(V!=NULL) return V->Dump(); |
julmbed | 0:85afbf3c9fad | 103 | else |
julmbed | 0:85afbf3c9fad | 104 | return NULL; |
julmbed | 0:85afbf3c9fad | 105 | } |
julmbed | 0:85afbf3c9fad | 106 | |
julmbed | 0:85afbf3c9fad | 107 | /******************************* |
julmbed | 0:85afbf3c9fad | 108 | * |
julmbed | 0:85afbf3c9fad | 109 | * |
julmbed | 0:85afbf3c9fad | 110 | ********************************/ |
julmbed | 0:85afbf3c9fad | 111 | |
julmbed | 0:85afbf3c9fad | 112 | void VarStore::Worker(void const *args) |
julmbed | 0:85afbf3c9fad | 113 | { |
julmbed | 0:85afbf3c9fad | 114 | VarStore *MyThis=(VarStore *)args; |
julmbed | 0:85afbf3c9fad | 115 | char c; |
julmbed | 0:85afbf3c9fad | 116 | int ret=0,ci_counter=0; |
julmbed | 0:85afbf3c9fad | 117 | char Cs[CI_SZ]; |
julmbed | 0:85afbf3c9fad | 118 | |
julmbed | 0:85afbf3c9fad | 119 | for(int i=0; i<CI_SZ; i++) Cs[i]='\0'; |
julmbed | 0:85afbf3c9fad | 120 | |
julmbed | 0:85afbf3c9fad | 121 | MyThis->pc->printf(" hi worker\n"); |
julmbed | 0:85afbf3c9fad | 122 | while (1) { |
julmbed | 0:85afbf3c9fad | 123 | if(MyThis->pc->readable()) { |
julmbed | 0:85afbf3c9fad | 124 | c=MyThis->pc->getc(); |
julmbed | 0:85afbf3c9fad | 125 | // MyThis->pc->printf(" leo %c\n",c); |
julmbed | 0:85afbf3c9fad | 126 | if(ci_counter >= CI_SZ-1) { // RESET |
julmbed | 0:85afbf3c9fad | 127 | ci_counter=0; |
julmbed | 0:85afbf3c9fad | 128 | Cs[0]='\0'; |
julmbed | 0:85afbf3c9fad | 129 | MyThis->pc->printf(" reset\n"); |
julmbed | 0:85afbf3c9fad | 130 | |
julmbed | 0:85afbf3c9fad | 131 | } else { |
julmbed | 0:85afbf3c9fad | 132 | if(c=='\r') { |
julmbed | 0:85afbf3c9fad | 133 | Cs[ci_counter]='\0'; |
julmbed | 0:85afbf3c9fad | 134 | MyThis->pc->printf(" CI -%s- \n",Cs); |
julmbed | 0:85afbf3c9fad | 135 | ret=MyThis->Set(Cs); |
julmbed | 0:85afbf3c9fad | 136 | ci_counter=0; |
julmbed | 0:85afbf3c9fad | 137 | Cs[0]='\0'; |
julmbed | 0:85afbf3c9fad | 138 | MyThis->pc->printf(" set variable (%d)\n",ret); |
julmbed | 0:85afbf3c9fad | 139 | MyThis->pc->printf(" offset -%s- \n",MyThis->Get("offset")); |
julmbed | 0:85afbf3c9fad | 140 | } else { |
julmbed | 0:85afbf3c9fad | 141 | MyThis->pc->printf(" CI -%s- -%c- -%d- \n",Cs,c,ci_counter); |
julmbed | 0:85afbf3c9fad | 142 | |
julmbed | 0:85afbf3c9fad | 143 | Cs[ci_counter]=c; |
julmbed | 0:85afbf3c9fad | 144 | ci_counter++; |
julmbed | 0:85afbf3c9fad | 145 | MyThis->pc->printf(" parcial CI -%s- -%c-(%c) -%d- \n",Cs,c,Cs[ci_counter],ci_counter); |
julmbed | 0:85afbf3c9fad | 146 | } |
julmbed | 0:85afbf3c9fad | 147 | } |
julmbed | 0:85afbf3c9fad | 148 | } |
julmbed | 0:85afbf3c9fad | 149 | |
julmbed | 0:85afbf3c9fad | 150 | if(ret==ERR) { |
julmbed | 0:85afbf3c9fad | 151 | Thread::wait(100); |
julmbed | 0:85afbf3c9fad | 152 | MyThis->pc->printf(" error setting var \n"); |
julmbed | 0:85afbf3c9fad | 153 | ret=0; |
julmbed | 0:85afbf3c9fad | 154 | } |
julmbed | 0:85afbf3c9fad | 155 | Thread::wait(100); |
julmbed | 0:85afbf3c9fad | 156 | } // While |
julmbed | 0:85afbf3c9fad | 157 | } |
julmbed | 0:85afbf3c9fad | 158 | |
julmbed | 0:85afbf3c9fad | 159 | /******************************* |
julmbed | 0:85afbf3c9fad | 160 | * |
julmbed | 0:85afbf3c9fad | 161 | * |
julmbed | 0:85afbf3c9fad | 162 | ********************************/ |
julmbed | 0:85afbf3c9fad | 163 |