Baseline for testing

Revision:
0:e24f6400a8c8
Child:
1:a2073f60d3a6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AddressMap.cpp	Thu Jul 25 00:43:23 2019 +0000
@@ -0,0 +1,185 @@
+
+#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;
+}