12 #include "TextCommand.h" 13 #ifdef USE_TEXTCOMMAND 18 extern unsigned int __heap_start;
19 extern void *__brkval;
24 char TextCommand::commandString[MAX_COMMAND_LENGTH+1];
34 void TextCommand::process(){
37 #if defined(USE_ETHERNET) 39 EthernetClient client=INTERFACE.available();
43 if (DCCppConfig::Protocol == EthernetProtocol::HTTP) {
44 INTERFACE.println(
"HTTP/1.1 200 OK");
45 INTERFACE.println(
"Content-Type: text/html");
46 INTERFACE.println(
"Access-Control-Allow-Origin: *");
47 INTERFACE.println(
"Connection: close");
48 INTERFACE.println(
"");
51 while (client.connected() && client.available()) {
57 else if (strlen(commandString) < MAX_COMMAND_LENGTH)
58 sprintf(commandString,
"%s%c", commandString, c);
61 if (DCCppConfig::Protocol == EthernetProtocol::HTTP)
67 while (INTERFACE.available()>0) {
73 else if (strlen(commandString) < MAX_COMMAND_LENGTH)
74 sprintf(commandString,
"%s%c", commandString, c);
85 #ifdef DCCPP_DEBUG_MODE 87 Serial.println(F(
" command"));
107 DCCppClass::mainRegs.setThrottle(com+1);
147 DCCppClass::mainRegs.setFunction(com+1);
172 DCCppClass::mainRegs.setAccessory(com+1);
190 Turnout::parse(com+1);
209 Output::parse(com+1);
221 Sensor::parse(com+1);
226 #ifdef DCCPP_PRINT_DCCPP 248 DCCppClass::mainRegs.writeCVByteMain(com+1);
264 DCCppClass::mainRegs.writeCVBitMain(com+1);
281 DCCppClass::progRegs.writeCVByte(com+1);
299 DCCppClass::progRegs.writeCVBit(com+1);
315 DCCppClass::progRegs.readCV(com+1);
349 INTERFACE.print(
"<a");
350 INTERFACE.print(
int(DCCpp.getCurrentMain()));
351 INTERFACE.print(
">");
352 #if !defined(USE_ETHERNET) 353 INTERFACE.println(
"");
366 if(digitalRead(DCCppConfig::SignalEnablePinProg)==LOW)
367 INTERFACE.print(
"<p0>");
369 INTERFACE.print(
"<p1>");
370 #if !defined(USE_ETHERNET) 371 INTERFACE.println(
"");
374 for(
int i=1;i<=MAX_MAIN_REGISTERS;i++){
375 if(DCCppClass::mainRegs.speedTable[i]==0)
377 INTERFACE.print(
"<T");
378 INTERFACE.print(i); INTERFACE.print(
" ");
379 if(DCCppClass::mainRegs.speedTable[i]>0){
380 INTERFACE.print(DCCppClass::mainRegs.speedTable[i]);
381 INTERFACE.print(
" 1>");
383 INTERFACE.print(- DCCppClass::mainRegs.speedTable[i]);
384 INTERFACE.print(
" 0>");
387 INTERFACE.print(
"<iDCCpp LIBRARY BASE STATION FOR ARDUINO ");
391 INTERFACE.print(
": V-");
392 INTERFACE.print(VERSION);
393 INTERFACE.print(
" / ");
394 INTERFACE.print(__DATE__);
395 INTERFACE.print(
" ");
396 INTERFACE.print(__TIME__);
397 INTERFACE.print(
">");
398 #if !defined(USE_ETHERNET) 399 INTERFACE.println(
"");
402 INTERFACE.print(
"<N ");
403 #if defined(USE_ETHERNET) 404 INTERFACE.print(
"ETHERNET :");
405 INTERFACE.print(Ethernet.localIP());
406 INTERFACE.print(
">");
407 #if !defined(USE_ETHERNET) 408 INTERFACE.println(
"");
411 INTERFACE.println(
"SERIAL>");
414 #ifdef DCCPP_PRINT_DCCPP 438 INTERFACE.print(
"<e ");
439 INTERFACE.print(EEStore::eeStore->data.nTurnouts);
440 INTERFACE.print(
" ");
441 INTERFACE.print(EEStore::eeStore->data.nSensors);
442 INTERFACE.print(
" ");
443 INTERFACE.print(EEStore::eeStore->data.nOutputs);
444 INTERFACE.print(
">");
445 #if !defined(USE_ETHERNET) 446 INTERFACE.println(
"");
460 INTERFACE.print(
"<O>");
461 #if !defined(USE_ETHERNET) 462 INTERFACE.println(
"");
475 INTERFACE.println(
"");
491 Serial.println(
"nEntering Diagnostic Mode...");
494 bitClear(TCCR1B,CS12);
496 bitClear(TCCR1B,CS10);
498 #if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_NANO) // Configuration for UNO 501 bitClear(TCCR0B,CS01);
502 bitClear(TCCR0B,CS00);
504 #else // Configuration for MEGA 506 bitClear(TCCR3B,CS32);
508 bitClear(TCCR3B,CS30);
533 DCCppClass::mainRegs.writeTextPacket(com+1);
552 DCCppClass::progRegs.writeTextPacket(com+1);
568 INTERFACE.print(
"<f");
569 INTERFACE.print((
int) &v - (__brkval == 0 ? (
int) &__heap_start : (
int) __brkval));
570 INTERFACE.print(
">");
571 #if !defined(USE_ETHERNET) 572 INTERFACE.println(
"");
584 INTERFACE.println(
"");
585 for(
Register *p = DCCppClass::mainRegs.reg; p <= DCCppClass::mainRegs.maxLoadedReg;p++){
586 INTERFACE.print(
"M"); INTERFACE.print((
int)(p - DCCppClass::mainRegs.reg)); INTERFACE.print(
":t");
587 INTERFACE.print((
int)p); INTERFACE.print(
"t");
588 INTERFACE.print((
int)(p->activePacket)); INTERFACE.print(
"t");
589 INTERFACE.print(p->activePacket->nBits); INTERFACE.print(
"t");
590 for(
int i=0;i<10;i++){
591 INTERFACE.print(p->activePacket->buf[i],HEX); INTERFACE.print(
"t");
593 INTERFACE.println(
"");
595 for(
Register *p = DCCppClass::progRegs.reg; p <= DCCppClass::progRegs.maxLoadedReg;p++){
596 INTERFACE.print(
"P"); INTERFACE.print((
int)(p - DCCppClass::progRegs.reg)); INTERFACE.print(
":t");
597 INTERFACE.print((
int)p); INTERFACE.print(
"t");
598 INTERFACE.print((
int)p->activePacket); INTERFACE.print(
"t");
599 INTERFACE.print(p->activePacket->nBits); INTERFACE.print(
"t");
600 for(
int i=0;i<10;i++){
601 INTERFACE.print(p->activePacket->buf[i],HEX); INTERFACE.print(
"t");
603 INTERFACE.println(
"");
605 INTERFACE.println(
"");
static void parse(char *)