Robert Ceschini / Mbed 2 deprecated PSU-POWERLOGGER

Dependencies:   mbed

Fork of PSU-POWERLOGGER by Eli Hughes

Committer:
emh203
Date:
Tue Sep 18 18:35:23 2012 +0000
Revision:
0:d0c18e423b13
Child:
1:871a329fd172
Re-added project from offline version.  COmpiles but need to test!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emh203 0:d0c18e423b13 1 #include "System.h"
emh203 0:d0c18e423b13 2
emh203 0:d0c18e423b13 3 DigitalOut EXT_LED0(LED2);
emh203 0:d0c18e423b13 4 DigitalOut ETH_LED_GREEN(p29);
emh203 0:d0c18e423b13 5 DigitalOut ETH_LED_YELLOW(p30);
emh203 0:d0c18e423b13 6 DigitalIn ActionButton(p28);
emh203 0:d0c18e423b13 7 DigitalIn SDCardDetect(p11);
emh203 0:d0c18e423b13 8 Ticker SystemTick;
emh203 0:d0c18e423b13 9
emh203 0:d0c18e423b13 10 WORD UpdateHostTerminalTick;
emh203 0:d0c18e423b13 11 WORD DisplayUpdateTick;
emh203 0:d0c18e423b13 12 WORD ButtonCheckTick;
emh203 0:d0c18e423b13 13 WORD DisplayShutOffTick;
emh203 0:d0c18e423b13 14
emh203 0:d0c18e423b13 15 BYTE SystemState;
emh203 0:d0c18e423b13 16 CHAR DTBuf[32];
emh203 0:d0c18e423b13 17 CHAR DataLineBuf[256];
emh203 0:d0c18e423b13 18
emh203 0:d0c18e423b13 19 //*****************************************************************
emh203 0:d0c18e423b13 20 //smart Display related stuff
emh203 0:d0c18e423b13 21 //*****************************************************************
emh203 0:d0c18e423b13 22
emh203 0:d0c18e423b13 23 #define DISPLAY_MEASUREMENTS 0x00
emh203 0:d0c18e423b13 24 #define DISPLAY_BATTERY 0x01
emh203 0:d0c18e423b13 25 #define DISPLAY_DATE_TIME 0x02
emh203 0:d0c18e423b13 26 #define DISPLAY_CARD_STATUS 0x03
emh203 0:d0c18e423b13 27 #define DISPLAY_BUFFER_STATS 0x04
emh203 0:d0c18e423b13 28 #define DISPLAY_FIRMWARE_VERSION 0x05
emh203 0:d0c18e423b13 29 #define DISPLAY_ID 0x06
emh203 0:d0c18e423b13 30 #define DISPLAY_OFF 0xFF
emh203 0:d0c18e423b13 31
emh203 0:d0c18e423b13 32 #define NUM_DISPLAYS 7
emh203 0:d0c18e423b13 33 #define DISPLAY_SHUTOFF_TIME 10000
emh203 0:d0c18e423b13 34
emh203 0:d0c18e423b13 35 BYTE DisplayMode;
emh203 0:d0c18e423b13 36 BYTE LastBackLightColor = 0;
emh203 0:d0c18e423b13 37
emh203 0:d0c18e423b13 38 //*****************************************************************
emh203 0:d0c18e423b13 39 //Action Button Related stuff
emh203 0:d0c18e423b13 40 //*****************************************************************
emh203 0:d0c18e423b13 41 #define WAITING_FOR_PRESS 0x00
emh203 0:d0c18e423b13 42 #define WAITING_FOR_RELEASE 0x01
emh203 0:d0c18e423b13 43
emh203 0:d0c18e423b13 44 BYTE PreviousButtonState;
emh203 0:d0c18e423b13 45 BYTE CurrentButtonState;
emh203 0:d0c18e423b13 46 WORD ButtonHoldTime;
emh203 0:d0c18e423b13 47 BYTE ButtonCheckState;
emh203 0:d0c18e423b13 48 void ActionButtonHandler(WORD ButtonPressTime);
emh203 0:d0c18e423b13 49
emh203 0:d0c18e423b13 50 //time Variables
emh203 0:d0c18e423b13 51 time_t CurrentTime_InSec;
emh203 0:d0c18e423b13 52 tm *CurrentTime;
emh203 0:d0c18e423b13 53
emh203 0:d0c18e423b13 54 //*****************************************************************
emh203 0:d0c18e423b13 55 //Logging Related Stuff
emh203 0:d0c18e423b13 56 //*****************************************************************
emh203 0:d0c18e423b13 57 CHAR CurrentLogFileName[256];
emh203 0:d0c18e423b13 58 BOOL InitDataLog();
emh203 0:d0c18e423b13 59 BOOL DataLogError;
emh203 0:d0c18e423b13 60 CHAR *ErrorMsg;
emh203 0:d0c18e423b13 61
emh203 0:d0c18e423b13 62 void CreateLogFileName();
emh203 0:d0c18e423b13 63
emh203 0:d0c18e423b13 64 FATFS MyFileSystem;
emh203 0:d0c18e423b13 65 FIL CurrentLogFileHandle;
emh203 0:d0c18e423b13 66
emh203 0:d0c18e423b13 67 //DataBlock MyDataBlock[2];
emh203 0:d0c18e423b13 68 DataBlock MyDataBlock;
emh203 0:d0c18e423b13 69
emh203 0:d0c18e423b13 70 BYTE ActiveDataBlock;
emh203 0:d0c18e423b13 71 DWORD DataBlocksWritten;
emh203 0:d0c18e423b13 72 DWORD DataPointIndex;
emh203 0:d0c18e423b13 73 SIGNED_DWORD ReadWriteDifferential;
emh203 0:d0c18e423b13 74
emh203 0:d0c18e423b13 75 DWORD WritesSinceLastFlush;
emh203 0:d0c18e423b13 76
emh203 0:d0c18e423b13 77 #define BINARY_WRITE_CACHE_THRESHOLD 512
emh203 0:d0c18e423b13 78 BYTE BinaryDataCache[BINARY_WRITE_CACHE_THRESHOLD + 64];
emh203 0:d0c18e423b13 79 DWORD BinaryDataCachePtr;
emh203 0:d0c18e423b13 80
emh203 0:d0c18e423b13 81 #define NUM_WRITES_BEFORE_FLUSH (10)
emh203 0:d0c18e423b13 82
emh203 0:d0c18e423b13 83 //*****************************************************************
emh203 0:d0c18e423b13 84 //Misc System Related Stuff
emh203 0:d0c18e423b13 85 //*****************************************************************
emh203 0:d0c18e423b13 86 void SystemTickIrq();
emh203 0:d0c18e423b13 87 void AdjustIOffset();
emh203 0:d0c18e423b13 88
emh203 0:d0c18e423b13 89 void InitRobotPowerMeasurementSystem()
emh203 0:d0c18e423b13 90 {
emh203 0:d0c18e423b13 91 InitDataBlocks(&MyDataBlock);
emh203 0:d0c18e423b13 92
emh203 0:d0c18e423b13 93 ActiveDataBlock = 0;
emh203 0:d0c18e423b13 94 DataBlocksWritten = 0;
emh203 0:d0c18e423b13 95 DataPointIndex = 0;
emh203 0:d0c18e423b13 96
emh203 0:d0c18e423b13 97 SystemTick.attach_us(&SystemTickIrq,10000);
emh203 0:d0c18e423b13 98 CurrentTime_InSec = time(NULL);
emh203 0:d0c18e423b13 99
emh203 0:d0c18e423b13 100 DataLogError = FALSE;
emh203 0:d0c18e423b13 101 }
emh203 0:d0c18e423b13 102
emh203 0:d0c18e423b13 103
emh203 0:d0c18e423b13 104 void InitDataBlocks(DataBlock * DB)
emh203 0:d0c18e423b13 105 {
emh203 0:d0c18e423b13 106 int i;
emh203 0:d0c18e423b13 107
emh203 0:d0c18e423b13 108 for(i=0;i<DATA_BLOCK_SIZE;i++)
emh203 0:d0c18e423b13 109 {
emh203 0:d0c18e423b13 110 DB->Voltage[i] = 0;
emh203 0:d0c18e423b13 111 DB->Current[i] = 0;
emh203 0:d0c18e423b13 112 }
emh203 0:d0c18e423b13 113
emh203 0:d0c18e423b13 114 DB->WriteOutPtr = 0;
emh203 0:d0c18e423b13 115 DB->ReadInPtr = 0;
emh203 0:d0c18e423b13 116 }
emh203 0:d0c18e423b13 117
emh203 0:d0c18e423b13 118
emh203 0:d0c18e423b13 119 void EnterSystemState(BYTE NextState)
emh203 0:d0c18e423b13 120 {
emh203 0:d0c18e423b13 121 switch(NextState)
emh203 0:d0c18e423b13 122 {
emh203 0:d0c18e423b13 123 default:
emh203 0:d0c18e423b13 124 case SYSTEM_STATE_INIT:
emh203 0:d0c18e423b13 125 DisplayMode = DISPLAY_MEASUREMENTS;
emh203 0:d0c18e423b13 126 SystemState = NextState;
emh203 0:d0c18e423b13 127 break;
emh203 0:d0c18e423b13 128
emh203 0:d0c18e423b13 129 case SYSTEM_STATE_LOGGING:
emh203 0:d0c18e423b13 130 DisplayMode = DISPLAY_CARD_STATUS;
emh203 0:d0c18e423b13 131
emh203 0:d0c18e423b13 132 if(InitDataLog() == FALSE)
emh203 0:d0c18e423b13 133 {
emh203 0:d0c18e423b13 134 SystemState = NextState;
emh203 0:d0c18e423b13 135
emh203 0:d0c18e423b13 136 }
emh203 0:d0c18e423b13 137 else
emh203 0:d0c18e423b13 138 {
emh203 0:d0c18e423b13 139 SystemState = SYSTEM_STATE_IDLE;
emh203 0:d0c18e423b13 140 }
emh203 0:d0c18e423b13 141
emh203 0:d0c18e423b13 142 break;
emh203 0:d0c18e423b13 143
emh203 0:d0c18e423b13 144 case SYSTEM_STATE_IDLE:
emh203 0:d0c18e423b13 145 DisplayMode = DISPLAY_CARD_STATUS;
emh203 0:d0c18e423b13 146 if(SystemState == SYSTEM_STATE_LOGGING)
emh203 0:d0c18e423b13 147 {
emh203 0:d0c18e423b13 148 f_close(&CurrentLogFileHandle);
emh203 0:d0c18e423b13 149 f_mount(0,NULL);
emh203 0:d0c18e423b13 150 PrintfEnqueue(&PCBackDoorTx,"Logging terminated on file %s\r\n>",CurrentLogFileName);
emh203 0:d0c18e423b13 151 }
emh203 0:d0c18e423b13 152
emh203 0:d0c18e423b13 153 SystemState = NextState;
emh203 0:d0c18e423b13 154 break;
emh203 0:d0c18e423b13 155 }
emh203 0:d0c18e423b13 156 }
emh203 0:d0c18e423b13 157
emh203 0:d0c18e423b13 158 BOOL InitDataLog()
emh203 0:d0c18e423b13 159 {
emh203 0:d0c18e423b13 160 UINT BytesWritten;
emh203 0:d0c18e423b13 161
emh203 0:d0c18e423b13 162 PrintfEnqueue(&PCBackDoorTx,"\r\n\r\bInitializing Data log....\r\n");
emh203 0:d0c18e423b13 163 CreateLogFileName();
emh203 0:d0c18e423b13 164 PrintfEnqueue(&PCBackDoorTx,"Filename: %s\r\n",CurrentLogFileName);
emh203 0:d0c18e423b13 165 PrintfEnqueue(&PCBackDoorTx,"Attempting File Open....\r\n");
emh203 0:d0c18e423b13 166
emh203 0:d0c18e423b13 167
emh203 0:d0c18e423b13 168 f_mount(0,&MyFileSystem);
emh203 0:d0c18e423b13 169 if(f_open(&CurrentLogFileHandle,&CurrentLogFileName[0],FA_WRITE | FA_OPEN_ALWAYS) != FR_OK)
emh203 0:d0c18e423b13 170 {
emh203 0:d0c18e423b13 171 DataLogError = TRUE;
emh203 0:d0c18e423b13 172 PrintfEnqueue(&PCBackDoorTx,"Could not open file!\r\n>");
emh203 0:d0c18e423b13 173 ErrorMsg = "Write Error!";
emh203 0:d0c18e423b13 174 return TRUE;
emh203 0:d0c18e423b13 175 }
emh203 0:d0c18e423b13 176
emh203 0:d0c18e423b13 177
emh203 0:d0c18e423b13 178 DataLogError = FALSE;
emh203 0:d0c18e423b13 179 PrintfEnqueue(&PCBackDoorTx,"Writing Headers....\r\n");
emh203 0:d0c18e423b13 180 time(&CurrentTime_InSec);
emh203 0:d0c18e423b13 181 strftime(DTBuf,128, "%Y.%m.%d", localtime(&CurrentTime_InSec));
emh203 0:d0c18e423b13 182 f_printf(&CurrentLogFileHandle, "Date %s\r\n",DTBuf);
emh203 0:d0c18e423b13 183 strftime(DTBuf,128, "%H:%M:%S", localtime(&CurrentTime_InSec));
emh203 0:d0c18e423b13 184 f_printf(&CurrentLogFileHandle, "Time %s\r\n\n",DTBuf);
emh203 0:d0c18e423b13 185 sprintf(DTBuf, "Sample Rate %.1f Hz\r\n\r\n",SAMPLE_RATE);
emh203 0:d0c18e423b13 186 f_write(&CurrentLogFileHandle,DTBuf,strlen(DTBuf),&BytesWritten);
emh203 0:d0c18e423b13 187 PrintfEnqueue(&PCBackDoorTx,"Headers Written.... Starting log\r\n");
emh203 0:d0c18e423b13 188
emh203 0:d0c18e423b13 189
emh203 0:d0c18e423b13 190 PrintfEnqueue(&PCBackDoorTx,"\r\n>");
emh203 0:d0c18e423b13 191
emh203 0:d0c18e423b13 192
emh203 0:d0c18e423b13 193
emh203 0:d0c18e423b13 194 BinaryDataCachePtr = 0;
emh203 0:d0c18e423b13 195 WritesSinceLastFlush = 0;
emh203 0:d0c18e423b13 196
emh203 0:d0c18e423b13 197 DataBlocksWritten = 0;
emh203 0:d0c18e423b13 198 DataPointIndex = 0;
emh203 0:d0c18e423b13 199
emh203 0:d0c18e423b13 200 return FALSE;
emh203 0:d0c18e423b13 201 }
emh203 0:d0c18e423b13 202
emh203 0:d0c18e423b13 203
emh203 0:d0c18e423b13 204 void CreateLogFileName()
emh203 0:d0c18e423b13 205 {
emh203 0:d0c18e423b13 206 time(&CurrentTime_InSec);
emh203 0:d0c18e423b13 207 strftime(CurrentLogFileName,256, "F%Y.%m.%d.%H.%M.%S.csv", localtime(&CurrentTime_InSec));
emh203 0:d0c18e423b13 208 }
emh203 0:d0c18e423b13 209
emh203 0:d0c18e423b13 210
emh203 0:d0c18e423b13 211
emh203 0:d0c18e423b13 212 void SystemTickIrq()
emh203 0:d0c18e423b13 213 {
emh203 0:d0c18e423b13 214 if(UpdateHostTerminalTick<0xFFFF)
emh203 0:d0c18e423b13 215 UpdateHostTerminalTick++;
emh203 0:d0c18e423b13 216
emh203 0:d0c18e423b13 217 if(DisplayUpdateTick<0xFFFF)
emh203 0:d0c18e423b13 218 DisplayUpdateTick++;
emh203 0:d0c18e423b13 219
emh203 0:d0c18e423b13 220 if(ButtonCheckTick<0xFFFF)
emh203 0:d0c18e423b13 221 ButtonCheckTick++;
emh203 0:d0c18e423b13 222
emh203 0:d0c18e423b13 223 if(DisplayShutOffTick<0xFFFF)
emh203 0:d0c18e423b13 224 DisplayShutOffTick++;
emh203 0:d0c18e423b13 225 }
emh203 0:d0c18e423b13 226
emh203 0:d0c18e423b13 227 void InitButton()
emh203 0:d0c18e423b13 228 {
emh203 0:d0c18e423b13 229 ButtonCheckState = WAITING_FOR_PRESS;
emh203 0:d0c18e423b13 230 ButtonCheckTick = 0;
emh203 0:d0c18e423b13 231 PreviousButtonState = FALSE;
emh203 0:d0c18e423b13 232 CurrentButtonState = FALSE;
emh203 0:d0c18e423b13 233
emh203 0:d0c18e423b13 234 }
emh203 0:d0c18e423b13 235 void CheckButton()
emh203 0:d0c18e423b13 236 {
emh203 0:d0c18e423b13 237 if(ButtonCheckTick>0)
emh203 0:d0c18e423b13 238 {
emh203 0:d0c18e423b13 239 ButtonCheckTick = 0;
emh203 0:d0c18e423b13 240
emh203 0:d0c18e423b13 241 PreviousButtonState = CurrentButtonState;
emh203 0:d0c18e423b13 242 CurrentButtonState = ActionButton.read();
emh203 0:d0c18e423b13 243
emh203 0:d0c18e423b13 244 switch(ButtonCheckState)
emh203 0:d0c18e423b13 245 {
emh203 0:d0c18e423b13 246 default:
emh203 0:d0c18e423b13 247 case WAITING_FOR_PRESS:
emh203 0:d0c18e423b13 248
emh203 0:d0c18e423b13 249 if(CurrentButtonState == TRUE && PreviousButtonState == FALSE)
emh203 0:d0c18e423b13 250 {
emh203 0:d0c18e423b13 251 ButtonCheckState = WAITING_FOR_RELEASE;
emh203 0:d0c18e423b13 252 }
emh203 0:d0c18e423b13 253
emh203 0:d0c18e423b13 254 ButtonHoldTime = 0;
emh203 0:d0c18e423b13 255
emh203 0:d0c18e423b13 256 break;
emh203 0:d0c18e423b13 257
emh203 0:d0c18e423b13 258 case WAITING_FOR_RELEASE:
emh203 0:d0c18e423b13 259
emh203 0:d0c18e423b13 260 if(CurrentButtonState == TRUE && PreviousButtonState == TRUE)
emh203 0:d0c18e423b13 261 {
emh203 0:d0c18e423b13 262 ButtonHoldTime++;
emh203 0:d0c18e423b13 263 }
emh203 0:d0c18e423b13 264 else if(CurrentButtonState == FALSE && PreviousButtonState == TRUE)
emh203 0:d0c18e423b13 265 {
emh203 0:d0c18e423b13 266 ActionButtonHandler(ButtonHoldTime);
emh203 0:d0c18e423b13 267 ButtonCheckState = WAITING_FOR_PRESS;
emh203 0:d0c18e423b13 268 }
emh203 0:d0c18e423b13 269 else
emh203 0:d0c18e423b13 270 {
emh203 0:d0c18e423b13 271 ButtonCheckState = WAITING_FOR_PRESS;
emh203 0:d0c18e423b13 272 }
emh203 0:d0c18e423b13 273 break;
emh203 0:d0c18e423b13 274 }
emh203 0:d0c18e423b13 275 }
emh203 0:d0c18e423b13 276 }
emh203 0:d0c18e423b13 277
emh203 0:d0c18e423b13 278
emh203 0:d0c18e423b13 279 void ActionButtonHandler(WORD ButtonPressTime)
emh203 0:d0c18e423b13 280 {
emh203 0:d0c18e423b13 281 DisplayShutOffTick = 0;
emh203 0:d0c18e423b13 282
emh203 0:d0c18e423b13 283 if(ButtonPressTime<50)
emh203 0:d0c18e423b13 284 {
emh203 0:d0c18e423b13 285 if(DisplayMode == DISPLAY_OFF)
emh203 0:d0c18e423b13 286 {
emh203 0:d0c18e423b13 287 PowerUpSmartSwitch();
emh203 0:d0c18e423b13 288 SmartSwitch_Reset();
emh203 0:d0c18e423b13 289 SmartSwitchClear();
emh203 0:d0c18e423b13 290 DisplayMode = DISPLAY_MEASUREMENTS;
emh203 0:d0c18e423b13 291 }
emh203 0:d0c18e423b13 292 else
emh203 0:d0c18e423b13 293 {
emh203 0:d0c18e423b13 294
emh203 0:d0c18e423b13 295 if(DataLogError == TRUE)
emh203 0:d0c18e423b13 296 {
emh203 0:d0c18e423b13 297 DataLogError = FALSE;
emh203 0:d0c18e423b13 298 }
emh203 0:d0c18e423b13 299 else
emh203 0:d0c18e423b13 300 {
emh203 0:d0c18e423b13 301 DisplayMode++;
emh203 0:d0c18e423b13 302
emh203 0:d0c18e423b13 303 if(DisplayMode >= NUM_DISPLAYS)
emh203 0:d0c18e423b13 304 {
emh203 0:d0c18e423b13 305 DisplayMode = 0;
emh203 0:d0c18e423b13 306 }
emh203 0:d0c18e423b13 307 }
emh203 0:d0c18e423b13 308 }
emh203 0:d0c18e423b13 309 }
emh203 0:d0c18e423b13 310
emh203 0:d0c18e423b13 311 else if(ButtonPressTime>100 && ButtonPressTime<500)
emh203 0:d0c18e423b13 312 {
emh203 0:d0c18e423b13 313 switch(SystemState)
emh203 0:d0c18e423b13 314 {
emh203 0:d0c18e423b13 315 default:
emh203 0:d0c18e423b13 316 case SYSTEM_STATE_IDLE:
emh203 0:d0c18e423b13 317 switch(DisplayMode)
emh203 0:d0c18e423b13 318 {
emh203 0:d0c18e423b13 319 default:
emh203 0:d0c18e423b13 320
emh203 0:d0c18e423b13 321 break;
emh203 0:d0c18e423b13 322
emh203 0:d0c18e423b13 323 case DISPLAY_MEASUREMENTS:
emh203 0:d0c18e423b13 324 AdjustIOffset();
emh203 0:d0c18e423b13 325 break;
emh203 0:d0c18e423b13 326
emh203 0:d0c18e423b13 327
emh203 0:d0c18e423b13 328 case DISPLAY_FIRMWARE_VERSION:
emh203 0:d0c18e423b13 329 LoadConfiguration();
emh203 0:d0c18e423b13 330 break;
emh203 0:d0c18e423b13 331
emh203 0:d0c18e423b13 332
emh203 0:d0c18e423b13 333 case DISPLAY_CARD_STATUS:
emh203 0:d0c18e423b13 334 // if(SDCardDetect == 1)
emh203 0:d0c18e423b13 335 {
emh203 0:d0c18e423b13 336 EnterSystemState(SYSTEM_STATE_LOGGING);
emh203 0:d0c18e423b13 337 }
emh203 0:d0c18e423b13 338 break;
emh203 0:d0c18e423b13 339 }
emh203 0:d0c18e423b13 340 break;
emh203 0:d0c18e423b13 341
emh203 0:d0c18e423b13 342
emh203 0:d0c18e423b13 343 case SYSTEM_STATE_LOGGING:
emh203 0:d0c18e423b13 344 EnterSystemState(SYSTEM_STATE_IDLE);
emh203 0:d0c18e423b13 345 // unmount the file system
emh203 0:d0c18e423b13 346 f_mount(0,NULL);
emh203 0:d0c18e423b13 347 break;
emh203 0:d0c18e423b13 348 }
emh203 0:d0c18e423b13 349 }
emh203 0:d0c18e423b13 350 }
emh203 0:d0c18e423b13 351
emh203 0:d0c18e423b13 352 void AdjustIOffset()
emh203 0:d0c18e423b13 353 {
emh203 0:d0c18e423b13 354 DWORD SamplesToTake;
emh203 0:d0c18e423b13 355 DWORD i;
emh203 0:d0c18e423b13 356 float RunningSum = 0;
emh203 0:d0c18e423b13 357
emh203 0:d0c18e423b13 358 PrintfEnqueue(&PCBackDoorTx,"Zeroing ACS576.....\r\n");
emh203 0:d0c18e423b13 359
emh203 0:d0c18e423b13 360 ADCDataRdy=0;
emh203 0:d0c18e423b13 361
emh203 0:d0c18e423b13 362 SamplesToTake = (DWORD)(SAMPLE_RATE)*2;
emh203 0:d0c18e423b13 363
emh203 0:d0c18e423b13 364 for(i=0;i<SamplesToTake;i++)
emh203 0:d0c18e423b13 365 {
emh203 0:d0c18e423b13 366 SmartSwitch_SetBackLightColor2((BYTE)((float)i/(float)SamplesToTake * 64));
emh203 0:d0c18e423b13 367
emh203 0:d0c18e423b13 368 while(ADCDataRdy == FALSE)
emh203 0:d0c18e423b13 369 {
emh203 0:d0c18e423b13 370
emh203 0:d0c18e423b13 371 }
emh203 0:d0c18e423b13 372 ADCDataRdy = FALSE;
emh203 0:d0c18e423b13 373 RunningSum += RobotBusCurrentHR;
emh203 0:d0c18e423b13 374 }
emh203 0:d0c18e423b13 375
emh203 0:d0c18e423b13 376 ACS576_IOFFSET_TRIM += RunningSum / SamplesToTake;
emh203 0:d0c18e423b13 377
emh203 0:d0c18e423b13 378 SmartSwitch_SetBackLightColor(3,3,3);
emh203 0:d0c18e423b13 379
emh203 0:d0c18e423b13 380 PrintfEnqueue(&PCBackDoorTx,"Exporting new configuration file.....\r\n>");
emh203 0:d0c18e423b13 381
emh203 0:d0c18e423b13 382 ExportConfigurationSettings();
emh203 0:d0c18e423b13 383 }
emh203 0:d0c18e423b13 384
emh203 0:d0c18e423b13 385
emh203 0:d0c18e423b13 386
emh203 0:d0c18e423b13 387
emh203 0:d0c18e423b13 388 BOOL CheckforConfig(CHAR *LineIn)
emh203 0:d0c18e423b13 389 {
emh203 0:d0c18e423b13 390 if(!strcmp(LineIn,"config"))
emh203 0:d0c18e423b13 391 {
emh203 0:d0c18e423b13 392 LoadConfiguration();
emh203 0:d0c18e423b13 393 }
emh203 0:d0c18e423b13 394 return TRUE;
emh203 0:d0c18e423b13 395 }
emh203 0:d0c18e423b13 396
emh203 0:d0c18e423b13 397
emh203 0:d0c18e423b13 398 BOOL CheckForTimeInit(CHAR * LineIn)
emh203 0:d0c18e423b13 399 {
emh203 0:d0c18e423b13 400 if(!strcmp(LineIn,"tinit"))
emh203 0:d0c18e423b13 401 {
emh203 0:d0c18e423b13 402 set_time(1256729737);
emh203 0:d0c18e423b13 403 PrintfEnqueue(&PCBackDoorTx,"\r\nTime Reset\r\n");
emh203 0:d0c18e423b13 404 }
emh203 0:d0c18e423b13 405
emh203 0:d0c18e423b13 406 return TRUE;
emh203 0:d0c18e423b13 407
emh203 0:d0c18e423b13 408 }
emh203 0:d0c18e423b13 409
emh203 0:d0c18e423b13 410 BOOL CheckForTime(CHAR *LineIn)
emh203 0:d0c18e423b13 411 {
emh203 0:d0c18e423b13 412 int Hour,Minute,Second=0;
emh203 0:d0c18e423b13 413 int Items;
emh203 0:d0c18e423b13 414 BOOL Error = FALSE;
emh203 0:d0c18e423b13 415 time_t TimeStampTemp;
emh203 0:d0c18e423b13 416
emh203 0:d0c18e423b13 417
emh203 0:d0c18e423b13 418 Items = sscanf(LineIn, "time=%d : %d : %d", &Hour, &Minute, &Second);
emh203 0:d0c18e423b13 419 if(Items == 3)
emh203 0:d0c18e423b13 420 {
emh203 0:d0c18e423b13 421 PrintfEnqueue(&PCBackDoorTx,"\r\n");
emh203 0:d0c18e423b13 422 if(Hour>23)
emh203 0:d0c18e423b13 423 {
emh203 0:d0c18e423b13 424 PrintfEnqueue(&PCBackDoorTx,"Hour entry must be between 0 and 24\r\n");
emh203 0:d0c18e423b13 425 Error = TRUE;
emh203 0:d0c18e423b13 426 }
emh203 0:d0c18e423b13 427 if(Minute>60)
emh203 0:d0c18e423b13 428 {
emh203 0:d0c18e423b13 429 PrintfEnqueue(&PCBackDoorTx,"Minute entry must be between 0 and 60\r\n");
emh203 0:d0c18e423b13 430 Error = TRUE;
emh203 0:d0c18e423b13 431 }
emh203 0:d0c18e423b13 432 if(Second>60)
emh203 0:d0c18e423b13 433 {
emh203 0:d0c18e423b13 434 PrintfEnqueue(&PCBackDoorTx,"Second entry must be between 0 and 60\r\n");
emh203 0:d0c18e423b13 435 Error = TRUE;
emh203 0:d0c18e423b13 436 }
emh203 0:d0c18e423b13 437
emh203 0:d0c18e423b13 438 if(Error == TRUE)
emh203 0:d0c18e423b13 439 {
emh203 0:d0c18e423b13 440 PrintfEnqueue(&PCBackDoorTx,"Error in time format. Time not changed.\r\n");
emh203 0:d0c18e423b13 441 }
emh203 0:d0c18e423b13 442 else
emh203 0:d0c18e423b13 443 {
emh203 0:d0c18e423b13 444 TimeStampTemp = time(NULL);
emh203 0:d0c18e423b13 445 //convert to tm struct
emh203 0:d0c18e423b13 446 CurrentTime = localtime(&TimeStampTemp);
emh203 0:d0c18e423b13 447 //dump in our new valus
emh203 0:d0c18e423b13 448 CurrentTime->tm_sec = Second;
emh203 0:d0c18e423b13 449 CurrentTime->tm_min = Minute;
emh203 0:d0c18e423b13 450 CurrentTime->tm_hour = Hour;
emh203 0:d0c18e423b13 451 //set the new time
emh203 0:d0c18e423b13 452 set_time(mktime(CurrentTime));
emh203 0:d0c18e423b13 453 PrintfEnqueue(&PCBackDoorTx,"Time set to %d:%d:%d\r\n",Hour,Minute,Second);
emh203 0:d0c18e423b13 454 }
emh203 0:d0c18e423b13 455
emh203 0:d0c18e423b13 456 }
emh203 0:d0c18e423b13 457 return FALSE;
emh203 0:d0c18e423b13 458 }
emh203 0:d0c18e423b13 459
emh203 0:d0c18e423b13 460 BOOL CheckForDate(CHAR *LineIn)
emh203 0:d0c18e423b13 461 {
emh203 0:d0c18e423b13 462 int Day,Month,Year=0;
emh203 0:d0c18e423b13 463 int Items;
emh203 0:d0c18e423b13 464 BOOL Error = FALSE;
emh203 0:d0c18e423b13 465 time_t TimeStampTemp;
emh203 0:d0c18e423b13 466
emh203 0:d0c18e423b13 467 Items = sscanf(LineIn, "date=%d / %d / %d", &Month, &Day, &Year);
emh203 0:d0c18e423b13 468 if(Items == 3)
emh203 0:d0c18e423b13 469 {
emh203 0:d0c18e423b13 470 PrintfEnqueue(&PCBackDoorTx,"\r\n");
emh203 0:d0c18e423b13 471 if(Month>12 || Month < 1)
emh203 0:d0c18e423b13 472 {
emh203 0:d0c18e423b13 473 PrintfEnqueue(&PCBackDoorTx,"Month entry must be between 1 and 12\r\n");
emh203 0:d0c18e423b13 474 Error = TRUE;
emh203 0:d0c18e423b13 475 }
emh203 0:d0c18e423b13 476 if(Day>31 || Day<1)
emh203 0:d0c18e423b13 477 {
emh203 0:d0c18e423b13 478 PrintfEnqueue(&PCBackDoorTx,"Day entry must be between 1 and 31\r\n");
emh203 0:d0c18e423b13 479 Error = TRUE;
emh203 0:d0c18e423b13 480 }
emh203 0:d0c18e423b13 481 if(Year<1900)
emh203 0:d0c18e423b13 482 {
emh203 0:d0c18e423b13 483 PrintfEnqueue(&PCBackDoorTx,"Year entry must be greater than 1900\r\n");
emh203 0:d0c18e423b13 484 Error = TRUE;
emh203 0:d0c18e423b13 485 }
emh203 0:d0c18e423b13 486
emh203 0:d0c18e423b13 487 if(Error == TRUE)
emh203 0:d0c18e423b13 488 {
emh203 0:d0c18e423b13 489 PrintfEnqueue(&PCBackDoorTx,"Error in time format. Date not changed.\r\n");
emh203 0:d0c18e423b13 490 }
emh203 0:d0c18e423b13 491 else
emh203 0:d0c18e423b13 492 {
emh203 0:d0c18e423b13 493 //Get the current time in seconds since unix epoch
emh203 0:d0c18e423b13 494 TimeStampTemp = time(NULL);
emh203 0:d0c18e423b13 495 //convert to tm struct fom
emh203 0:d0c18e423b13 496 CurrentTime = localtime(&TimeStampTemp);
emh203 0:d0c18e423b13 497 //dump in our new valus
emh203 0:d0c18e423b13 498 CurrentTime->tm_mon = Month-1;
emh203 0:d0c18e423b13 499 CurrentTime->tm_mday = Day;
emh203 0:d0c18e423b13 500 CurrentTime->tm_year = Year - 1900;
emh203 0:d0c18e423b13 501 //set the new time
emh203 0:d0c18e423b13 502 set_time(mktime(CurrentTime));
emh203 0:d0c18e423b13 503 PrintfEnqueue(&PCBackDoorTx,"Date set to %d/%d/%d\r\n",Month,Day,Year);
emh203 0:d0c18e423b13 504 }
emh203 0:d0c18e423b13 505
emh203 0:d0c18e423b13 506 }
emh203 0:d0c18e423b13 507 return FALSE;
emh203 0:d0c18e423b13 508 }
emh203 0:d0c18e423b13 509
emh203 0:d0c18e423b13 510
emh203 0:d0c18e423b13 511
emh203 0:d0c18e423b13 512 void UpdateDisplay()
emh203 0:d0c18e423b13 513 {
emh203 0:d0c18e423b13 514
emh203 0:d0c18e423b13 515 if(DisplayShutOffTick > DISPLAY_SHUTOFF_TIME)
emh203 0:d0c18e423b13 516 {
emh203 0:d0c18e423b13 517 DisplayMode = DISPLAY_OFF;
emh203 0:d0c18e423b13 518 SmartSwitchClear();
emh203 0:d0c18e423b13 519 PowerDownSmartSwitch();
emh203 0:d0c18e423b13 520 }
emh203 0:d0c18e423b13 521 else
emh203 0:d0c18e423b13 522 {
emh203 0:d0c18e423b13 523 if(DisplayUpdateTick > 25)
emh203 0:d0c18e423b13 524 {
emh203 0:d0c18e423b13 525 GFX_FullDisplayBufferClear(&BackBuffer);
emh203 0:d0c18e423b13 526 DisplayUpdateTick = 0;
emh203 0:d0c18e423b13 527 switch(DisplayMode)
emh203 0:d0c18e423b13 528 {
emh203 0:d0c18e423b13 529 default:
emh203 0:d0c18e423b13 530 case DISPLAY_MEASUREMENTS:
emh203 0:d0c18e423b13 531 SmartSwitch_SetBackLightColor(3,3,3);
emh203 0:d0c18e423b13 532 GFX_DrawString(&BackBuffer,"Robot Bus",0,0,&Font5x7);
emh203 0:d0c18e423b13 533 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,10);
emh203 0:d0c18e423b13 534 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,11);
emh203 0:d0c18e423b13 535 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,12);
emh203 0:d0c18e423b13 536
emh203 0:d0c18e423b13 537 GFX_printf(&BackBuffer,0,16,&Font5x7,"V: %.2fv",RobotBusVoltageHR);
emh203 0:d0c18e423b13 538 GFX_printf(&BackBuffer,0,24,&Font5x7,"I: %.2fa",RobotBusCurrentHR);
emh203 0:d0c18e423b13 539 break;
emh203 0:d0c18e423b13 540
emh203 0:d0c18e423b13 541
emh203 0:d0c18e423b13 542 case DISPLAY_BATTERY:
emh203 0:d0c18e423b13 543 SmartSwitch_SetBackLightColor(3,3,0);
emh203 0:d0c18e423b13 544 GFX_DrawString(&BackBuffer,"Battery",0,0,&Font5x7);
emh203 0:d0c18e423b13 545 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,10);
emh203 0:d0c18e423b13 546 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,11);
emh203 0:d0c18e423b13 547 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,12);
emh203 0:d0c18e423b13 548
emh203 0:d0c18e423b13 549 GFX_printf(&BackBuffer,0,16,&Font5x7,"V: %.1fv",BatteryVoltage);
emh203 0:d0c18e423b13 550
emh203 0:d0c18e423b13 551 break;
emh203 0:d0c18e423b13 552
emh203 0:d0c18e423b13 553 case DISPLAY_DATE_TIME:
emh203 0:d0c18e423b13 554 SmartSwitch_SetBackLightColor(1,3,0);
emh203 0:d0c18e423b13 555 GFX_DrawString(&BackBuffer,"Date/Time",0,0,&Font5x7);
emh203 0:d0c18e423b13 556 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,10);
emh203 0:d0c18e423b13 557 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,11);
emh203 0:d0c18e423b13 558 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,12);
emh203 0:d0c18e423b13 559
emh203 0:d0c18e423b13 560 time(&CurrentTime_InSec);
emh203 0:d0c18e423b13 561 strftime(DTBuf, 32, "%m.%d.%Y", localtime(&CurrentTime_InSec));
emh203 0:d0c18e423b13 562 GFX_printf(&BackBuffer,0,16,&Font5x7,"%s",DTBuf);
emh203 0:d0c18e423b13 563
emh203 0:d0c18e423b13 564 strftime(DTBuf, 32, "%H:%M:%S", localtime(&CurrentTime_InSec));
emh203 0:d0c18e423b13 565 GFX_printf(&BackBuffer,0,24,&Font5x7,"%s",DTBuf);
emh203 0:d0c18e423b13 566 break;
emh203 0:d0c18e423b13 567
emh203 0:d0c18e423b13 568 case DISPLAY_BUFFER_STATS:
emh203 0:d0c18e423b13 569 SmartSwitch_SetBackLightColor(3,3,3);
emh203 0:d0c18e423b13 570 GFX_DrawString(&BackBuffer,"Buf Status",0,0,&Font5x7);
emh203 0:d0c18e423b13 571 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,10);
emh203 0:d0c18e423b13 572 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,11);
emh203 0:d0c18e423b13 573 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,12);
emh203 0:d0c18e423b13 574 GFX_printf(&BackBuffer,0,16,&Font3x5,"R/W Diff:");
emh203 0:d0c18e423b13 575 GFX_printf(&BackBuffer,0,24,&Font3x5,"%04d/%d",ReadWriteDifferential,DATA_BLOCK_SIZE);
emh203 0:d0c18e423b13 576 break;
emh203 0:d0c18e423b13 577
emh203 0:d0c18e423b13 578 case DISPLAY_FIRMWARE_VERSION:
emh203 0:d0c18e423b13 579 SmartSwitch_SetBackLightColor(3,3,3);
emh203 0:d0c18e423b13 580 GFX_DrawString(&BackBuffer,"Firmware Version",0,0,&Font3x5);
emh203 0:d0c18e423b13 581 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,10);
emh203 0:d0c18e423b13 582 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,11);
emh203 0:d0c18e423b13 583 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,12);
emh203 0:d0c18e423b13 584 GFX_printf(&BackBuffer,19,20,&Font5x7,"%d.%d",FIRMWARE_VERSION_MAJOR,FIRMWARE_VERSION_MINOR);
emh203 0:d0c18e423b13 585 break;
emh203 0:d0c18e423b13 586
emh203 0:d0c18e423b13 587 case DISPLAY_ID:
emh203 0:d0c18e423b13 588 SmartSwitch_SetBackLightColor(3,3,3);
emh203 0:d0c18e423b13 589 GFX_DrawString(&BackBuffer,"ID",0,0,&Font3x5);
emh203 0:d0c18e423b13 590 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,10);
emh203 0:d0c18e423b13 591 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,11);
emh203 0:d0c18e423b13 592 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,12);
emh203 0:d0c18e423b13 593 GFX_printf(&BackBuffer,0,20,&Font5x7,"%s",ID);
emh203 0:d0c18e423b13 594 break;
emh203 0:d0c18e423b13 595
emh203 0:d0c18e423b13 596 case DISPLAY_CARD_STATUS:
emh203 0:d0c18e423b13 597
emh203 0:d0c18e423b13 598 if(1)
emh203 0:d0c18e423b13 599 {
emh203 0:d0c18e423b13 600
emh203 0:d0c18e423b13 601 switch(SystemState)
emh203 0:d0c18e423b13 602 {
emh203 0:d0c18e423b13 603 default:
emh203 0:d0c18e423b13 604 case SYSTEM_STATE_IDLE:
emh203 0:d0c18e423b13 605 switch(LastBackLightColor)
emh203 0:d0c18e423b13 606 {
emh203 0:d0c18e423b13 607 default:
emh203 0:d0c18e423b13 608 case SMART_SWITCH_BACKLIGHT_GREEN:
emh203 0:d0c18e423b13 609 LastBackLightColor = SMART_SWITCH_BACKLIGHT_YELLOW;
emh203 0:d0c18e423b13 610 SmartSwitch_SetBackLightColor2(LastBackLightColor);
emh203 0:d0c18e423b13 611 break;
emh203 0:d0c18e423b13 612
emh203 0:d0c18e423b13 613 case SMART_SWITCH_BACKLIGHT_YELLOW:
emh203 0:d0c18e423b13 614 LastBackLightColor = SMART_SWITCH_BACKLIGHT_GREEN;
emh203 0:d0c18e423b13 615 SmartSwitch_SetBackLightColor2(LastBackLightColor);
emh203 0:d0c18e423b13 616 break;
emh203 0:d0c18e423b13 617 }
emh203 0:d0c18e423b13 618
emh203 0:d0c18e423b13 619
emh203 0:d0c18e423b13 620 if(DataLogError == TRUE)
emh203 0:d0c18e423b13 621 {
emh203 0:d0c18e423b13 622 GFX_DrawString(&BackBuffer,"Error!",0,0,&Font5x7);
emh203 0:d0c18e423b13 623 GFX_DrawString(&BackBuffer,ErrorMsg,0,16,&Font3x5);
emh203 0:d0c18e423b13 624 }
emh203 0:d0c18e423b13 625 else
emh203 0:d0c18e423b13 626 {
emh203 0:d0c18e423b13 627 GFX_DrawString(&BackBuffer,"SD Detected",0,16,&Font5x7);
emh203 0:d0c18e423b13 628 GFX_DrawString(&BackBuffer,"Idle....",0,0,&Font5x7);
emh203 0:d0c18e423b13 629 GFX_DrawString(&BackBuffer,"Not Logging",0,24,&Font5x7);
emh203 0:d0c18e423b13 630 }
emh203 0:d0c18e423b13 631 break;
emh203 0:d0c18e423b13 632
emh203 0:d0c18e423b13 633
emh203 0:d0c18e423b13 634 case SYSTEM_STATE_LOGGING:
emh203 0:d0c18e423b13 635 SmartSwitch_SetBackLightColor2(SMART_SWITCH_BACKLIGHT_GREEN);
emh203 0:d0c18e423b13 636
emh203 0:d0c18e423b13 637 GFX_DrawString(&BackBuffer,"Logging Data....",0,0,&Font5x7);
emh203 0:d0c18e423b13 638 GFX_DrawString(&BackBuffer,&CurrentLogFileName[4],0,16,&Font5x7);
emh203 0:d0c18e423b13 639 GFX_printf(&BackBuffer,0,26,&Font3x5,"Block: %d",DataBlocksWritten);
emh203 0:d0c18e423b13 640
emh203 0:d0c18e423b13 641 break;
emh203 0:d0c18e423b13 642 }
emh203 0:d0c18e423b13 643 }
emh203 0:d0c18e423b13 644 else
emh203 0:d0c18e423b13 645 {
emh203 0:d0c18e423b13 646 GFX_DrawString(&BackBuffer,"No SD Card!",0,0,&Font5x7);
emh203 0:d0c18e423b13 647
emh203 0:d0c18e423b13 648 switch(LastBackLightColor)
emh203 0:d0c18e423b13 649 {
emh203 0:d0c18e423b13 650 default:
emh203 0:d0c18e423b13 651 case SMART_SWITCH_BACKLIGHT_RED:
emh203 0:d0c18e423b13 652 LastBackLightColor = SMART_SWITCH_BACKLIGHT_YELLOW;
emh203 0:d0c18e423b13 653 SmartSwitch_SetBackLightColor2(LastBackLightColor);
emh203 0:d0c18e423b13 654 break;
emh203 0:d0c18e423b13 655
emh203 0:d0c18e423b13 656 case SMART_SWITCH_BACKLIGHT_YELLOW:
emh203 0:d0c18e423b13 657 LastBackLightColor = SMART_SWITCH_BACKLIGHT_RED;
emh203 0:d0c18e423b13 658 SmartSwitch_SetBackLightColor2(LastBackLightColor);
emh203 0:d0c18e423b13 659 break;
emh203 0:d0c18e423b13 660 }
emh203 0:d0c18e423b13 661 }
emh203 0:d0c18e423b13 662
emh203 0:d0c18e423b13 663 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,10);
emh203 0:d0c18e423b13 664 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,11);
emh203 0:d0c18e423b13 665 GFX_DrawHline(&BackBuffer,0,PHYSICAL_DISPLAY_XRES-1,12);
emh203 0:d0c18e423b13 666
emh203 0:d0c18e423b13 667 break;
emh203 0:d0c18e423b13 668 }
emh203 0:d0c18e423b13 669 GFX_DumpRenderContextToPhysicalScreen(&BackBuffer);
emh203 0:d0c18e423b13 670 }
emh203 0:d0c18e423b13 671 }
emh203 0:d0c18e423b13 672 }
emh203 0:d0c18e423b13 673
emh203 0:d0c18e423b13 674
emh203 0:d0c18e423b13 675 void CheckSDCardStatus()
emh203 0:d0c18e423b13 676 {
emh203 0:d0c18e423b13 677 //Make sure that the SD card stays in while logging
emh203 0:d0c18e423b13 678 switch(SystemState)
emh203 0:d0c18e423b13 679 {
emh203 0:d0c18e423b13 680 case SYSTEM_STATE_LOGGING:
emh203 0:d0c18e423b13 681 //if(SDCardDetect == 0)
emh203 0:d0c18e423b13 682 {
emh203 0:d0c18e423b13 683 //Gracefully shut the logging system down.....
emh203 0:d0c18e423b13 684 // EnterSystemState(SYSTEM_STATE_IDLE);
emh203 0:d0c18e423b13 685 }
emh203 0:d0c18e423b13 686 break;
emh203 0:d0c18e423b13 687
emh203 0:d0c18e423b13 688 default:
emh203 0:d0c18e423b13 689 break;
emh203 0:d0c18e423b13 690 }
emh203 0:d0c18e423b13 691 }
emh203 0:d0c18e423b13 692
emh203 0:d0c18e423b13 693
emh203 0:d0c18e423b13 694 void LogData()
emh203 0:d0c18e423b13 695 {
emh203 0:d0c18e423b13 696 WORD i;
emh203 0:d0c18e423b13 697 int ElementsToWrite;
emh203 0:d0c18e423b13 698 UINT BytesWritten;
emh203 0:d0c18e423b13 699
emh203 0:d0c18e423b13 700 if(RobotBusVoltageHR < 9)
emh203 0:d0c18e423b13 701 {
emh203 0:d0c18e423b13 702 // EnterSystemState(SYSTEM_STATE_IDLE);
emh203 0:d0c18e423b13 703 return;
emh203 0:d0c18e423b13 704 }
emh203 0:d0c18e423b13 705
emh203 0:d0c18e423b13 706 if(DataLogError == TRUE)
emh203 0:d0c18e423b13 707 {
emh203 0:d0c18e423b13 708 //EnterSystemState(SYSTEM_STATE_IDLE);
emh203 0:d0c18e423b13 709 }
emh203 0:d0c18e423b13 710 else
emh203 0:d0c18e423b13 711 {
emh203 0:d0c18e423b13 712 if(MyDataBlock.ReadInPtr < MyDataBlock.WriteOutPtr)
emh203 0:d0c18e423b13 713 {
emh203 0:d0c18e423b13 714 ElementsToWrite = MyDataBlock.ReadInPtr + (DATA_BLOCK_SIZE - MyDataBlock.WriteOutPtr);
emh203 0:d0c18e423b13 715 }
emh203 0:d0c18e423b13 716 else
emh203 0:d0c18e423b13 717 {
emh203 0:d0c18e423b13 718 ElementsToWrite = MyDataBlock.ReadInPtr - MyDataBlock.WriteOutPtr;
emh203 0:d0c18e423b13 719 }
emh203 0:d0c18e423b13 720
emh203 0:d0c18e423b13 721 if(ElementsToWrite > WRITE_BLOCK_THRESH)
emh203 0:d0c18e423b13 722 {
emh203 0:d0c18e423b13 723 for(i=0;i<ElementsToWrite;i++)
emh203 0:d0c18e423b13 724 {
emh203 0:d0c18e423b13 725 BinaryDataCachePtr += sprintf((char *)&BinaryDataCache[BinaryDataCachePtr],"%d,%.2f,%.2f\r\n",DataPointIndex,MyDataBlock.Voltage[MyDataBlock.WriteOutPtr],MyDataBlock.Current[MyDataBlock.WriteOutPtr]);
emh203 0:d0c18e423b13 726 if(BinaryDataCachePtr>=BINARY_WRITE_CACHE_THRESHOLD)
emh203 0:d0c18e423b13 727 {
emh203 0:d0c18e423b13 728 EXT_LED0 = 1;
emh203 0:d0c18e423b13 729 f_write(&CurrentLogFileHandle,BinaryDataCache,BinaryDataCachePtr,&BytesWritten);
emh203 0:d0c18e423b13 730
emh203 0:d0c18e423b13 731 BinaryDataCachePtr = 0;
emh203 0:d0c18e423b13 732
emh203 0:d0c18e423b13 733 EXT_LED0=0;
emh203 0:d0c18e423b13 734 }
emh203 0:d0c18e423b13 735 DataPointIndex++;
emh203 0:d0c18e423b13 736 MyDataBlock.WriteOutPtr++;
emh203 0:d0c18e423b13 737 if(MyDataBlock.WriteOutPtr == DATA_BLOCK_SIZE)
emh203 0:d0c18e423b13 738 {
emh203 0:d0c18e423b13 739 MyDataBlock.WriteOutPtr = 0;
emh203 0:d0c18e423b13 740 }
emh203 0:d0c18e423b13 741 }
emh203 0:d0c18e423b13 742 if(WritesSinceLastFlush > NUM_WRITES_BEFORE_FLUSH)
emh203 0:d0c18e423b13 743 {
emh203 0:d0c18e423b13 744 f_close(&CurrentLogFileHandle);
emh203 0:d0c18e423b13 745 WritesSinceLastFlush = 0;
emh203 0:d0c18e423b13 746 f_open(&CurrentLogFileHandle,&CurrentLogFileName[0],FA_WRITE | FA_OPEN_ALWAYS);
emh203 0:d0c18e423b13 747 f_lseek(&CurrentLogFileHandle, CurrentLogFileHandle.fsize);
emh203 0:d0c18e423b13 748 }
emh203 0:d0c18e423b13 749 DataBlocksWritten++;
emh203 0:d0c18e423b13 750 }
emh203 0:d0c18e423b13 751 }
emh203 0:d0c18e423b13 752 }
emh203 0:d0c18e423b13 753
emh203 0:d0c18e423b13 754
emh203 0:d0c18e423b13 755
emh203 0:d0c18e423b13 756 void DisplayBootMsg()
emh203 0:d0c18e423b13 757 {
emh203 0:d0c18e423b13 758 PrintfEnqueue(&PCBackDoorTx,"\r\n\r\n");
emh203 0:d0c18e423b13 759 PrintfEnqueue(&PCBackDoorTx,".______ _______. __ __ ___ .______ __ \r\n");
emh203 0:d0c18e423b13 760 PrintfEnqueue(&PCBackDoorTx,"| _ \\ / || | | | / \\ | _ \\ | | \r\n");
emh203 0:d0c18e423b13 761 PrintfEnqueue(&PCBackDoorTx,"| |_) | | (----`| | | | ______ / ^ \\ | |_) | | | \r\n");
emh203 0:d0c18e423b13 762 PrintfEnqueue(&PCBackDoorTx,"| ___/ \\ \\ | | | | |______/ /_\\ \\ | / | | \r\n");
emh203 0:d0c18e423b13 763 PrintfEnqueue(&PCBackDoorTx,"| | .----) | | `--' | / _____ \\ | |\\ \\----.| `----.\r\n");
emh203 0:d0c18e423b13 764 PrintfEnqueue(&PCBackDoorTx,"| _| |_______/ \\______/ /__/ \\__\\ | _| `._____||_______|\r\n");
emh203 0:d0c18e423b13 765 PrintfEnqueue(&PCBackDoorTx,"---------------------------------------------------------------------------\r\n");
emh203 0:d0c18e423b13 766 PrintfEnqueue(&PCBackDoorTx,"Robot Power Logger Control Terminal\r\n\r\n>");
emh203 0:d0c18e423b13 767 }
emh203 0:d0c18e423b13 768