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();
42 INTERFACE.println(
"HTTP/1.1 200 OK");
43 INTERFACE.println(
"Content-Type: text/html");
44 INTERFACE.println(
"Access-Control-Allow-Origin: *");
45 INTERFACE.println(
"Connection: close");
46 INTERFACE.println(
"");
48 while (client.connected() && client.available()) {
51 sprintf(commandString,
"");
54 else if (strlen(commandString) < MAX_COMMAND_LENGTH)
55 sprintf(commandString,
"%s%c", commandString, c);
63 while (INTERFACE.available()>0) {
69 else if (strlen(commandString)<MAX_COMMAND_LENGTH)
70 sprintf(commandString,
"%s%c", commandString, c);
81 #ifdef DCCPP_DEBUG_MODE 82 Serial.print((
char) com[0]);
83 Serial.println(F(
" command"));
103 DCCppClass::mainRegs.setThrottle(com+1);
143 DCCppClass::mainRegs.setFunction(com+1);
168 DCCppClass::mainRegs.setAccessory(com+1);
186 Turnout::parse(com+1);
205 Output::parse(com+1);
217 Sensor::parse(com+1);
242 DCCppClass::mainRegs.writeCVByteMain(com+1);
258 DCCppClass::mainRegs.writeCVBitMain(com+1);
275 DCCppClass::progRegs.writeCVByte(com+1);
293 DCCppClass::progRegs.writeCVBit(com+1);
309 DCCppClass::progRegs.readCV(com+1);
320 if (DCCppConfig::SignalEnablePinProg != 255)
321 digitalWrite(DCCppConfig::SignalEnablePinProg,HIGH);
322 if (DCCppConfig::SignalEnablePinMain != 255)
323 digitalWrite(DCCppConfig::SignalEnablePinMain,HIGH);
324 INTERFACE.println(
"<p1>");
335 if (DCCppConfig::SignalEnablePinProg != 255)
336 digitalWrite(DCCppConfig::SignalEnablePinProg, LOW);
337 if (DCCppConfig::SignalEnablePinMain != 255)
338 digitalWrite(DCCppConfig::SignalEnablePinMain, LOW);
339 INTERFACE.println(
"<p0>");
351 INTERFACE.print(
"<a");
352 INTERFACE.print(
int(DCCppClass::MainMonitor.current));
353 INTERFACE.println(
">");
365 if(digitalRead(DCCppConfig::SignalEnablePinProg)==LOW)
366 INTERFACE.println(
"<p0>");
368 INTERFACE.println(
"<p1>");
370 for(
int i=1;i<=MAX_MAIN_REGISTERS;i++){
371 if(DCCppClass::mainRegs.speedTable[i]==0)
373 INTERFACE.print(
"<T");
374 INTERFACE.print(i); INTERFACE.print(
" ");
375 if(DCCppClass::mainRegs.speedTable[i]>0){
376 INTERFACE.print(DCCppClass::mainRegs.speedTable[i]);
377 INTERFACE.print(
" 1>");
379 INTERFACE.print(- DCCppClass::mainRegs.speedTable[i]);
380 INTERFACE.print(
" 0>");
383 INTERFACE.print(
"<iDCCpp LIBRARY BASE STATION FOR ARDUINO ");
387 INTERFACE.print(
": V-");
388 INTERFACE.print(VERSION);
389 INTERFACE.print(
" / ");
390 INTERFACE.print(__DATE__);
391 INTERFACE.print(
" ");
392 INTERFACE.print(__TIME__);
393 INTERFACE.println(
">");
395 INTERFACE.print(
"<N ");
396 #if defined(USE_ETHERNET) 397 INTERFACE.print(
"ETHERNET :");
398 INTERFACE.print(Ethernet.localIP());
399 INTERFACE.println(
">");
401 INTERFACE.println(
"SERIAL>");
426 INTERFACE.print(
"<e ");
427 INTERFACE.print(EEStore::eeStore->data.nTurnouts);
428 INTERFACE.print(
" ");
429 INTERFACE.print(EEStore::eeStore->data.nSensors);
430 INTERFACE.print(
" ");
431 INTERFACE.print(EEStore::eeStore->data.nOutputs);
432 INTERFACE.println(
">");
445 INTERFACE.print(
"<O>");
457 INTERFACE.println(
"");
473 Serial.println(
"nEntering Diagnostic Mode...");
476 bitClear(TCCR1B,CS12);
478 bitClear(TCCR1B,CS10);
480 #if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_NANO) // Configuration for UNO 483 bitClear(TCCR0B,CS01);
484 bitClear(TCCR0B,CS00);
486 #else // Configuration for MEGA 488 bitClear(TCCR3B,CS32);
490 bitClear(TCCR3B,CS30);
515 DCCppClass::mainRegs.writeTextPacket(com+1);
534 DCCppClass::progRegs.writeTextPacket(com+1);
550 INTERFACE.print(
"<f");
551 INTERFACE.print((
int) &v - (__brkval == 0 ? (
int) &__heap_start : (
int) __brkval));
552 INTERFACE.println(
">");
563 INTERFACE.println(
"");
564 for(
Register *p = DCCppClass::mainRegs.reg; p <= DCCppClass::mainRegs.maxLoadedReg;p++){
565 INTERFACE.print(
"M"); INTERFACE.print((
int)(p - DCCppClass::mainRegs.reg)); INTERFACE.print(
":t");
566 INTERFACE.print((
int)p); INTERFACE.print(
"t");
567 INTERFACE.print((
int)(p->activePacket)); INTERFACE.print(
"t");
568 INTERFACE.print(p->activePacket->nBits); INTERFACE.print(
"t");
569 for(
int i=0;i<10;i++){
570 INTERFACE.print(p->activePacket->buf[i],HEX); INTERFACE.print(
"t");
572 INTERFACE.println(
"");
574 for(
Register *p = DCCppClass::progRegs.reg; p <= DCCppClass::progRegs.maxLoadedReg;p++){
575 INTERFACE.print(
"P"); INTERFACE.print((
int)(p - DCCppClass::progRegs.reg)); INTERFACE.print(
":t");
576 INTERFACE.print((
int)p); INTERFACE.print(
"t");
577 INTERFACE.print((
int)p->activePacket); INTERFACE.print(
"t");
578 INTERFACE.print(p->activePacket->nBits); INTERFACE.print(
"t");
579 for(
int i=0;i<10;i++){
580 INTERFACE.print(p->activePacket->buf[i],HEX); INTERFACE.print(
"t");
582 INTERFACE.println(
"");
584 INTERFACE.println(
"");
static void parse(char *)