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.
VarItems.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 | #include "VarItems.h" |
julmbed | 0:85afbf3c9fad | 2 | #include <string.h> |
julmbed | 0:85afbf3c9fad | 3 | #include <stdlib.h> |
julmbed | 0:85afbf3c9fad | 4 | #include <stdio.h> |
julmbed | 0:85afbf3c9fad | 5 | |
julmbed | 0:85afbf3c9fad | 6 | VarItem::VarItem() |
julmbed | 0:85afbf3c9fad | 7 | { |
julmbed | 0:85afbf3c9fad | 8 | VarName[0]='\0'; |
julmbed | 0:85afbf3c9fad | 9 | |
julmbed | 0:85afbf3c9fad | 10 | ValInt=NULL; |
julmbed | 0:85afbf3c9fad | 11 | ValFloat=NULL; |
julmbed | 0:85afbf3c9fad | 12 | ArraySize=0; |
julmbed | 0:85afbf3c9fad | 13 | } |
julmbed | 0:85afbf3c9fad | 14 | |
julmbed | 0:85afbf3c9fad | 15 | VarItem::~VarItem() |
julmbed | 0:85afbf3c9fad | 16 | { |
julmbed | 0:85afbf3c9fad | 17 | //dtor |
julmbed | 0:85afbf3c9fad | 18 | } |
julmbed | 0:85afbf3c9fad | 19 | |
julmbed | 0:85afbf3c9fad | 20 | int VarItem::SetVal(char *Val) |
julmbed | 0:85afbf3c9fad | 21 | { |
julmbed | 0:85afbf3c9fad | 22 | char * Values; |
julmbed | 0:85afbf3c9fad | 23 | unsigned int Count=0; |
julmbed | 0:85afbf3c9fad | 24 | |
julmbed | 0:85afbf3c9fad | 25 | #if defined VARITEMS_DEBUG |
julmbed | 0:85afbf3c9fad | 26 | puts(Val); |
julmbed | 0:85afbf3c9fad | 27 | #endif // defined |
julmbed | 0:85afbf3c9fad | 28 | |
julmbed | 0:85afbf3c9fad | 29 | |
julmbed | 0:85afbf3c9fad | 30 | Values=strtok(Val,","); |
julmbed | 0:85afbf3c9fad | 31 | if(Values) |
julmbed | 0:85afbf3c9fad | 32 | { |
julmbed | 0:85afbf3c9fad | 33 | do |
julmbed | 0:85afbf3c9fad | 34 | { |
julmbed | 0:85afbf3c9fad | 35 | switch(VarType) |
julmbed | 0:85afbf3c9fad | 36 | { |
julmbed | 0:85afbf3c9fad | 37 | |
julmbed | 0:85afbf3c9fad | 38 | case T_int: |
julmbed | 0:85afbf3c9fad | 39 | *(ValInt+Count) = atoi(Values); |
julmbed | 0:85afbf3c9fad | 40 | break; |
julmbed | 0:85afbf3c9fad | 41 | |
julmbed | 0:85afbf3c9fad | 42 | case T_float: |
julmbed | 0:85afbf3c9fad | 43 | *(ValFloat+Count) = atof(Values); |
julmbed | 0:85afbf3c9fad | 44 | break; |
julmbed | 0:85afbf3c9fad | 45 | |
julmbed | 0:85afbf3c9fad | 46 | }; |
julmbed | 0:85afbf3c9fad | 47 | Count++; |
julmbed | 0:85afbf3c9fad | 48 | Values=strtok(NULL,","); |
julmbed | 0:85afbf3c9fad | 49 | } |
julmbed | 0:85afbf3c9fad | 50 | while((Values !=NULL) && (Count < ArraySize)); |
julmbed | 0:85afbf3c9fad | 51 | return 0; |
julmbed | 0:85afbf3c9fad | 52 | } |
julmbed | 0:85afbf3c9fad | 53 | else |
julmbed | 0:85afbf3c9fad | 54 | return ERR; |
julmbed | 0:85afbf3c9fad | 55 | |
julmbed | 0:85afbf3c9fad | 56 | } |
julmbed | 0:85afbf3c9fad | 57 | |
julmbed | 0:85afbf3c9fad | 58 | void VarItem::SetVar(VarTypes VT,void* VarPtr) |
julmbed | 0:85afbf3c9fad | 59 | { |
julmbed | 0:85afbf3c9fad | 60 | |
julmbed | 0:85afbf3c9fad | 61 | VarType=VT; |
julmbed | 0:85afbf3c9fad | 62 | switch(VarType) |
julmbed | 0:85afbf3c9fad | 63 | { |
julmbed | 0:85afbf3c9fad | 64 | |
julmbed | 0:85afbf3c9fad | 65 | case T_int: |
julmbed | 0:85afbf3c9fad | 66 | ValInt = (int *) VarPtr; |
julmbed | 0:85afbf3c9fad | 67 | break; |
julmbed | 0:85afbf3c9fad | 68 | |
julmbed | 0:85afbf3c9fad | 69 | case T_float: |
julmbed | 0:85afbf3c9fad | 70 | ValFloat = (float*) VarPtr; |
julmbed | 0:85afbf3c9fad | 71 | break; |
julmbed | 0:85afbf3c9fad | 72 | |
julmbed | 0:85afbf3c9fad | 73 | }; |
julmbed | 0:85afbf3c9fad | 74 | |
julmbed | 0:85afbf3c9fad | 75 | } |
julmbed | 0:85afbf3c9fad | 76 | |
julmbed | 0:85afbf3c9fad | 77 | /****** |
julmbed | 0:85afbf3c9fad | 78 | void VarItem::SetVarType(VarTypes VarType) |
julmbed | 0:85afbf3c9fad | 79 | { |
julmbed | 0:85afbf3c9fad | 80 | this->VarType=VarType; |
julmbed | 0:85afbf3c9fad | 81 | } |
julmbed | 0:85afbf3c9fad | 82 | *******/ |
julmbed | 0:85afbf3c9fad | 83 | |
julmbed | 0:85afbf3c9fad | 84 | void VarItem::SetVarArraySize(int Size) |
julmbed | 0:85afbf3c9fad | 85 | { |
julmbed | 0:85afbf3c9fad | 86 | ArraySize=Size; |
julmbed | 0:85afbf3c9fad | 87 | } |
julmbed | 0:85afbf3c9fad | 88 | |
julmbed | 0:85afbf3c9fad | 89 | |
julmbed | 0:85afbf3c9fad | 90 | void VarItem::SetVarName(char *Name) |
julmbed | 0:85afbf3c9fad | 91 | { |
julmbed | 0:85afbf3c9fad | 92 | strncpy(VarName,Name,VAR_NAME_LEN); |
julmbed | 0:85afbf3c9fad | 93 | VarName[VAR_NAME_LEN-1]='\0'; |
julmbed | 0:85afbf3c9fad | 94 | } |
julmbed | 0:85afbf3c9fad | 95 | |
julmbed | 0:85afbf3c9fad | 96 | |
julmbed | 0:85afbf3c9fad | 97 | char *VarItem::Dump() |
julmbed | 0:85afbf3c9fad | 98 | { |
julmbed | 0:85afbf3c9fad | 99 | static unsigned int DumpSize=0; |
julmbed | 0:85afbf3c9fad | 100 | static char *StrDump; |
julmbed | 0:85afbf3c9fad | 101 | |
julmbed | 0:85afbf3c9fad | 102 | unsigned int counter=0, DumpCounter=0; |
julmbed | 0:85afbf3c9fad | 103 | char Tmp[16]; |
julmbed | 0:85afbf3c9fad | 104 | |
julmbed | 0:85afbf3c9fad | 105 | if(DumpSize==0) |
julmbed | 0:85afbf3c9fad | 106 | { |
julmbed | 0:85afbf3c9fad | 107 | DumpSize=100; |
julmbed | 0:85afbf3c9fad | 108 | StrDump=(char *)malloc(DumpSize); |
julmbed | 0:85afbf3c9fad | 109 | memset(StrDump,0,100); |
julmbed | 0:85afbf3c9fad | 110 | } |
julmbed | 0:85afbf3c9fad | 111 | |
julmbed | 0:85afbf3c9fad | 112 | do |
julmbed | 0:85afbf3c9fad | 113 | { |
julmbed | 0:85afbf3c9fad | 114 | |
julmbed | 0:85afbf3c9fad | 115 | switch(VarType) |
julmbed | 0:85afbf3c9fad | 116 | { |
julmbed | 0:85afbf3c9fad | 117 | |
julmbed | 0:85afbf3c9fad | 118 | case T_int: |
julmbed | 0:85afbf3c9fad | 119 | sprintf(Tmp,"%d,",*(ValInt+counter)); |
julmbed | 0:85afbf3c9fad | 120 | break; |
julmbed | 0:85afbf3c9fad | 121 | |
julmbed | 0:85afbf3c9fad | 122 | case T_float: |
julmbed | 0:85afbf3c9fad | 123 | sprintf(Tmp,"%f,",*(ValFloat+counter)); |
julmbed | 0:85afbf3c9fad | 124 | break; |
julmbed | 0:85afbf3c9fad | 125 | |
julmbed | 0:85afbf3c9fad | 126 | }; |
julmbed | 0:85afbf3c9fad | 127 | |
julmbed | 0:85afbf3c9fad | 128 | if(DumpCounter+strlen(Tmp) >= DumpSize) |
julmbed | 0:85afbf3c9fad | 129 | { |
julmbed | 0:85afbf3c9fad | 130 | char *d; |
julmbed | 0:85afbf3c9fad | 131 | d=(char *)malloc(strlen(StrDump)); |
julmbed | 0:85afbf3c9fad | 132 | DumpSize += strlen(StrDump); |
julmbed | 0:85afbf3c9fad | 133 | strcpy(d,StrDump); |
julmbed | 0:85afbf3c9fad | 134 | free(StrDump); |
julmbed | 0:85afbf3c9fad | 135 | StrDump=d; |
julmbed | 0:85afbf3c9fad | 136 | } |
julmbed | 0:85afbf3c9fad | 137 | |
julmbed | 0:85afbf3c9fad | 138 | #if defined VARITEMS_DEBUG |
julmbed | 0:85afbf3c9fad | 139 | puts(StrDump); |
julmbed | 0:85afbf3c9fad | 140 | #endif // defined |
julmbed | 0:85afbf3c9fad | 141 | |
julmbed | 0:85afbf3c9fad | 142 | strcat(StrDump+DumpCounter,Tmp); |
julmbed | 0:85afbf3c9fad | 143 | DumpCounter+=strlen(Tmp); |
julmbed | 0:85afbf3c9fad | 144 | |
julmbed | 0:85afbf3c9fad | 145 | } |
julmbed | 0:85afbf3c9fad | 146 | while (counter < ArraySize); |
julmbed | 0:85afbf3c9fad | 147 | |
julmbed | 0:85afbf3c9fad | 148 | return StrDump; |
julmbed | 0:85afbf3c9fad | 149 | |
julmbed | 0:85afbf3c9fad | 150 | } |
julmbed | 0:85afbf3c9fad | 151 | |
julmbed | 0:85afbf3c9fad | 152 | |
julmbed | 0:85afbf3c9fad | 153 | |
julmbed | 0:85afbf3c9fad | 154 | char *VarItem::GetVarName() |
julmbed | 0:85afbf3c9fad | 155 | { |
julmbed | 0:85afbf3c9fad | 156 | return VarName; |
julmbed | 0:85afbf3c9fad | 157 | } |
julmbed | 0:85afbf3c9fad | 158 | |
julmbed | 0:85afbf3c9fad | 159 |