Baseline for testing

Committer:
foxbrianr
Date:
Thu Sep 12 11:28:05 2019 +0000
Revision:
1:a2073f60d3a6
Parent:
0:e24f6400a8c8
Child:
2:180c90fb759c
beta1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
foxbrianr 0:e24f6400a8c8 1
foxbrianr 0:e24f6400a8c8 2 #include "mbed.h"
foxbrianr 0:e24f6400a8c8 3
foxbrianr 0:e24f6400a8c8 4 #include "AddressMap.h"
foxbrianr 0:e24f6400a8c8 5
foxbrianr 0:e24f6400a8c8 6 #include "stdio.h"
foxbrianr 0:e24f6400a8c8 7 #include "stdlib.h"
foxbrianr 0:e24f6400a8c8 8
foxbrianr 1:a2073f60d3a6 9 #define TEXT_FILE 0
foxbrianr 1:a2073f60d3a6 10 #define ADDRESS_MAP_VERSION 0xFAFA0001
foxbrianr 0:e24f6400a8c8 11 #if TEXT_FILE
foxbrianr 1:a2073f60d3a6 12 const char * filePath = "/local/address.txt";
foxbrianr 0:e24f6400a8c8 13 #else
foxbrianr 1:a2073f60d3a6 14 const char * filePath = "/local/address.bin";
foxbrianr 0:e24f6400a8c8 15 #endif
foxbrianr 1:a2073f60d3a6 16 int AddressMap::reset()
foxbrianr 1:a2073f60d3a6 17 {
foxbrianr 1:a2073f60d3a6 18 int result = 0;
foxbrianr 1:a2073f60d3a6 19 int i=0;
foxbrianr 1:a2073f60d3a6 20
foxbrianr 1:a2073f60d3a6 21 printf("Initializing Default Data\n\r");
foxbrianr 1:a2073f60d3a6 22
foxbrianr 1:a2073f60d3a6 23 addresses[i].address = i;
foxbrianr 1:a2073f60d3a6 24 sprintf(addresses[i].description, "Basement", i);
foxbrianr 1:a2073f60d3a6 25 i++;
foxbrianr 1:a2073f60d3a6 26 #if 0
foxbrianr 1:a2073f60d3a6 27 addresses[i].address = i;
foxbrianr 1:a2073f60d3a6 28 sprintf(addresses[i].description, "Lobby", i);
foxbrianr 1:a2073f60d3a6 29 i++;
foxbrianr 1:a2073f60d3a6 30 #endif
foxbrianr 1:a2073f60d3a6 31 int floor = 1;
foxbrianr 1:a2073f60d3a6 32 while (i<MAX_ADDRESSES) {
foxbrianr 1:a2073f60d3a6 33 addresses[i].address = i;
foxbrianr 1:a2073f60d3a6 34 sprintf(addresses[i].description, "Floor %d", floor++);
foxbrianr 1:a2073f60d3a6 35 i++;
foxbrianr 1:a2073f60d3a6 36 }
foxbrianr 1:a2073f60d3a6 37
foxbrianr 1:a2073f60d3a6 38 result = save();
foxbrianr 1:a2073f60d3a6 39 return result;
foxbrianr 1:a2073f60d3a6 40 }
foxbrianr 0:e24f6400a8c8 41
foxbrianr 0:e24f6400a8c8 42
foxbrianr 1:a2073f60d3a6 43 int AddressMap::init()
foxbrianr 0:e24f6400a8c8 44 {
foxbrianr 1:a2073f60d3a6 45 int result = 0;
foxbrianr 0:e24f6400a8c8 46 int i=0;
foxbrianr 0:e24f6400a8c8 47
foxbrianr 1:a2073f60d3a6 48 printf("Initializing Address Map\n\r");
foxbrianr 1:a2073f60d3a6 49 if (!load())
foxbrianr 1:a2073f60d3a6 50 {
foxbrianr 1:a2073f60d3a6 51 result = reset();
foxbrianr 1:a2073f60d3a6 52 }
foxbrianr 1:a2073f60d3a6 53 else
foxbrianr 0:e24f6400a8c8 54 {
foxbrianr 1:a2073f60d3a6 55 result = 1;
foxbrianr 1:a2073f60d3a6 56 }
foxbrianr 1:a2073f60d3a6 57
foxbrianr 1:a2073f60d3a6 58 printf("Complete Init\n\r");
foxbrianr 1:a2073f60d3a6 59 return result;
foxbrianr 1:a2073f60d3a6 60
foxbrianr 0:e24f6400a8c8 61 }
foxbrianr 0:e24f6400a8c8 62
foxbrianr 0:e24f6400a8c8 63 void trim(const char *input, char *result)
foxbrianr 0:e24f6400a8c8 64 {
foxbrianr 0:e24f6400a8c8 65 int i, j, k = 0;
foxbrianr 0:e24f6400a8c8 66
foxbrianr 0:e24f6400a8c8 67 j = strlen(input)-1;
foxbrianr 0:e24f6400a8c8 68
foxbrianr 0:e24f6400a8c8 69 while (input[i] == 0x20 && input[i] != '\0' ) i++;
foxbrianr 0:e24f6400a8c8 70 while (input[j] == 0x20 && j>0 ) j--;
foxbrianr 0:e24f6400a8c8 71
foxbrianr 0:e24f6400a8c8 72 for (i = 0; i<j; i++) {
foxbrianr 0:e24f6400a8c8 73 result[k++] = input[i];
foxbrianr 0:e24f6400a8c8 74 }
foxbrianr 0:e24f6400a8c8 75 }
foxbrianr 0:e24f6400a8c8 76
foxbrianr 0:e24f6400a8c8 77 int AddressMap::load()
foxbrianr 0:e24f6400a8c8 78 {
foxbrianr 1:a2073f60d3a6 79 int result = 0;
foxbrianr 0:e24f6400a8c8 80
foxbrianr 1:a2073f60d3a6 81 printf("Loading Address Map Data\n\r");
foxbrianr 1:a2073f60d3a6 82
foxbrianr 0:e24f6400a8c8 83 #if TEXT_FILE
foxbrianr 1:a2073f60d3a6 84 FILE *input = fopen (filePath,"r");
foxbrianr 0:e24f6400a8c8 85
foxbrianr 1:a2073f60d3a6 86 if (input != NULL) {
foxbrianr 0:e24f6400a8c8 87
foxbrianr 0:e24f6400a8c8 88 int i=0;
foxbrianr 0:e24f6400a8c8 89 char line[128];
foxbrianr 1:a2073f60d3a6 90 while (!feof(input)) {
foxbrianr 0:e24f6400a8c8 91
foxbrianr 0:e24f6400a8c8 92 memset(line,0,sizeof(line));
foxbrianr 1:a2073f60d3a6 93
foxbrianr 1:a2073f60d3a6 94 fgets(line,sizeof(line),input);
foxbrianr 0:e24f6400a8c8 95
foxbrianr 1:a2073f60d3a6 96 sscanf(line,"%02d:%20s\n\r",
foxbrianr 1:a2073f60d3a6 97 &addresses[i].address,
foxbrianr 1:a2073f60d3a6 98 addresses[i].description);
foxbrianr 1:a2073f60d3a6 99
foxbrianr 1:a2073f60d3a6 100 printf("[%30s] :: %02d:%20s\n\r",
foxbrianr 1:a2073f60d3a6 101 line,
foxbrianr 1:a2073f60d3a6 102 addresses[i].address,
foxbrianr 1:a2073f60d3a6 103 addresses[i].description);
foxbrianr 1:a2073f60d3a6 104 #if 0
foxbrianr 1:a2073f60d3a6 105
foxbrianr 1:a2073f60d3a6 106 printf (line);
foxbrianr 1:a2073f60d3a6 107 #endif
foxbrianr 1:a2073f60d3a6 108
foxbrianr 0:e24f6400a8c8 109 i++;
foxbrianr 0:e24f6400a8c8 110 }
foxbrianr 1:a2073f60d3a6 111 fclose(input);
foxbrianr 1:a2073f60d3a6 112 result = 1;
foxbrianr 0:e24f6400a8c8 113 }
foxbrianr 0:e24f6400a8c8 114 else
foxbrianr 0:e24f6400a8c8 115 {
foxbrianr 1:a2073f60d3a6 116 printf("Error: Cannot read %s\n\r", filePath);
foxbrianr 1:a2073f60d3a6 117 result = 0;
foxbrianr 0:e24f6400a8c8 118 }
foxbrianr 0:e24f6400a8c8 119
foxbrianr 0:e24f6400a8c8 120 #else
foxbrianr 0:e24f6400a8c8 121
foxbrianr 0:e24f6400a8c8 122 FILE *input = fopen(filePath, "rb");
foxbrianr 0:e24f6400a8c8 123 if(input){
foxbrianr 0:e24f6400a8c8 124
foxbrianr 0:e24f6400a8c8 125 printf("Reading %s\n\r",filePath );
foxbrianr 1:a2073f60d3a6 126 int format;
foxbrianr 1:a2073f60d3a6 127 int size;;
foxbrianr 0:e24f6400a8c8 128
foxbrianr 1:a2073f60d3a6 129 fread(&format, sizeof(uint32_t),1,input);
foxbrianr 1:a2073f60d3a6 130 fread(&size , sizeof(uint32_t),1,input);
foxbrianr 0:e24f6400a8c8 131
foxbrianr 1:a2073f60d3a6 132 if (format == ADDRESS_MAP_VERSION && size == MAX_ADDRESSES)
foxbrianr 1:a2073f60d3a6 133 {
foxbrianr 1:a2073f60d3a6 134 for (int i=0;i<MAX_ADDRESSES;i++)
foxbrianr 1:a2073f60d3a6 135 {
foxbrianr 1:a2073f60d3a6 136 printf("." );
foxbrianr 1:a2073f60d3a6 137 fread( &addresses[i].address, sizeof(uint32_t),1 , input);
foxbrianr 1:a2073f60d3a6 138 fread( addresses[i].description, sizeof(char) ,MAX_ADDR_LENGTH, input);
foxbrianr 1:a2073f60d3a6 139 }
foxbrianr 1:a2073f60d3a6 140
foxbrianr 1:a2073f60d3a6 141 result = 1;
foxbrianr 1:a2073f60d3a6 142 }
foxbrianr 1:a2073f60d3a6 143 else {
foxbrianr 1:a2073f60d3a6 144 printf("Error: Wrong version cannot read %s\n\r",filePath );
foxbrianr 1:a2073f60d3a6 145 result = 0;
foxbrianr 0:e24f6400a8c8 146 }
foxbrianr 1:a2073f60d3a6 147
foxbrianr 0:e24f6400a8c8 148 fclose(input);
foxbrianr 0:e24f6400a8c8 149 }
foxbrianr 0:e24f6400a8c8 150 else
foxbrianr 0:e24f6400a8c8 151 {
foxbrianr 1:a2073f60d3a6 152 printf("Error: Cannot read %s\n\r",filePath );
foxbrianr 1:a2073f60d3a6 153 result = 0;
foxbrianr 0:e24f6400a8c8 154 }
foxbrianr 0:e24f6400a8c8 155 #endif
foxbrianr 0:e24f6400a8c8 156
foxbrianr 1:a2073f60d3a6 157 return result;
foxbrianr 0:e24f6400a8c8 158 }
foxbrianr 0:e24f6400a8c8 159
foxbrianr 0:e24f6400a8c8 160
foxbrianr 0:e24f6400a8c8 161
foxbrianr 1:a2073f60d3a6 162 int AddressMap::save()
foxbrianr 0:e24f6400a8c8 163 {
foxbrianr 1:a2073f60d3a6 164 int result = 0;
foxbrianr 0:e24f6400a8c8 165 printf("Saving %s\n\r",filePath );
foxbrianr 0:e24f6400a8c8 166
foxbrianr 0:e24f6400a8c8 167 #if TEXT_FILE
foxbrianr 0:e24f6400a8c8 168 FILE *output = fopen(filePath, "w");
foxbrianr 0:e24f6400a8c8 169
foxbrianr 1:a2073f60d3a6 170 if (output )
foxbrianr 1:a2073f60d3a6 171 {
foxbrianr 1:a2073f60d3a6 172 for (int i=0;i<MAX_ADDRESSES;i++)
foxbrianr 1:a2073f60d3a6 173 {
foxbrianr 1:a2073f60d3a6 174 //printf("." );
foxbrianr 1:a2073f60d3a6 175 fprintf(output, "%02d:%-20s\n\r" ,
foxbrianr 1:a2073f60d3a6 176 addresses[i].address, addresses[i].description);
foxbrianr 1:a2073f60d3a6 177 }
foxbrianr 1:a2073f60d3a6 178 fflush(output);
foxbrianr 1:a2073f60d3a6 179 fclose(output);
foxbrianr 1:a2073f60d3a6 180 result = 1;
foxbrianr 1:a2073f60d3a6 181 }
foxbrianr 1:a2073f60d3a6 182 else
foxbrianr 0:e24f6400a8c8 183 {
foxbrianr 1:a2073f60d3a6 184 printf("Error: Cannot write %s\n\r",filePath);
foxbrianr 1:a2073f60d3a6 185 result = 0;
foxbrianr 0:e24f6400a8c8 186 }
foxbrianr 0:e24f6400a8c8 187 #else
foxbrianr 0:e24f6400a8c8 188
foxbrianr 0:e24f6400a8c8 189 FILE *output = fopen(filePath, "wb");
foxbrianr 1:a2073f60d3a6 190
foxbrianr 1:a2073f60d3a6 191 if (output!=NULL) {
foxbrianr 1:a2073f60d3a6 192 uint32_t format = ADDRESS_MAP_VERSION;
foxbrianr 1:a2073f60d3a6 193 uint32_t size = MAX_ADDRESSES;
foxbrianr 1:a2073f60d3a6 194
foxbrianr 1:a2073f60d3a6 195 fwrite(&format, sizeof(uint32_t),1,output);
foxbrianr 1:a2073f60d3a6 196 fwrite(&size, sizeof(uint32_t),1,output);
foxbrianr 1:a2073f60d3a6 197
foxbrianr 1:a2073f60d3a6 198 for (int i=0; i<MAX_ADDRESSES; i++) {
foxbrianr 1:a2073f60d3a6 199 printf("." );
foxbrianr 1:a2073f60d3a6 200 fwrite( &addresses[i].address, sizeof(uint32_t),1, output);
foxbrianr 1:a2073f60d3a6 201 fwrite( addresses[i].description, sizeof(char),MAX_ADDR_LENGTH, output);
foxbrianr 1:a2073f60d3a6 202 }
foxbrianr 1:a2073f60d3a6 203 fflush(output);
foxbrianr 1:a2073f60d3a6 204 fclose(output);
foxbrianr 1:a2073f60d3a6 205 result = 1;
foxbrianr 1:a2073f60d3a6 206 }
foxbrianr 1:a2073f60d3a6 207 else
foxbrianr 0:e24f6400a8c8 208 {
foxbrianr 1:a2073f60d3a6 209 printf("Error: Cannot write %s\n\r",filePath);
foxbrianr 1:a2073f60d3a6 210 result = 0;
foxbrianr 0:e24f6400a8c8 211 }
foxbrianr 0:e24f6400a8c8 212 #endif
foxbrianr 0:e24f6400a8c8 213
foxbrianr 0:e24f6400a8c8 214 printf("Done \n\r" );
foxbrianr 1:a2073f60d3a6 215 return result;
foxbrianr 0:e24f6400a8c8 216 }
foxbrianr 0:e24f6400a8c8 217
foxbrianr 0:e24f6400a8c8 218 void AddressMap::display(Serial *pc)
foxbrianr 0:e24f6400a8c8 219 {
foxbrianr 0:e24f6400a8c8 220 pc->printf("\n\r");
foxbrianr 0:e24f6400a8c8 221 pc->printf("-----------------------------\n\r");
foxbrianr 0:e24f6400a8c8 222 pc->printf("-- Addresses \n\r");
foxbrianr 0:e24f6400a8c8 223 pc->printf("-----------------------------\n\r");
foxbrianr 0:e24f6400a8c8 224 for (int i=0;i<MAX_ADDRESSES;i++)
foxbrianr 0:e24f6400a8c8 225 {
foxbrianr 0:e24f6400a8c8 226 pc->printf("%02d : [%s]\n\r",
foxbrianr 0:e24f6400a8c8 227 addresses[i].address, addresses[i].description);
foxbrianr 0:e24f6400a8c8 228 }
foxbrianr 0:e24f6400a8c8 229 }
foxbrianr 0:e24f6400a8c8 230
foxbrianr 0:e24f6400a8c8 231
foxbrianr 0:e24f6400a8c8 232 void AddressMap::play(Serial *pc, int address)
foxbrianr 0:e24f6400a8c8 233 {
foxbrianr 0:e24f6400a8c8 234 if (address>=0&&address<MAX_ADDRESSES){
foxbrianr 0:e24f6400a8c8 235 pc->printf("%02d : %s is open\n\r", address,
foxbrianr 0:e24f6400a8c8 236 addresses[address].description);
foxbrianr 0:e24f6400a8c8 237 }
foxbrianr 0:e24f6400a8c8 238 else
foxbrianr 0:e24f6400a8c8 239 {
foxbrianr 0:e24f6400a8c8 240 pc->printf("%02d : error \n\r", address);
foxbrianr 0:e24f6400a8c8 241 }
foxbrianr 0:e24f6400a8c8 242 }
foxbrianr 0:e24f6400a8c8 243
foxbrianr 0:e24f6400a8c8 244
foxbrianr 1:a2073f60d3a6 245 char* AddressMap::getDescription(unsigned char idx )
foxbrianr 0:e24f6400a8c8 246 {
foxbrianr 0:e24f6400a8c8 247 if (idx < MAX_ADDRESSES )
foxbrianr 0:e24f6400a8c8 248 return addresses[idx].description;
foxbrianr 0:e24f6400a8c8 249 else
foxbrianr 1:a2073f60d3a6 250 return "Invalid Address";
foxbrianr 0:e24f6400a8c8 251 }