Baseline for testing
AddressMap.cpp@3:573403f12cdd, 2019-09-27 (annotated)
- 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?
User | Revision | Line number | New 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 | /******************************************************************************/ |