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:
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?

UserRevisionLine numberNew 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