Baseline for testing
Diff: AddressMap.cpp
- Revision:
- 1:a2073f60d3a6
- Parent:
- 0:e24f6400a8c8
- Child:
- 2:180c90fb759c
diff -r e24f6400a8c8 -r a2073f60d3a6 AddressMap.cpp --- a/AddressMap.cpp Thu Jul 25 00:43:23 2019 +0000 +++ b/AddressMap.cpp Thu Sep 12 11:28:05 2019 +0000 @@ -6,28 +6,58 @@ #include "stdio.h" #include "stdlib.h" -#define TEXT_FILE 1 - +#define TEXT_FILE 0 +#define ADDRESS_MAP_VERSION 0xFAFA0001 #if TEXT_FILE -const char * filePath = "/local/addresses.txt"; +const char * filePath = "/local/address.txt"; #else -const char * filePath = "/local/addresses.bin"; +const char * filePath = "/local/address.bin"; #endif +int AddressMap::reset() +{ + int result = 0; + int i=0; + + printf("Initializing Default Data\n\r"); + + addresses[i].address = i; + sprintf(addresses[i].description, "Basement", i); + i++; +#if 0 + addresses[i].address = i; + sprintf(addresses[i].description, "Lobby", i); + i++; +#endif + int floor = 1; + while (i<MAX_ADDRESSES) { + addresses[i].address = i; + sprintf(addresses[i].description, "Floor %d", floor++); + i++; + } + + result = save(); + return result; +} -void AddressMap::init() +int AddressMap::init() { + int result = 0; int i=0; - printf("Initializing Default Data\n\r"); - - addresses[i].address = i; - sprintf(addresses[i].description, "Basement %d" , i); - for (int i=1;i<100;i++) + printf("Initializing Address Map\n\r"); + if (!load()) + { + result = reset(); + } + else { - addresses[i].address = i; - sprintf(addresses[i].description, "Floor %d" , i); - } + result = 1; + } + + printf("Complete Init\n\r"); + return result; + } void trim(const char *input, char *result) @@ -46,41 +76,45 @@ int AddressMap::load() { - int success = 0; + int result = 0; + printf("Loading Address Map Data\n\r"); + #if TEXT_FILE - FILE *fp = fopen (filePath,"r"); + FILE *input = fopen (filePath,"r"); - if (fp != NULL) { + if (input != NULL) { int i=0; char line[128]; - while (!feof(fp)) { + while (!feof(input)) { memset(line,0,sizeof(line)); - fgets(line,sizeof(line),fp); + + fgets(line,sizeof(line),input); - int t = 0; - char * p = strtok (line,",:"); - while (p!= NULL) - { - if (t==0) { - addresses[i].address = atoi(p); - } else if (t==1){ - trim(p,addresses[i].description); - } else { - } - p = strtok (NULL, ",:"); - t++; - } - + sscanf(line,"%02d:%20s\n\r", + &addresses[i].address, + addresses[i].description); + + printf("[%30s] :: %02d:%20s\n\r", + line, + addresses[i].address, + addresses[i].description); +#if 0 + + printf (line); +#endif + i++; } - fclose(fp); + fclose(input); + result = 1; } else { - init(); + printf("Error: Cannot read %s\n\r", filePath); + result = 0; } #else @@ -89,64 +123,96 @@ if(input){ printf("Reading %s\n\r",filePath ); - int size = MAX_ADDRESSES; + int format; + int size;; - fread(&size, sizeof(uint32_t),1,input); + fread(&format, sizeof(uint32_t),1,input); + fread(&size , sizeof(uint32_t),1,input); - for (int i=0;i<100;i++) - { - printf("." ); - fread( &addresses[i].address, sizeof(uint32_t),1 , input); - fread( addresses[i].description, sizeof(char) ,40, input); + if (format == ADDRESS_MAP_VERSION && size == MAX_ADDRESSES) + { + for (int i=0;i<MAX_ADDRESSES;i++) + { + printf("." ); + fread( &addresses[i].address, sizeof(uint32_t),1 , input); + fread( addresses[i].description, sizeof(char) ,MAX_ADDR_LENGTH, input); + } + + result = 1; + } + else { + printf("Error: Wrong version cannot read %s\n\r",filePath ); + result = 0; } + fclose(input); - success = 1; } else { - printf("Could not Read %s\n\r",filename ); + printf("Error: Cannot read %s\n\r",filePath ); + result = 0; } #endif - return success; + return result; } -void AddressMap::save() +int AddressMap::save() { + int result = 0; printf("Saving %s\n\r",filePath ); #if TEXT_FILE FILE *output = fopen(filePath, "w"); - for (int i=0;i<100;i++) + if (output ) + { + for (int i=0;i<MAX_ADDRESSES;i++) + { + //printf("." ); + fprintf(output, "%02d:%-20s\n\r" , + addresses[i].address, addresses[i].description); + } + fflush(output); + fclose(output); + result = 1; + } + else { - fprintf(output, "%02d:%s\n\r" , - addresses[i].address, addresses[i].description); + printf("Error: Cannot write %s\n\r",filePath); + result = 0; } - fflush(output); - fclose(output); #else FILE *output = fopen(filePath, "wb"); - - int size = MAX_ADDRESSES; - - fwrite(&size, sizeof(uint32_t),1,output); - - for (int i=0;i<100;i++) + + if (output!=NULL) { + uint32_t format = ADDRESS_MAP_VERSION; + uint32_t size = MAX_ADDRESSES; + + fwrite(&format, sizeof(uint32_t),1,output); + fwrite(&size, sizeof(uint32_t),1,output); + + for (int i=0; i<MAX_ADDRESSES; i++) { + printf("." ); + fwrite( &addresses[i].address, sizeof(uint32_t),1, output); + fwrite( addresses[i].description, sizeof(char),MAX_ADDR_LENGTH, output); + } + fflush(output); + fclose(output); + result = 1; + } + else { - printf("." ); - fwrite( &addresses[i].address, sizeof(uint32_t),1 , output); - fwrite( addresses[i].description, sizeof(char) ,40, output); + printf("Error: Cannot write %s\n\r",filePath); + result = 0; } - fflush(output); - fclose(output); - #endif printf("Done \n\r" ); + return result; } void AddressMap::display(Serial *pc) @@ -176,10 +242,10 @@ } -char* AddressMap::getString(unsigned char idx ) +char* AddressMap::getDescription(unsigned char idx ) { if (idx < MAX_ADDRESSES ) return addresses[idx].description; else - return NULL; + return "Invalid Address"; }