mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2024-11-27 01:56:14 +01:00
Merge branch 'feature/config-saveram' of https://github.com/DCC-EX/CommandStation-EX into feature/config-saveram
This commit is contained in:
commit
a91d127256
|
@ -2,14 +2,11 @@
|
||||||
// © 2020, Chris Harlow. All rights reserved.
|
// © 2020, Chris Harlow. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a demonstattion of setting up a DCC-EX
|
// This file is a demonstattion of setting up a DCC-EX
|
||||||
// Command station to support direct connection of WiThrottle devices
|
// Command station with optional support for direct connection of WiThrottle devices
|
||||||
// such as "Engine Driver". If you contriol your layout through JMRI
|
// such as "Engine Driver". If you contriol your layout through JMRI
|
||||||
// then DON'T connect throttles to this wifi, connect them to JMRI.
|
// then DON'T connect throttles to this wifi, connect them to JMRI.
|
||||||
//
|
//
|
||||||
// This is just 3 statements longer than the basic setup.
|
// THE WIFI FEATURE IS NOT SUPPORTED ON ARDUINO DEVICES WITH ONLY 2KB RAM.
|
||||||
//
|
|
||||||
// THIS SETUP DOES NOT APPLY TO ARDUINO UNO WITH ONLY A SINGLE SERIAL PORT.
|
|
||||||
// REFER TO SEPARATE EXAMPLE.
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -28,69 +25,9 @@ LiquidCrystal_I2C lcdDisplay = LiquidCrystal_I2C(LCD_ADDRESS, LCD_COLUMNS, LCD_L
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// this code is here to demonstrate use of the DCC API and other techniques
|
// Create a serial command parser for the USB connection,
|
||||||
|
// This supports JMRI or manual diagnostics and commands
|
||||||
// myFilter is an example of an OPTIONAL command filter used to intercept < > commands from
|
// to be issued from the USB serial console.
|
||||||
// the usb or wifi streamm. It demonstrates how a command may be intercepted
|
|
||||||
// or even a new command created without having to break open the API library code.
|
|
||||||
// The filter is permitted to use or modify the parameter list before passing it on to
|
|
||||||
// the standard parser. By setting the opcode to 0, the standard parser will
|
|
||||||
// just ignore the command on the assumption that you have already handled it.
|
|
||||||
//
|
|
||||||
// The filter must be enabled by calling the DCC EXParser::setFilter method, see use in setup().
|
|
||||||
#if ENABLE_CUSTOM_FILTER
|
|
||||||
void myComandFilter(Print *stream, byte &opcode, byte ¶mCount, int p[])
|
|
||||||
{
|
|
||||||
(void)stream; // avoid compiler warning if we don't access this parameter
|
|
||||||
switch (opcode)
|
|
||||||
{
|
|
||||||
case '!': // Create a bespoke new command to clear all loco reminders <!> or specific locos e.g <! 3 4 99>
|
|
||||||
if (paramCount == 0)
|
|
||||||
DCC::forgetAllLocos();
|
|
||||||
else
|
|
||||||
for (int i = 0; i < paramCount; i++)
|
|
||||||
DCC::forgetLoco(p[i]);
|
|
||||||
opcode = 0; // tell parser to ignore this command as we have done it already
|
|
||||||
break;
|
|
||||||
default: // drop through and parser will use the command unaltered.
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is an OPTIONAL example of a HTTP filter...
|
|
||||||
// If you have configured wifi and an HTTP request is received on the Wifi connection
|
|
||||||
// it will normally be rejected 404 Not Found.
|
|
||||||
|
|
||||||
// If you wish to handle HTTP requests, you can create a filter and ask the WifiInterface to
|
|
||||||
// call your code for each detected http request.
|
|
||||||
|
|
||||||
void myHttpFilter(Print *stream, byte *cmd)
|
|
||||||
{
|
|
||||||
(void)cmd; // Avoid compiler warning because this example doesnt use this parameter
|
|
||||||
|
|
||||||
// BEWARE - As soon as you start responding, the cmd buffer is trashed!
|
|
||||||
// You must get everything you need from it before using StringFormatter::send!
|
|
||||||
|
|
||||||
StringFormatter::send(stream, F("HTTP/1.1 200 OK\nContent-Type: text/html\nConnnection: close\n\n"));
|
|
||||||
StringFormatter::send(stream, F("<html><body>This is my HTTP filter responding.<br/></body></html>"));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Callback functions are necessary if you call any API that must wait for a response from the
|
|
||||||
// programming track. The API must return immediately otherwise other loop() functions would be blocked.
|
|
||||||
// Your callback function will be invoked when the data arrives from the prog track.
|
|
||||||
// See the DCC:getLocoId example in the setup function.
|
|
||||||
#if ENABLE_CUSTOM_CALLBACK
|
|
||||||
void myCallback(int result)
|
|
||||||
{
|
|
||||||
DIAG(F("\n getting Loco Id callback result=%d"), result);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Create a serial command parser... Enables certain diagnostics and commands
|
|
||||||
// to be issued from the USB serial console
|
|
||||||
// This is NOT intended for JMRI....
|
|
||||||
|
|
||||||
DCCEXParser serialParser;
|
DCCEXParser serialParser;
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
|
@ -136,19 +73,6 @@ void setup()
|
||||||
// NOTE: References to Serial1 are for the serial port used to connect
|
// NOTE: References to Serial1 are for the serial port used to connect
|
||||||
// your wifi chip/shield.
|
// your wifi chip/shield.
|
||||||
|
|
||||||
// Optionally tell the command parser to use my example filter.
|
|
||||||
// This will intercept JMRI commands from both USB and Wifi
|
|
||||||
#if ENABLE_CUSTOM_FILTER
|
|
||||||
DCCEXParser::setFilter(myComandFilter);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if ENABLE_CUSTOM_CALLBACK
|
|
||||||
// This is just for demonstration purposes
|
|
||||||
DIAG(F("\n===== DCCEX demonstrating DCC::getLocoId() call ==========\n"));
|
|
||||||
DCC::getLocoId(myCallback); // myCallback will be called with the result
|
|
||||||
DIAG(F("\n===== DCC::getLocoId has returned, but the callback wont be executed until we are in loop() ======\n"));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WIFI_ON
|
#ifdef WIFI_ON
|
||||||
bool wifiUp = false;
|
bool wifiUp = false;
|
||||||
const __FlashStringHelper *wifiESSID = F(WIFI_SSID);
|
const __FlashStringHelper *wifiESSID = F(WIFI_SSID);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user