20200716 read Status Register each second

Dependencies:   SDFileSystem mbed-os-example-ble-GattServer max32630fthr

Committer:
aureliocarella
Date:
Thu Jul 16 14:59:04 2020 +0000
Revision:
21:51e162c130a9
20200716

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aureliocarella 21:51e162c130a9 1 /*******************************************************************************
aureliocarella 21:51e162c130a9 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
aureliocarella 21:51e162c130a9 3 *
aureliocarella 21:51e162c130a9 4 * Permission is hereby granted, free of charge, to any person obtaining a
aureliocarella 21:51e162c130a9 5 * copy of this software and associated documentation files (the "Software"),
aureliocarella 21:51e162c130a9 6 * to deal in the Software without restriction, including without limitation
aureliocarella 21:51e162c130a9 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
aureliocarella 21:51e162c130a9 8 * and/or sell copies of the Software, and to permit persons to whom the
aureliocarella 21:51e162c130a9 9 * Software is furnished to do so, subject to the following conditions:
aureliocarella 21:51e162c130a9 10 *
aureliocarella 21:51e162c130a9 11 * The above copyright notice and this permission notice shall be included
aureliocarella 21:51e162c130a9 12 * in all copies or substantial portions of the Software.
aureliocarella 21:51e162c130a9 13 *
aureliocarella 21:51e162c130a9 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
aureliocarella 21:51e162c130a9 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
aureliocarella 21:51e162c130a9 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
aureliocarella 21:51e162c130a9 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
aureliocarella 21:51e162c130a9 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
aureliocarella 21:51e162c130a9 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
aureliocarella 21:51e162c130a9 20 * OTHER DEALINGS IN THE SOFTWARE.
aureliocarella 21:51e162c130a9 21 *
aureliocarella 21:51e162c130a9 22 * Except as contained in this notice, the name of Maxim Integrated
aureliocarella 21:51e162c130a9 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
aureliocarella 21:51e162c130a9 24 * Products, Inc. Branding Policy.
aureliocarella 21:51e162c130a9 25 *
aureliocarella 21:51e162c130a9 26 * The mere transfer of this software does not imply any licenses
aureliocarella 21:51e162c130a9 27 * of trade secrets, proprietary technology, copyrights, patents,
aureliocarella 21:51e162c130a9 28 * trademarks, maskwork rights, or any other form of intellectual
aureliocarella 21:51e162c130a9 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
aureliocarella 21:51e162c130a9 30 * ownership rights.
aureliocarella 21:51e162c130a9 31 ******************************************************************************
aureliocarella 21:51e162c130a9 32 */
aureliocarella 21:51e162c130a9 33 #include "StringHelper.h"
aureliocarella 21:51e162c130a9 34 #include <stdint.h>
aureliocarella 21:51e162c130a9 35 #include "Streaming.h"
aureliocarella 21:51e162c130a9 36 #include "StringInOut.h"
aureliocarella 21:51e162c130a9 37 #include "DataLoggingService.h"
aureliocarella 21:51e162c130a9 38 #include "Peripherals.h"
aureliocarella 21:51e162c130a9 39 #include "Logging.h"
aureliocarella 21:51e162c130a9 40
aureliocarella 21:51e162c130a9 41 extern char loggingMissionCmds[4096];
aureliocarella 21:51e162c130a9 42 uint32_t missionCmdIndex;
aureliocarella 21:51e162c130a9 43 extern char missionFileName[32];
aureliocarella 21:51e162c130a9 44 extern char dataFileName[32];
aureliocarella 21:51e162c130a9 45 //******************************************************************************
aureliocarella 21:51e162c130a9 46 int Logging_RPC_StartMissionDefine(char argStrs[32][32],
aureliocarella 21:51e162c130a9 47 char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 48 uint32_t i;
aureliocarella 21:51e162c130a9 49 uint32_t reply[1];
aureliocarella 21:51e162c130a9 50
aureliocarella 21:51e162c130a9 51 // reset the missionCmdIndex to the beginning of the cmd buffer
aureliocarella 21:51e162c130a9 52 missionCmdIndex = 0;
aureliocarella 21:51e162c130a9 53 // clear the mission command buffer, fill with zeros
aureliocarella 21:51e162c130a9 54 for (i = 0; i < sizeof(loggingMissionCmds); i++) {
aureliocarella 21:51e162c130a9 55 loggingMissionCmds[i] = 0;
aureliocarella 21:51e162c130a9 56 }
aureliocarella 21:51e162c130a9 57
aureliocarella 21:51e162c130a9 58 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 59 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 60 return 0;
aureliocarella 21:51e162c130a9 61 }
aureliocarella 21:51e162c130a9 62
aureliocarella 21:51e162c130a9 63 //******************************************************************************
aureliocarella 21:51e162c130a9 64 int Logging_RPC_AppendMissionCmd(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 65 uint32_t reply[1];
aureliocarella 21:51e162c130a9 66 char *strPtr;
aureliocarella 21:51e162c130a9 67 uint32_t count = 0;
aureliocarella 21:51e162c130a9 68 uint8_t result = 0x80;
aureliocarella 21:51e162c130a9 69 // append the string to the mission cmd log
aureliocarella 21:51e162c130a9 70 strPtr = argStrs[0];
aureliocarella 21:51e162c130a9 71 while (*strPtr != 0) {
aureliocarella 21:51e162c130a9 72 loggingMissionCmds[missionCmdIndex] = *strPtr;
aureliocarella 21:51e162c130a9 73 missionCmdIndex++;
aureliocarella 21:51e162c130a9 74 strPtr++;
aureliocarella 21:51e162c130a9 75 // do not overrun buffer
aureliocarella 21:51e162c130a9 76 if (missionCmdIndex > (sizeof(loggingMissionCmds) - 2)) {
aureliocarella 21:51e162c130a9 77 result = 0xFF;
aureliocarella 21:51e162c130a9 78 break;
aureliocarella 21:51e162c130a9 79 }
aureliocarella 21:51e162c130a9 80 count++;
aureliocarella 21:51e162c130a9 81 // do not read more than max count in incoming string
aureliocarella 21:51e162c130a9 82 if (count > (32 * 32)) {
aureliocarella 21:51e162c130a9 83 result = 0xFF;
aureliocarella 21:51e162c130a9 84 break;
aureliocarella 21:51e162c130a9 85 }
aureliocarella 21:51e162c130a9 86 }
aureliocarella 21:51e162c130a9 87 if (result != 0x80) {
aureliocarella 21:51e162c130a9 88 reply[0] = 0xFF;
aureliocarella 21:51e162c130a9 89 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 90 return 0;
aureliocarella 21:51e162c130a9 91 }
aureliocarella 21:51e162c130a9 92 // add cr/lf to the end of this cmd string
aureliocarella 21:51e162c130a9 93 loggingMissionCmds[missionCmdIndex++] = 13;
aureliocarella 21:51e162c130a9 94 loggingMissionCmds[missionCmdIndex++] = 10;
aureliocarella 21:51e162c130a9 95
aureliocarella 21:51e162c130a9 96 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 97 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 98 return 0;
aureliocarella 21:51e162c130a9 99 }
aureliocarella 21:51e162c130a9 100
aureliocarella 21:51e162c130a9 101 //******************************************************************************
aureliocarella 21:51e162c130a9 102 int Logging_RPC_EndMissionDefine(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 103 uint32_t reply[1];
aureliocarella 21:51e162c130a9 104 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 105 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 106 return 0;
aureliocarella 21:51e162c130a9 107 }
aureliocarella 21:51e162c130a9 108
aureliocarella 21:51e162c130a9 109 //******************************************************************************
aureliocarella 21:51e162c130a9 110 int Logging_RPC_WriteMission(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 111 char *ptr;
aureliocarella 21:51e162c130a9 112 uint32_t reply[1];
aureliocarella 21:51e162c130a9 113
aureliocarella 21:51e162c130a9 114 ptr = loggingMissionCmds;
aureliocarella 21:51e162c130a9 115 FILE *fp = fopen(missionFileName, "w");
aureliocarella 21:51e162c130a9 116 if (fp != NULL){
aureliocarella 21:51e162c130a9 117 fprintf(fp, ptr);
aureliocarella 21:51e162c130a9 118 fclose(fp);
aureliocarella 21:51e162c130a9 119 }
aureliocarella 21:51e162c130a9 120
aureliocarella 21:51e162c130a9 121 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 122 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 123 return 0;
aureliocarella 21:51e162c130a9 124 }
aureliocarella 21:51e162c130a9 125
aureliocarella 21:51e162c130a9 126 //******************************************************************************
aureliocarella 21:51e162c130a9 127 int Logging_RPC_ReadMission(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 128 char *ptr;
aureliocarella 21:51e162c130a9 129 uint32_t i;
aureliocarella 21:51e162c130a9 130 FILE *fp;
aureliocarella 21:51e162c130a9 131 ptr = loggingMissionCmds;
aureliocarella 21:51e162c130a9 132 fp = fopen(missionFileName, "r");
aureliocarella 21:51e162c130a9 133 if (fp != NULL) {
aureliocarella 21:51e162c130a9 134 do
aureliocarella 21:51e162c130a9 135 {
aureliocarella 21:51e162c130a9 136 char c = (char)fgetc(fp);
aureliocarella 21:51e162c130a9 137 *ptr++ = c;
aureliocarella 21:51e162c130a9 138 } while(!feof(fp));
aureliocarella 21:51e162c130a9 139 ptr--;
aureliocarella 21:51e162c130a9 140 *ptr = 0;
aureliocarella 21:51e162c130a9 141 fclose(fp);
aureliocarella 21:51e162c130a9 142 }
aureliocarella 21:51e162c130a9 143 ptr = loggingMissionCmds;
aureliocarella 21:51e162c130a9 144 for (i = 0; i < sizeof(loggingMissionCmds); i++) {
aureliocarella 21:51e162c130a9 145 if (*ptr == 13) {
aureliocarella 21:51e162c130a9 146 *ptr = ':';
aureliocarella 21:51e162c130a9 147 } else if (*ptr == 10) {
aureliocarella 21:51e162c130a9 148 *ptr = ' ';
aureliocarella 21:51e162c130a9 149 }
aureliocarella 21:51e162c130a9 150 ptr++;
aureliocarella 21:51e162c130a9 151 }
aureliocarella 21:51e162c130a9 152
aureliocarella 21:51e162c130a9 153 // send it out via uart
aureliocarella 21:51e162c130a9 154 putStr(loggingMissionCmds);
aureliocarella 21:51e162c130a9 155 replyStrs[0][0] = 0;
aureliocarella 21:51e162c130a9 156 return 0;
aureliocarella 21:51e162c130a9 157 }
aureliocarella 21:51e162c130a9 158
aureliocarella 21:51e162c130a9 159 //******************************************************************************
aureliocarella 21:51e162c130a9 160 int Logging_RPC_EraseMission(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 161 uint32_t reply[1];
aureliocarella 21:51e162c130a9 162 FILE *fp = fopen(missionFileName, "w");
aureliocarella 21:51e162c130a9 163 if (fp != NULL){
aureliocarella 21:51e162c130a9 164 fprintf(fp, "");
aureliocarella 21:51e162c130a9 165 fclose(fp);
aureliocarella 21:51e162c130a9 166 }
aureliocarella 21:51e162c130a9 167 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 168 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 169 return 0;
aureliocarella 21:51e162c130a9 170 }
aureliocarella 21:51e162c130a9 171
aureliocarella 21:51e162c130a9 172 #define SECTOR_SIZE_256K 0x10000
aureliocarella 21:51e162c130a9 173 #define PAGE_INC_256K 0x400
aureliocarella 21:51e162c130a9 174 #define SECTOR_SIZE_4K 0x1000
aureliocarella 21:51e162c130a9 175 #define PAGE_INC_4K 0x10
aureliocarella 21:51e162c130a9 176 #define TOTAL_SECTOR_NUMBER 263
aureliocarella 21:51e162c130a9 177
aureliocarella 21:51e162c130a9 178 //******************************************************************************
aureliocarella 21:51e162c130a9 179 int Logging_EraseWrittenSectors(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 180 uint32_t reply[1];
aureliocarella 21:51e162c130a9 181 uint8_t data[512];
aureliocarella 21:51e162c130a9 182
aureliocarella 21:51e162c130a9 183 printf("Logging_EraseWrittenSectors ");
aureliocarella 21:51e162c130a9 184 FILE *fp = fopen(missionFileName, "w");
aureliocarella 21:51e162c130a9 185 if (fp != NULL){
aureliocarella 21:51e162c130a9 186 fprintf(fp, "");
aureliocarella 21:51e162c130a9 187 fclose(fp);
aureliocarella 21:51e162c130a9 188 }
aureliocarella 21:51e162c130a9 189
aureliocarella 21:51e162c130a9 190 fp = fopen(dataFileName, "w");
aureliocarella 21:51e162c130a9 191 if (fp != NULL){
aureliocarella 21:51e162c130a9 192 fprintf(fp, "");
aureliocarella 21:51e162c130a9 193 fclose(fp);
aureliocarella 21:51e162c130a9 194 }
aureliocarella 21:51e162c130a9 195 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 196 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 197 printf("Logging_EraseWrittenSectors done. \n");
aureliocarella 21:51e162c130a9 198 fflush(stdout);
aureliocarella 21:51e162c130a9 199 return 0;
aureliocarella 21:51e162c130a9 200 }
aureliocarella 21:51e162c130a9 201
aureliocarella 21:51e162c130a9 202 //******************************************************************************
aureliocarella 21:51e162c130a9 203 int Logging_Start(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 204 uint32_t reply[1];
aureliocarella 21:51e162c130a9 205 Logging_SetStart(true);
aureliocarella 21:51e162c130a9 206 reply[0] = 0x80; // indicate success
aureliocarella 21:51e162c130a9 207 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 208 return 0;
aureliocarella 21:51e162c130a9 209 }
aureliocarella 21:51e162c130a9 210
aureliocarella 21:51e162c130a9 211 //******************************************************************************
aureliocarella 21:51e162c130a9 212 int Logging_GetLastWrittenPage(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 213 uint32_t reply[1];
aureliocarella 21:51e162c130a9 214
aureliocarella 21:51e162c130a9 215 uint32_t page;
aureliocarella 21:51e162c130a9 216 uint32_t lastPage;
aureliocarella 21:51e162c130a9 217 uint32_t pageEmpty;
aureliocarella 21:51e162c130a9 218 uint8_t data[512];
aureliocarella 21:51e162c130a9 219
aureliocarella 21:51e162c130a9 220 printf("Logging_GetLastWrittenPage ");
aureliocarella 21:51e162c130a9 221 fflush(stdout);
aureliocarella 21:51e162c130a9 222 lastPage = Logging_GetLoggingEndPage();
aureliocarella 21:51e162c130a9 223 for (page = 2; page <= lastPage; page++) {
aureliocarella 21:51e162c130a9 224 // Peripherals::serial()->printf("checking page %d ",page); fflush(stdout);
aureliocarella 21:51e162c130a9 225 // sample the page
aureliocarella 21:51e162c130a9 226 Peripherals::s25FS512()->readPages_Helper(page, page, data, 0);
aureliocarella 21:51e162c130a9 227 pageEmpty = Peripherals::s25FS512()->isPageEmpty(data);
aureliocarella 21:51e162c130a9 228 if (pageEmpty != 0) {
aureliocarella 21:51e162c130a9 229 break;
aureliocarella 21:51e162c130a9 230 }
aureliocarella 21:51e162c130a9 231 }
aureliocarella 21:51e162c130a9 232 if (page > lastPage)
aureliocarella 21:51e162c130a9 233 page = lastPage;
aureliocarella 21:51e162c130a9 234 printf("last page %d, 0x%X ", page, page);
aureliocarella 21:51e162c130a9 235 fflush(stdout);
aureliocarella 21:51e162c130a9 236 reply[0] = page;
aureliocarella 21:51e162c130a9 237 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 238 return 0;
aureliocarella 21:51e162c130a9 239 }
aureliocarella 21:51e162c130a9 240
aureliocarella 21:51e162c130a9 241 extern int highDataRate;
aureliocarella 21:51e162c130a9 242 //******************************************************************************
aureliocarella 21:51e162c130a9 243 int Logging_StartLoggingUsb(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 244 uint32_t reply[1];
aureliocarella 21:51e162c130a9 245 // highDataRate = 0;
aureliocarella 21:51e162c130a9 246 LoggingService_StartLoggingUsb();
aureliocarella 21:51e162c130a9 247 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 248 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 249 return 0;
aureliocarella 21:51e162c130a9 250 }
aureliocarella 21:51e162c130a9 251 //******************************************************************************
aureliocarella 21:51e162c130a9 252 int Logging_StartLoggingFlash(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 253 uint32_t reply[1];
aureliocarella 21:51e162c130a9 254 // highDataRate = 0;
aureliocarella 21:51e162c130a9 255 LoggingService_StartLoggingFlash();
aureliocarella 21:51e162c130a9 256 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 257 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 258 return 0;
aureliocarella 21:51e162c130a9 259 }