Added extractModeName() utility function.
This commit is contained in:
parent
be8a9ae73b
commit
6e0e5c102e
@ -222,6 +222,7 @@ void sendSysInfoUDP();
|
|||||||
//bool isAsterisksOnly(const char* str, byte maxLen);
|
//bool isAsterisksOnly(const char* str, byte maxLen);
|
||||||
bool requestJSONBufferLock(uint8_t module=255);
|
bool requestJSONBufferLock(uint8_t module=255);
|
||||||
void releaseJSONBufferLock();
|
void releaseJSONBufferLock();
|
||||||
|
uint8_t extractModeName(uint8_t mode, const char *src, char *dest, uint8_t maxLen);
|
||||||
|
|
||||||
//um_manager.cpp
|
//um_manager.cpp
|
||||||
class Usermod {
|
class Usermod {
|
||||||
|
@ -31,3 +31,38 @@ void releaseJSONBufferLock()
|
|||||||
fileDoc = nullptr;
|
fileDoc = nullptr;
|
||||||
jsonBufferLock = 0;
|
jsonBufferLock = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// extracts effect mode (or palette) name from names serialized string
|
||||||
|
// caller must provide large enough buffer for name (incluing SR extensions)!
|
||||||
|
uint8_t extractModeName(uint8_t mode, const char *src, char *dest, uint8_t maxLen)
|
||||||
|
{
|
||||||
|
uint8_t qComma = 0;
|
||||||
|
bool insideQuotes = false;
|
||||||
|
uint8_t printedChars = 0;
|
||||||
|
char singleJsonSymbol;
|
||||||
|
size_t len = strlen_P(src);
|
||||||
|
|
||||||
|
// Find the mode name in JSON
|
||||||
|
for (size_t i = 0; i < len; i++) {
|
||||||
|
singleJsonSymbol = pgm_read_byte_near(src + i);
|
||||||
|
if (singleJsonSymbol == '\0') break;
|
||||||
|
if (singleJsonSymbol == '@' && insideQuotes && qComma == mode) break; //stop when SR extension encountered
|
||||||
|
switch (singleJsonSymbol) {
|
||||||
|
case '"':
|
||||||
|
insideQuotes = !insideQuotes;
|
||||||
|
break;
|
||||||
|
case '[':
|
||||||
|
case ']':
|
||||||
|
break;
|
||||||
|
case ',':
|
||||||
|
if (!insideQuotes) qComma++;
|
||||||
|
default:
|
||||||
|
if (!insideQuotes || (qComma != mode)) break;
|
||||||
|
dest[printedChars++] = singleJsonSymbol;
|
||||||
|
}
|
||||||
|
if ((qComma > mode) || (printedChars >= maxLen)) break;
|
||||||
|
}
|
||||||
|
dest[printedChars] = '\0';
|
||||||
|
return strlen(dest);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user