Baseline for testing
AddressMap.cpp
- Committer:
- foxbrianr
- Date:
- 2019-07-25
- Revision:
- 0:e24f6400a8c8
- Child:
- 1:a2073f60d3a6
File content as of revision 0:e24f6400a8c8:
#include "mbed.h" #include "AddressMap.h" #include "stdio.h" #include "stdlib.h" #define TEXT_FILE 1 #if TEXT_FILE const char * filePath = "/local/addresses.txt"; #else const char * filePath = "/local/addresses.bin"; #endif void AddressMap::init() { 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++) { addresses[i].address = i; sprintf(addresses[i].description, "Floor %d" , i); } } void trim(const char *input, char *result) { int i, j, k = 0; j = strlen(input)-1; while (input[i] == 0x20 && input[i] != '\0' ) i++; while (input[j] == 0x20 && j>0 ) j--; for (i = 0; i<j; i++) { result[k++] = input[i]; } } int AddressMap::load() { int success = 0; #if TEXT_FILE FILE *fp = fopen (filePath,"r"); if (fp != NULL) { int i=0; char line[128]; while (!feof(fp)) { memset(line,0,sizeof(line)); fgets(line,sizeof(line),fp); 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++; } i++; } fclose(fp); } else { init(); } #else FILE *input = fopen(filePath, "rb"); if(input){ printf("Reading %s\n\r",filePath ); int size = MAX_ADDRESSES; 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); } fclose(input); success = 1; } else { printf("Could not Read %s\n\r",filename ); } #endif return success; } void AddressMap::save() { printf("Saving %s\n\r",filePath ); #if TEXT_FILE FILE *output = fopen(filePath, "w"); for (int i=0;i<100;i++) { fprintf(output, "%02d:%s\n\r" , addresses[i].address, addresses[i].description); } 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++) { printf("." ); fwrite( &addresses[i].address, sizeof(uint32_t),1 , output); fwrite( addresses[i].description, sizeof(char) ,40, output); } fflush(output); fclose(output); #endif printf("Done \n\r" ); } void AddressMap::display(Serial *pc) { pc->printf("\n\r"); pc->printf("-----------------------------\n\r"); pc->printf("-- Addresses \n\r"); pc->printf("-----------------------------\n\r"); for (int i=0;i<MAX_ADDRESSES;i++) { pc->printf("%02d : [%s]\n\r", addresses[i].address, addresses[i].description); } } void AddressMap::play(Serial *pc, int address) { if (address>=0&&address<MAX_ADDRESSES){ pc->printf("%02d : %s is open\n\r", address, addresses[address].description); } else { pc->printf("%02d : error \n\r", address); } } char* AddressMap::getString(unsigned char idx ) { if (idx < MAX_ADDRESSES ) return addresses[idx].description; else return NULL; }