Baseline for testing

Committer:
foxbrianr
Date:
Fri Sep 27 13:20:37 2019 +0000
Revision:
3:573403f12cdd
Parent:
2:180c90fb759c
Beta 2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
foxbrianr 2:180c90fb759c 1 /**************************************************************************//**
foxbrianr 2:180c90fb759c 2 * @file AddressMap.cpp
foxbrianr 2:180c90fb759c 3 * @brief Base class for storage of Address Mapping data.
foxbrianr 2:180c90fb759c 4 * @version: V1.0
foxbrianr 2:180c90fb759c 5 * @date: 9/17/2019
foxbrianr 0:e24f6400a8c8 6
foxbrianr 2:180c90fb759c 7 *
foxbrianr 2:180c90fb759c 8 * @note
foxbrianr 2:180c90fb759c 9 * Copyright (C) 2019 E3 Design. All rights reserved.
foxbrianr 2:180c90fb759c 10 *
foxbrianr 2:180c90fb759c 11 * @par
foxbrianr 2:180c90fb759c 12 * E3 Designers LLC is supplying this software for use with Cortex-M3 LPC1768
foxbrianr 2:180c90fb759c 13 * processor based microcontroller for the ESCM 2000 Monitor and Display.
foxbrianr 2:180c90fb759c 14 * *
foxbrianr 2:180c90fb759c 15 * @par
foxbrianr 2:180c90fb759c 16 * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
foxbrianr 2:180c90fb759c 17 * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
foxbrianr 2:180c90fb759c 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
foxbrianr 2:180c90fb759c 19 * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
foxbrianr 2:180c90fb759c 20 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
foxbrianr 2:180c90fb759c 21 *
foxbrianr 2:180c90fb759c 22 ******************************************************************************/
foxbrianr 2:180c90fb759c 23 #include "mbed.h"
foxbrianr 0:e24f6400a8c8 24 #include "AddressMap.h"
foxbrianr 0:e24f6400a8c8 25 #include "stdio.h"
foxbrianr 0:e24f6400a8c8 26 #include "stdlib.h"
foxbrianr 0:e24f6400a8c8 27
foxbrianr 1:a2073f60d3a6 28 #define ADDRESS_MAP_VERSION 0xFAFA0001
foxbrianr 2:180c90fb759c 29
foxbrianr 1:a2073f60d3a6 30 const char * filePath = "/local/address.bin";
foxbrianr 2:180c90fb759c 31
foxbrianr 2:180c90fb759c 32 /******************************************************************************/
foxbrianr 1:a2073f60d3a6 33 int AddressMap::reset()
foxbrianr 1:a2073f60d3a6 34 {
foxbrianr 1:a2073f60d3a6 35 int result = 0;
foxbrianr 1:a2073f60d3a6 36 int i=0;
foxbrianr 1:a2073f60d3a6 37
foxbrianr 1:a2073f60d3a6 38 printf("Initializing Default Data\n\r");
foxbrianr 1:a2073f60d3a6 39
foxbrianr 3:573403f12cdd 40 #if 0
foxbrianr 1:a2073f60d3a6 41 addresses[i].address = i;
foxbrianr 1:a2073f60d3a6 42 sprintf(addresses[i].description, "Basement", i);
foxbrianr 1:a2073f60d3a6 43 i++;
foxbrianr 1:a2073f60d3a6 44 addresses[i].address = i;
foxbrianr 1:a2073f60d3a6 45 sprintf(addresses[i].description, "Lobby", i);
foxbrianr 1:a2073f60d3a6 46 i++;
foxbrianr 1:a2073f60d3a6 47 #endif
foxbrianr 3:573403f12cdd 48 int floor = 0;
foxbrianr 1:a2073f60d3a6 49 while (i<MAX_ADDRESSES) {
foxbrianr 1:a2073f60d3a6 50 addresses[i].address = i;
foxbrianr 3:573403f12cdd 51 sprintf(addresses[i].description, "Unit %d", i);
foxbrianr 1:a2073f60d3a6 52 i++;
foxbrianr 1:a2073f60d3a6 53 }
foxbrianr 1:a2073f60d3a6 54
foxbrianr 1:a2073f60d3a6 55 result = save();
foxbrianr 1:a2073f60d3a6 56 return result;
foxbrianr 1:a2073f60d3a6 57 }
foxbrianr 0:e24f6400a8c8 58
foxbrianr 0:e24f6400a8c8 59
foxbrianr 2:180c90fb759c 60 /******************************************************************************/
foxbrianr 1:a2073f60d3a6 61 int AddressMap::init()
foxbrianr 0:e24f6400a8c8 62 {
foxbrianr 1:a2073f60d3a6 63 int result = 0;
foxbrianr 0:e24f6400a8c8 64 int i=0;
foxbrianr 0:e24f6400a8c8 65
foxbrianr 1:a2073f60d3a6 66 printf("Initializing Address Map\n\r");
foxbrianr 1:a2073f60d3a6 67 if (!load())
foxbrianr 1:a2073f60d3a6 68 {
foxbrianr 1:a2073f60d3a6 69 result = reset();
foxbrianr 1:a2073f60d3a6 70 }
foxbrianr 1:a2073f60d3a6 71 else
foxbrianr 0:e24f6400a8c8 72 {
foxbrianr 1:a2073f60d3a6 73 result = 1;
foxbrianr 1:a2073f60d3a6 74 }
foxbrianr 1:a2073f60d3a6 75
foxbrianr 1:a2073f60d3a6 76 printf("Complete Init\n\r");
foxbrianr 1:a2073f60d3a6 77 return result;
foxbrianr 1:a2073f60d3a6 78
foxbrianr 0:e24f6400a8c8 79 }
foxbrianr 0:e24f6400a8c8 80
foxbrianr 2:180c90fb759c 81 /******************************************************************************/
foxbrianr 0:e24f6400a8c8 82 int AddressMap::load()
foxbrianr 0:e24f6400a8c8 83 {
foxbrianr 1:a2073f60d3a6 84 int result = 0;
foxbrianr 0:e24f6400a8c8 85
foxbrianr 1:a2073f60d3a6 86 printf("Loading Address Map Data\n\r");
foxbrianr 0:e24f6400a8c8 87
foxbrianr 0:e24f6400a8c8 88 FILE *input = fopen(filePath, "rb");
foxbrianr 0:e24f6400a8c8 89 if(input){
foxbrianr 0:e24f6400a8c8 90
foxbrianr 0:e24f6400a8c8 91 printf("Reading %s\n\r",filePath );
foxbrianr 1:a2073f60d3a6 92 int format;
foxbrianr 1:a2073f60d3a6 93 int size;;
foxbrianr 0:e24f6400a8c8 94
foxbrianr 1:a2073f60d3a6 95 fread(&format, sizeof(uint32_t),1,input);
foxbrianr 1:a2073f60d3a6 96 fread(&size , sizeof(uint32_t),1,input);
foxbrianr 0:e24f6400a8c8 97
foxbrianr 1:a2073f60d3a6 98 if (format == ADDRESS_MAP_VERSION && size == MAX_ADDRESSES)
foxbrianr 1:a2073f60d3a6 99 {
foxbrianr 1:a2073f60d3a6 100 for (int i=0;i<MAX_ADDRESSES;i++)
foxbrianr 1:a2073f60d3a6 101 {
foxbrianr 1:a2073f60d3a6 102 fread( &addresses[i].address, sizeof(uint32_t),1 , input);
foxbrianr 1:a2073f60d3a6 103 fread( addresses[i].description, sizeof(char) ,MAX_ADDR_LENGTH, input);
foxbrianr 1:a2073f60d3a6 104 }
foxbrianr 1:a2073f60d3a6 105
foxbrianr 1:a2073f60d3a6 106 result = 1;
foxbrianr 1:a2073f60d3a6 107 }
foxbrianr 1:a2073f60d3a6 108 else {
foxbrianr 1:a2073f60d3a6 109 printf("Error: Wrong version cannot read %s\n\r",filePath );
foxbrianr 1:a2073f60d3a6 110 result = 0;
foxbrianr 0:e24f6400a8c8 111 }
foxbrianr 1:a2073f60d3a6 112
foxbrianr 0:e24f6400a8c8 113 fclose(input);
foxbrianr 0:e24f6400a8c8 114 }
foxbrianr 0:e24f6400a8c8 115 else
foxbrianr 0:e24f6400a8c8 116 {
foxbrianr 1:a2073f60d3a6 117 printf("Error: Cannot read %s\n\r",filePath );
foxbrianr 1:a2073f60d3a6 118 result = 0;
foxbrianr 0:e24f6400a8c8 119 }
foxbrianr 0:e24f6400a8c8 120
foxbrianr 1:a2073f60d3a6 121 return result;
foxbrianr 0:e24f6400a8c8 122 }
foxbrianr 0:e24f6400a8c8 123
foxbrianr 0:e24f6400a8c8 124
foxbrianr 0:e24f6400a8c8 125
foxbrianr 2:180c90fb759c 126 /******************************************************************************/
foxbrianr 1:a2073f60d3a6 127 int AddressMap::save()
foxbrianr 0:e24f6400a8c8 128 {
foxbrianr 1:a2073f60d3a6 129 int result = 0;
foxbrianr 0:e24f6400a8c8 130 printf("Saving %s\n\r",filePath );
foxbrianr 0:e24f6400a8c8 131
foxbrianr 0:e24f6400a8c8 132
foxbrianr 0:e24f6400a8c8 133 FILE *output = fopen(filePath, "wb");
foxbrianr 1:a2073f60d3a6 134
foxbrianr 1:a2073f60d3a6 135 if (output!=NULL) {
foxbrianr 1:a2073f60d3a6 136 uint32_t format = ADDRESS_MAP_VERSION;
foxbrianr 1:a2073f60d3a6 137 uint32_t size = MAX_ADDRESSES;
foxbrianr 1:a2073f60d3a6 138
foxbrianr 1:a2073f60d3a6 139 fwrite(&format, sizeof(uint32_t),1,output);
foxbrianr 1:a2073f60d3a6 140 fwrite(&size, sizeof(uint32_t),1,output);
foxbrianr 1:a2073f60d3a6 141
foxbrianr 1:a2073f60d3a6 142 for (int i=0; i<MAX_ADDRESSES; i++) {
foxbrianr 1:a2073f60d3a6 143 printf("." );
foxbrianr 1:a2073f60d3a6 144 fwrite( &addresses[i].address, sizeof(uint32_t),1, output);
foxbrianr 1:a2073f60d3a6 145 fwrite( addresses[i].description, sizeof(char),MAX_ADDR_LENGTH, output);
foxbrianr 1:a2073f60d3a6 146 }
foxbrianr 1:a2073f60d3a6 147 fflush(output);
foxbrianr 1:a2073f60d3a6 148 fclose(output);
foxbrianr 1:a2073f60d3a6 149 result = 1;
foxbrianr 1:a2073f60d3a6 150 }
foxbrianr 1:a2073f60d3a6 151 else
foxbrianr 0:e24f6400a8c8 152 {
foxbrianr 1:a2073f60d3a6 153 printf("Error: Cannot write %s\n\r",filePath);
foxbrianr 1:a2073f60d3a6 154 result = 0;
foxbrianr 0:e24f6400a8c8 155 }
foxbrianr 0:e24f6400a8c8 156
foxbrianr 0:e24f6400a8c8 157 printf("Done \n\r" );
foxbrianr 1:a2073f60d3a6 158 return result;
foxbrianr 0:e24f6400a8c8 159 }
foxbrianr 0:e24f6400a8c8 160
foxbrianr 2:180c90fb759c 161 /******************************************************************************/
foxbrianr 0:e24f6400a8c8 162 void AddressMap::display(Serial *pc)
foxbrianr 0:e24f6400a8c8 163 {
foxbrianr 0:e24f6400a8c8 164 pc->printf("\n\r");
foxbrianr 0:e24f6400a8c8 165 pc->printf("-----------------------------\n\r");
foxbrianr 0:e24f6400a8c8 166 pc->printf("-- Addresses \n\r");
foxbrianr 0:e24f6400a8c8 167 pc->printf("-----------------------------\n\r");
foxbrianr 0:e24f6400a8c8 168 for (int i=0;i<MAX_ADDRESSES;i++)
foxbrianr 0:e24f6400a8c8 169 {
foxbrianr 0:e24f6400a8c8 170 pc->printf("%02d : [%s]\n\r",
foxbrianr 0:e24f6400a8c8 171 addresses[i].address, addresses[i].description);
foxbrianr 0:e24f6400a8c8 172 }
foxbrianr 0:e24f6400a8c8 173 }
foxbrianr 0:e24f6400a8c8 174
foxbrianr 0:e24f6400a8c8 175
foxbrianr 2:180c90fb759c 176 /******************************************************************************/
foxbrianr 1:a2073f60d3a6 177 char* AddressMap::getDescription(unsigned char idx )
foxbrianr 0:e24f6400a8c8 178 {
foxbrianr 2:180c90fb759c 179 if (idx < MAX_ADDRESSES && idx >= 0 )
foxbrianr 0:e24f6400a8c8 180 return addresses[idx].description;
foxbrianr 0:e24f6400a8c8 181 else
foxbrianr 1:a2073f60d3a6 182 return "Invalid Address";
foxbrianr 0:e24f6400a8c8 183 }
foxbrianr 2:180c90fb759c 184 /******************************************************************************/