Dependencies:   mbed

Committer:
emh203
Date:
Thu Feb 16 00:41:26 2012 +0000
Revision:
0:76427232f435

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emh203 0:76427232f435 1 #include "Terminal.h"
emh203 0:76427232f435 2 #include "DataTypes.h"
emh203 0:76427232f435 3 #include "mbed.h"
emh203 0:76427232f435 4 #include "MODSERIAL.h"
emh203 0:76427232f435 5 #include "diskio.h"
emh203 0:76427232f435 6 #include "USBHost.h"
emh203 0:76427232f435 7
emh203 0:76427232f435 8 //*****************************************************************
emh203 0:76427232f435 9 //Terminal Configuration
emh203 0:76427232f435 10 //*****************************************************************
emh203 0:76427232f435 11
emh203 0:76427232f435 12 #define MAX_TERMINAL_LINE_CHARS 64
emh203 0:76427232f435 13 #define MAX_TERMINAL_CMD_CHARS 32
emh203 0:76427232f435 14 #define TERMINAL_QUEUE_SIZE 512
emh203 0:76427232f435 15 #define NUM_TERMINAL_CMDS 3
emh203 0:76427232f435 16
emh203 0:76427232f435 17
emh203 0:76427232f435 18 MODSERIAL pc(USBTX, USBRX,TERMINAL_QUEUE_SIZE,TERMINAL_QUEUE_SIZE); // tx, rx
emh203 0:76427232f435 19
emh203 0:76427232f435 20 Timer DataSpeedTimer;
emh203 0:76427232f435 21
emh203 0:76427232f435 22 typedef void (*TerminalCallback)(char *);
emh203 0:76427232f435 23
emh203 0:76427232f435 24 //These are the terminal command names that map to the callbacks
emh203 0:76427232f435 25 char *TerminalCommands[NUM_TERMINAL_CMDS] = {"help","reboot","dprobe"};
emh203 0:76427232f435 26
emh203 0:76427232f435 27 void TerminalCmd_Help(char *arg);
emh203 0:76427232f435 28 void TerminalCmd_Reboot(char *arg);
emh203 0:76427232f435 29 void TerminalCmd_dprobe(char *arg);
emh203 0:76427232f435 30
emh203 0:76427232f435 31
emh203 0:76427232f435 32 //Probes a disk
emh203 0:76427232f435 33 BOOL dprobe(BYTE Disk);
emh203 0:76427232f435 34 void SpeedTest(BYTE Disk,DWORD SECTORS_TO_READ_WRITE);
emh203 0:76427232f435 35
emh203 0:76427232f435 36
emh203 0:76427232f435 37
emh203 0:76427232f435 38 //Populate this array with the callback functions
emh203 0:76427232f435 39 TerminalCallback TerminalCallbacks[NUM_TERMINAL_CMDS] ={
emh203 0:76427232f435 40 TerminalCmd_Help,
emh203 0:76427232f435 41 TerminalCmd_Reboot,
emh203 0:76427232f435 42 TerminalCmd_dprobe
emh203 0:76427232f435 43 };
emh203 0:76427232f435 44
emh203 0:76427232f435 45 //*****************************************************************
emh203 0:76427232f435 46 //Plumbing.....
emh203 0:76427232f435 47 //*****************************************************************
emh203 0:76427232f435 48
emh203 0:76427232f435 49
emh203 0:76427232f435 50 BYTE TerminalInQueueStore[TERMINAL_QUEUE_SIZE];
emh203 0:76427232f435 51 BYTE TerminalOutQueueStore[TERMINAL_QUEUE_SIZE];
emh203 0:76427232f435 52 CHAR TerminalLineBuf[MAX_TERMINAL_LINE_CHARS];
emh203 0:76427232f435 53 BYTE TerminalPos;
emh203 0:76427232f435 54 CHAR TerminalCmdBuf[MAX_TERMINAL_CMD_CHARS+1];
emh203 0:76427232f435 55 CHAR TerminalArgs[MAX_TERMINAL_LINE_CHARS-MAX_TERMINAL_CMD_CHARS];
emh203 0:76427232f435 56 BYTE NextCharIn;
emh203 0:76427232f435 57 BOOL CmdFound;
emh203 0:76427232f435 58
emh203 0:76427232f435 59 void TerminalBootMsg()
emh203 0:76427232f435 60 {
emh203 0:76427232f435 61
emh203 0:76427232f435 62 TERMINAL_PRINTF("\r\n\r\n");
emh203 0:76427232f435 63 TERMINAL_PRINTF("***********************************\r\n");
emh203 0:76427232f435 64 TERMINAL_PRINTF(" /|\r\n");
emh203 0:76427232f435 65 TERMINAL_PRINTF(" ____ __ -- |\r\n");
emh203 0:76427232f435 66 TERMINAL_PRINTF(" (___ \\ \\ \\ _|_\r\n");
emh203 0:76427232f435 67 TERMINAL_PRINTF(" __) )______\\ \\ \r\n");
emh203 0:76427232f435 68 TERMINAL_PRINTF(" / __/( __ )> \\ \r\n");
emh203 0:76427232f435 69 TERMINAL_PRINTF(" | |___ | || |/ ^ \\ \r\n");
emh203 0:76427232f435 70 TERMINAL_PRINTF(" |_____)|_||_/_/ \\_\\ \r\n");
emh203 0:76427232f435 71 TERMINAL_PRINTF(" \r\n");
emh203 0:76427232f435 72 TERMINAL_PRINTF("Active Pickguard \r\n");
emh203 0:76427232f435 73 TERMINAL_PRINTF("Copyright (C) <2011> Eli Hughes\r\n");
emh203 0:76427232f435 74 TERMINAL_PRINTF("Wavenumber LLC\r\n");
emh203 0:76427232f435 75 TERMINAL_PRINTF("***********************************\r\n\r\n>");
emh203 0:76427232f435 76
emh203 0:76427232f435 77 }
emh203 0:76427232f435 78
emh203 0:76427232f435 79 void InitTerminal()
emh203 0:76427232f435 80 {
emh203 0:76427232f435 81 TerminalBootMsg();
emh203 0:76427232f435 82 }
emh203 0:76427232f435 83
emh203 0:76427232f435 84 void TerminalCmd_Help(char *arg)
emh203 0:76427232f435 85 {
emh203 0:76427232f435 86 BYTE i;
emh203 0:76427232f435 87
emh203 0:76427232f435 88 TERMINAL_PRINTF("\r\n\r\bCommandList:\r\n");
emh203 0:76427232f435 89 TERMINAL_PRINTF("----------------------\r\n");
emh203 0:76427232f435 90
emh203 0:76427232f435 91 for(i=0;i<NUM_TERMINAL_CMDS;i++)
emh203 0:76427232f435 92 {
emh203 0:76427232f435 93 TERMINAL_PRINTF("%s\r\n",TerminalCommands[i]);
emh203 0:76427232f435 94 }
emh203 0:76427232f435 95
emh203 0:76427232f435 96 }
emh203 0:76427232f435 97
emh203 0:76427232f435 98 void TerminalCmd_Reboot(char *arg)
emh203 0:76427232f435 99 {
emh203 0:76427232f435 100 TerminalBootMsg();
emh203 0:76427232f435 101 }
emh203 0:76427232f435 102
emh203 0:76427232f435 103 void TerminalCmd_dprobe(char *arg)
emh203 0:76427232f435 104 {
emh203 0:76427232f435 105 if(strcmp(arg,"CF") == 0)
emh203 0:76427232f435 106 {
emh203 0:76427232f435 107 if(dprobe(COMPACT_FLASH)==TRUE)
emh203 0:76427232f435 108 SpeedTest(COMPACT_FLASH,4096);
emh203 0:76427232f435 109 }
emh203 0:76427232f435 110 else if (strcmp(arg,"USB") == 0)
emh203 0:76427232f435 111 {
emh203 0:76427232f435 112 if(dprobe(USB)==TRUE)
emh203 0:76427232f435 113 SpeedTest(USB,256);
emh203 0:76427232f435 114 }
emh203 0:76427232f435 115 else if (strcmp(arg,"RAM") == 0)
emh203 0:76427232f435 116 {
emh203 0:76427232f435 117
emh203 0:76427232f435 118 if(dprobe(RAM)==TRUE)
emh203 0:76427232f435 119 SpeedTest(RAM,8192);
emh203 0:76427232f435 120 }
emh203 0:76427232f435 121 else
emh203 0:76427232f435 122 {
emh203 0:76427232f435 123 TERMINAL_PRINTF("\r\nUsage: dprobe DISK\r\n\r\nDISK can be CF, USB or RAM\r\n");
emh203 0:76427232f435 124 }
emh203 0:76427232f435 125 }
emh203 0:76427232f435 126
emh203 0:76427232f435 127
emh203 0:76427232f435 128 void ProcessTerminal()
emh203 0:76427232f435 129 {
emh203 0:76427232f435 130 BYTE i,j;
emh203 0:76427232f435 131 BOOL ArgsFound;
emh203 0:76427232f435 132
emh203 0:76427232f435 133 if(TERMINAL_READABLE)
emh203 0:76427232f435 134 {
emh203 0:76427232f435 135 NextCharIn = TERMINAL_GETC;
emh203 0:76427232f435 136
emh203 0:76427232f435 137 switch(NextCharIn)
emh203 0:76427232f435 138 {
emh203 0:76427232f435 139 case '\r':
emh203 0:76427232f435 140
emh203 0:76427232f435 141 TerminalLineBuf[TerminalPos++] = 0x0;
emh203 0:76427232f435 142 TERMINAL_PUTC(NextCharIn);
emh203 0:76427232f435 143
emh203 0:76427232f435 144 if(TerminalPos > 1)
emh203 0:76427232f435 145 {
emh203 0:76427232f435 146 //find the command
emh203 0:76427232f435 147 i=0;
emh203 0:76427232f435 148 while(TerminalLineBuf[i]>0x20 && TerminalLineBuf[i]<0x7f)
emh203 0:76427232f435 149 {
emh203 0:76427232f435 150 TerminalCmdBuf[i] = TerminalLineBuf[i];
emh203 0:76427232f435 151 i++;
emh203 0:76427232f435 152
emh203 0:76427232f435 153 if(i==MAX_TERMINAL_CMD_CHARS)
emh203 0:76427232f435 154 {
emh203 0:76427232f435 155 break;
emh203 0:76427232f435 156 }
emh203 0:76427232f435 157 }
emh203 0:76427232f435 158
emh203 0:76427232f435 159 TerminalCmdBuf[i] = 0;
emh203 0:76427232f435 160 TerminalCmdBuf[i+1] = 0;
emh203 0:76427232f435 161
emh203 0:76427232f435 162
emh203 0:76427232f435 163 ArgsFound = TRUE;
emh203 0:76427232f435 164 memset(TerminalArgs,0x00,sizeof(TerminalArgs));
emh203 0:76427232f435 165 //scan for num terminator or next non whitespace
emh203 0:76427232f435 166 while(TerminalLineBuf[i]<=0x20 && (i<MAX_TERMINAL_LINE_CHARS))
emh203 0:76427232f435 167 {
emh203 0:76427232f435 168 if(TerminalLineBuf[i] == 0x00)
emh203 0:76427232f435 169 {
emh203 0:76427232f435 170
emh203 0:76427232f435 171 //if we find a NULL terminator before a non whitespace character they flag for no arguments
emh203 0:76427232f435 172 ArgsFound = FALSE;
emh203 0:76427232f435 173 break;
emh203 0:76427232f435 174 }
emh203 0:76427232f435 175 i++;
emh203 0:76427232f435 176 }
emh203 0:76427232f435 177
emh203 0:76427232f435 178 if(ArgsFound == TRUE)
emh203 0:76427232f435 179 {
emh203 0:76427232f435 180 strcpy(TerminalArgs,&TerminalLineBuf[i]);
emh203 0:76427232f435 181
emh203 0:76427232f435 182 //trim trailing whitespace
emh203 0:76427232f435 183 i = sizeof(TerminalArgs)-1;
emh203 0:76427232f435 184
emh203 0:76427232f435 185 while((TerminalArgs[i]<0x21) && (i>0))
emh203 0:76427232f435 186 {
emh203 0:76427232f435 187 TerminalArgs[i]= 0x00;
emh203 0:76427232f435 188 i--;
emh203 0:76427232f435 189 }
emh203 0:76427232f435 190 }
emh203 0:76427232f435 191
emh203 0:76427232f435 192 CmdFound = FALSE;
emh203 0:76427232f435 193 for(j=0;j<NUM_TERMINAL_CMDS;j++)
emh203 0:76427232f435 194 {
emh203 0:76427232f435 195 if(strcmp(TerminalCmdBuf,TerminalCommands[j]) == 0)
emh203 0:76427232f435 196 {
emh203 0:76427232f435 197 TERMINAL_PRINTF("\r\n");
emh203 0:76427232f435 198 if(TerminalCallbacks[j] != NULL)
emh203 0:76427232f435 199 TerminalCallbacks[j](TerminalArgs);
emh203 0:76427232f435 200
emh203 0:76427232f435 201 CmdFound = TRUE;
emh203 0:76427232f435 202 break;
emh203 0:76427232f435 203 }
emh203 0:76427232f435 204 }
emh203 0:76427232f435 205 if(CmdFound == FALSE)
emh203 0:76427232f435 206 {
emh203 0:76427232f435 207 TERMINAL_PRINTF("\r\n%s command not recognized.\r\n",TerminalCmdBuf);
emh203 0:76427232f435 208 }
emh203 0:76427232f435 209 }
emh203 0:76427232f435 210 TERMINAL_PRINTF("\r\n>");
emh203 0:76427232f435 211 TerminalPos = 0;
emh203 0:76427232f435 212
emh203 0:76427232f435 213 break;
emh203 0:76427232f435 214
emh203 0:76427232f435 215 case '\b':
emh203 0:76427232f435 216 if(TerminalPos > 0)
emh203 0:76427232f435 217 {
emh203 0:76427232f435 218 TerminalPos--;
emh203 0:76427232f435 219 TERMINAL_PUTC(NextCharIn);
emh203 0:76427232f435 220 }
emh203 0:76427232f435 221 break;
emh203 0:76427232f435 222
emh203 0:76427232f435 223 default:
emh203 0:76427232f435 224
emh203 0:76427232f435 225 if(TerminalPos == 0 && NextCharIn == 0x020)
emh203 0:76427232f435 226 {
emh203 0:76427232f435 227 //Do nothing if space bar is pressed at beginning of line
emh203 0:76427232f435 228 }
emh203 0:76427232f435 229 else if(NextCharIn >= 0x20 && NextCharIn<0x7F)
emh203 0:76427232f435 230 {
emh203 0:76427232f435 231
emh203 0:76427232f435 232 if(TerminalPos < MAX_TERMINAL_LINE_CHARS-1)
emh203 0:76427232f435 233 {
emh203 0:76427232f435 234 TerminalLineBuf[TerminalPos++] = NextCharIn;
emh203 0:76427232f435 235 TERMINAL_PUTC(NextCharIn);
emh203 0:76427232f435 236 }
emh203 0:76427232f435 237 }
emh203 0:76427232f435 238
emh203 0:76427232f435 239 break;
emh203 0:76427232f435 240
emh203 0:76427232f435 241 }
emh203 0:76427232f435 242 }
emh203 0:76427232f435 243
emh203 0:76427232f435 244 }
emh203 0:76427232f435 245
emh203 0:76427232f435 246
emh203 0:76427232f435 247
emh203 0:76427232f435 248 BYTE DataBuf[512];
emh203 0:76427232f435 249 BYTE DataBufCheck[512];
emh203 0:76427232f435 250
emh203 0:76427232f435 251 void SpeedTest(BYTE Disk, DWORD SECTORS_TO_READ_WRITE)
emh203 0:76427232f435 252 {
emh203 0:76427232f435 253
emh203 0:76427232f435 254 float DataWriteSpeed = 0;
emh203 0:76427232f435 255 float DataReadSpeed = 0;
emh203 0:76427232f435 256 float DataReadWriteSpeed = 0;
emh203 0:76427232f435 257 int i,j,k;
emh203 0:76427232f435 258
emh203 0:76427232f435 259
emh203 0:76427232f435 260 TERMINAL_PRINTF("\r\nData write test started...\r\n",DataReadSpeed);
emh203 0:76427232f435 261 DataSpeedTimer.reset();
emh203 0:76427232f435 262 DataSpeedTimer.start();
emh203 0:76427232f435 263
emh203 0:76427232f435 264 for(i=0;i<SECTORS_TO_READ_WRITE;i++)
emh203 0:76427232f435 265 {
emh203 0:76427232f435 266 USBLoop();
emh203 0:76427232f435 267 if(disk_write (Disk,&DataBuf[0],i,1) == RES_ERROR)
emh203 0:76427232f435 268 {
emh203 0:76427232f435 269 TERMINAL_PRINTF("Error writing test block %d, stopping.\r\n", i);
emh203 0:76427232f435 270 return;
emh203 0:76427232f435 271 }
emh203 0:76427232f435 272 }
emh203 0:76427232f435 273 DataSpeedTimer.stop();
emh203 0:76427232f435 274
emh203 0:76427232f435 275 DataWriteSpeed = (((SECTORS_TO_READ_WRITE * 512.0)/1024.0))/(DataSpeedTimer.read());
emh203 0:76427232f435 276
emh203 0:76427232f435 277 TERMINAL_PRINTF("Data write speed %.1f kb/s\r\n\r\n",DataWriteSpeed);
emh203 0:76427232f435 278 TERMINAL_PRINTF("Data read test started...\r\n",DataReadSpeed);
emh203 0:76427232f435 279
emh203 0:76427232f435 280 DataSpeedTimer.reset();
emh203 0:76427232f435 281 DataSpeedTimer.start();
emh203 0:76427232f435 282 for(i=0;i<SECTORS_TO_READ_WRITE;i++)
emh203 0:76427232f435 283 {
emh203 0:76427232f435 284 USBLoop();
emh203 0:76427232f435 285 if(disk_read ( Disk,&DataBuf[0],i,1) == RES_ERROR)
emh203 0:76427232f435 286 {
emh203 0:76427232f435 287
emh203 0:76427232f435 288 TERMINAL_PRINTF("Error reading test block %d, stopping.\r\n", i);
emh203 0:76427232f435 289 return;
emh203 0:76427232f435 290 }
emh203 0:76427232f435 291 }
emh203 0:76427232f435 292 DataSpeedTimer.stop();
emh203 0:76427232f435 293
emh203 0:76427232f435 294 DataReadSpeed = (((SECTORS_TO_READ_WRITE * 512.0)/1024.0))/(DataSpeedTimer.read());
emh203 0:76427232f435 295 TERMINAL_PRINTF("Data read speed %.1f kb/s\r\r\n\n",DataReadSpeed);
emh203 0:76427232f435 296 TERMINAL_PRINTF("Data read/write test started...\r\n",DataReadSpeed);
emh203 0:76427232f435 297
emh203 0:76427232f435 298 DataSpeedTimer.reset();
emh203 0:76427232f435 299 DataSpeedTimer.start();
emh203 0:76427232f435 300
emh203 0:76427232f435 301 for(j=0;j<SECTORS_TO_READ_WRITE;j++)
emh203 0:76427232f435 302 {
emh203 0:76427232f435 303
emh203 0:76427232f435 304 USBLoop();
emh203 0:76427232f435 305 for(i=0;i<512;i++)
emh203 0:76427232f435 306 {
emh203 0:76427232f435 307 DataBuf[i] = rand();
emh203 0:76427232f435 308 DataBufCheck[i] = 0;
emh203 0:76427232f435 309 }
emh203 0:76427232f435 310
emh203 0:76427232f435 311 if(disk_write (Disk,&DataBuf[0],j,1) == RES_ERROR)
emh203 0:76427232f435 312 {
emh203 0:76427232f435 313 TERMINAL_PRINTF("Error writing test block %d, stopping.\r\n", i);
emh203 0:76427232f435 314 return;
emh203 0:76427232f435 315 }
emh203 0:76427232f435 316
emh203 0:76427232f435 317 if(disk_read (Disk,&DataBufCheck[0],j,1) == RES_ERROR)
emh203 0:76427232f435 318 {
emh203 0:76427232f435 319 TERMINAL_PRINTF("Error reading test block %d, stopping.\r\n", i);
emh203 0:76427232f435 320 return;
emh203 0:76427232f435 321 }
emh203 0:76427232f435 322
emh203 0:76427232f435 323
emh203 0:76427232f435 324 for(i=0;i<512;i++)
emh203 0:76427232f435 325 {
emh203 0:76427232f435 326 if(DataBuf[i]!=DataBufCheck[i])
emh203 0:76427232f435 327 {
emh203 0:76427232f435 328 TERMINAL_PRINTF("Readback failure on test block %d byte %d\r\n",j,i);
emh203 0:76427232f435 329
emh203 0:76427232f435 330 for(k=0;k<512;k++)
emh203 0:76427232f435 331 {
emh203 0:76427232f435 332 TERMINAL_PRINTF("k:%d Wrote: %d Read: %d\r\n",k,DataBuf[k],DataBufCheck[k]);
emh203 0:76427232f435 333 break;
emh203 0:76427232f435 334 }
emh203 0:76427232f435 335 return;
emh203 0:76427232f435 336 }
emh203 0:76427232f435 337 }
emh203 0:76427232f435 338 }
emh203 0:76427232f435 339 DataSpeedTimer.stop();
emh203 0:76427232f435 340
emh203 0:76427232f435 341 DataReadWriteSpeed = (((SECTORS_TO_READ_WRITE * 512.0)/1024.0))/(DataSpeedTimer.read());
emh203 0:76427232f435 342 TERMINAL_PRINTF("Data read/write speed %.1f kb/s\r\n",DataReadWriteSpeed);
emh203 0:76427232f435 343 }
emh203 0:76427232f435 344
emh203 0:76427232f435 345 BOOL dprobe(BYTE Disk)
emh203 0:76427232f435 346 {
emh203 0:76427232f435 347 DWORD NumSectors;
emh203 0:76427232f435 348 CHAR ModelName[41] = {0};
emh203 0:76427232f435 349 CHAR SerialNumber[21] = {0};
emh203 0:76427232f435 350 CHAR FirmwareVerion[9] = {0};
emh203 0:76427232f435 351 BOOL RetVal;
emh203 0:76427232f435 352
emh203 0:76427232f435 353 if(disk_status(Disk)&STA_NODISK)
emh203 0:76427232f435 354 {
emh203 0:76427232f435 355 TERMINAL_PRINTF("\r\nDisk not attached");
emh203 0:76427232f435 356 RetVal = FALSE;
emh203 0:76427232f435 357 }
emh203 0:76427232f435 358 else
emh203 0:76427232f435 359 {
emh203 0:76427232f435 360 TERMINAL_PRINTF("\r\n\r\nDisk Detected\r\n\r\n\n");
emh203 0:76427232f435 361 if(disk_initialize(Disk)&STA_NOINIT)
emh203 0:76427232f435 362 {
emh203 0:76427232f435 363 TERMINAL_PRINTF("Disk Failed Initialization\r\n");
emh203 0:76427232f435 364 RetVal = FALSE;
emh203 0:76427232f435 365 }
emh203 0:76427232f435 366 else
emh203 0:76427232f435 367 {
emh203 0:76427232f435 368 TERMINAL_PRINTF("Disk Initialization Success!\r\n");
emh203 0:76427232f435 369
emh203 0:76427232f435 370
emh203 0:76427232f435 371 TERMINAL_PRINTF("Probing attached Disk\r\n");
emh203 0:76427232f435 372 TERMINAL_PRINTF("-----------------------\r\n");
emh203 0:76427232f435 373
emh203 0:76427232f435 374 disk_ioctl (Disk,
emh203 0:76427232f435 375 GET_SECTOR_COUNT,
emh203 0:76427232f435 376 &NumSectors
emh203 0:76427232f435 377 );
emh203 0:76427232f435 378 disk_ioctl (Disk,
emh203 0:76427232f435 379 ATA_GET_MODEL,
emh203 0:76427232f435 380 ModelName
emh203 0:76427232f435 381 );
emh203 0:76427232f435 382 disk_ioctl (Disk,
emh203 0:76427232f435 383 ATA_GET_REV,
emh203 0:76427232f435 384 FirmwareVerion
emh203 0:76427232f435 385 );
emh203 0:76427232f435 386 disk_ioctl (Disk,
emh203 0:76427232f435 387 ATA_GET_SN,
emh203 0:76427232f435 388 SerialNumber
emh203 0:76427232f435 389 );
emh203 0:76427232f435 390
emh203 0:76427232f435 391
emh203 0:76427232f435 392 TERMINAL_PRINTF("Model Name: %s\r\n", ModelName);
emh203 0:76427232f435 393 TERMINAL_PRINTF("Firmware Version: %s\r\n",FirmwareVerion);
emh203 0:76427232f435 394 TERMINAL_PRINTF("Serial Number: %s\r\n",SerialNumber);
emh203 0:76427232f435 395 TERMINAL_PRINTF("Number of Sectors: %d\r\n",NumSectors);
emh203 0:76427232f435 396 RetVal = TRUE;
emh203 0:76427232f435 397 }
emh203 0:76427232f435 398 }
emh203 0:76427232f435 399
emh203 0:76427232f435 400 return RetVal;
emh203 0:76427232f435 401 }