Maxim Integrated / MAX30001EVSYSKIT
Committer:
Emre.Eken
Date:
Wed Jun 27 14:17:34 2018 +0300
Revision:
1:957e5bad16c2
first rev

Who changed what in which revision?

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