1
0
mirror of https://github.com/DCC-EX/CommandStation-EX.git synced 2024-11-22 15:46:14 +01:00

Ensure correct functions are called for strcpy_P, strncmp_P, strlen_P etc. on non-AVR targets..

This commit is contained in:
Neil McKechnie 2023-01-23 22:28:43 +00:00
parent 682c47f7dd
commit 10c8915d33
4 changed files with 16 additions and 7 deletions

View File

@ -190,9 +190,9 @@ void DCCEXParser::setAtCommandCallback(AT_COMMAND_CALLBACK callback)
// Parse an F() string // Parse an F() string
void DCCEXParser::parse(const FSH * cmd) { void DCCEXParser::parse(const FSH * cmd) {
DIAG(F("SETUP(\"%S\")"),cmd); DIAG(F("SETUP(\"%S\")"),cmd);
int size=strlen_P((char *)cmd)+1; int size=STRLEN_P((char *)cmd)+1;
char buffer[size]; char buffer[size];
strcpy_P(buffer,(char *)cmd); STRCPY_P(buffer,(char *)cmd);
parse(&USB_SERIAL,(byte *)buffer,NULL); parse(&USB_SERIAL,(byte *)buffer,NULL);
} }

11
FSH.h
View File

@ -47,7 +47,11 @@
typedef __FlashStringHelper FSH; typedef __FlashStringHelper FSH;
#define FLASH PROGMEM #define FLASH PROGMEM
#define GETFLASH(addr) pgm_read_byte_near(addr) #define GETFLASH(addr) pgm_read_byte_near(addr)
#define STRCPY_P strcpy_P
#define STRCMP_P strcmp_P
#define STRNCPY_P strncpy_P
#define STRNCMP_P strncmp_P
#define STRLEN_P strlen_P
#if defined(ARDUINO_AVR_MEGA) || defined(ARDUINO_AVR_MEGA2560) #if defined(ARDUINO_AVR_MEGA) || defined(ARDUINO_AVR_MEGA2560)
// AVR_MEGA memory deliberately placed at end of link may need _far functions // AVR_MEGA memory deliberately placed at end of link may need _far functions
@ -80,5 +84,10 @@ typedef char FSH;
#define GETFLASH(addr) (*(const byte *)(addr)) #define GETFLASH(addr) (*(const byte *)(addr))
#define GETHIGHFLASH(data,offset) (*(const byte *)(GETFARPTR(data)+offset)) #define GETHIGHFLASH(data,offset) (*(const byte *)(GETFARPTR(data)+offset))
#define GETHIGHFLASHW(data,offset) (*(const uint16_t *)(GETFARPTR(data)+offset)) #define GETHIGHFLASHW(data,offset) (*(const uint16_t *)(GETFARPTR(data)+offset))
#define STRCPY_P strcpy
#define STRCMP_P strcmp
#define STRNCPY_P strncpy
#define STRNCMP_P strncmp
#define STRLEN_P strlen
#endif #endif
#endif #endif

View File

@ -83,7 +83,7 @@ size_t RingStream::printFlash(const FSH * flashBuffer) {
// Establish the actual length of the progmem string. // Establish the actual length of the progmem string.
char * flash=(char *)flashBuffer; char * flash=(char *)flashBuffer;
int16_t plength=strlen_P(flash); int16_t plength=STRLEN_P(flash);
if (plength==0) return 0; // just ignore empty string if (plength==0) return 0; // just ignore empty string
// Retain the buffer count as it will be modified by the marker+address insert // Retain the buffer count as it will be modified by the marker+address insert

View File

@ -184,8 +184,8 @@ wifiSerialState WifiInterface::setup2(const FSH* SSid, const FSH* password,
checkForOK(1000, true); // Not always OK, sometimes "no change" checkForOK(1000, true); // Not always OK, sometimes "no change"
const char *yourNetwork = "Your network "; const char *yourNetwork = "Your network ";
if (strncmp_P(yourNetwork, (const char*)SSid, 13) == 0 || strncmp_P("", (const char*)SSid, 13) == 0) { if (STRNCMP_P(yourNetwork, (const char*)SSid, 13) == 0 || STRNCMP_P("", (const char*)SSid, 13) == 0) {
if (strncmp_P(yourNetwork, (const char*)password, 13) == 0) { if (STRNCMP_P(yourNetwork, (const char*)password, 13) == 0) {
// If the source code looks unconfigured, check if the // If the source code looks unconfigured, check if the
// ESP8266 is preconfigured in station mode. // ESP8266 is preconfigured in station mode.
// We check the first 13 chars of the SSid and the password // We check the first 13 chars of the SSid and the password
@ -258,7 +258,7 @@ wifiSerialState WifiInterface::setup2(const FSH* SSid, const FSH* password,
i=0; i=0;
do { do {
if (strncmp_P(yourNetwork, (const char*)password, 13) == 0) { if (STRNCMP_P(yourNetwork, (const char*)password, 13) == 0) {
// unconfigured // unconfigured
StringFormatter::send(wifiStream, F("AT+CWSAP%s=\"DCCEX_%s\",\"PASS_%s\",%d,4\r\n"), StringFormatter::send(wifiStream, F("AT+CWSAP%s=\"DCCEX_%s\",\"PASS_%s\",%d,4\r\n"),
oldCmd ? "" : "_CUR", macTail, macTail, channel); oldCmd ? "" : "_CUR", macTail, macTail, channel);