static void sdioDebug (const char *fmt, ...) { va_list ap; va_start(ap, fmt); chvsnprintf(sdioBuffer, sizeof(sdioBuffer), fmt, ap); va_end(ap); sdioBufferIndex++; }
void oledPrintFmt (oledConfig *oledConfig, const char *fmt, ...) { char buffer[80]; char *token, *curBuf; bool_t lastLoop=FALSE; va_list ap; RET_UNLESS_INIT(oledConfig); va_start(ap, fmt); chvsnprintf(buffer, sizeof(buffer), fmt, ap); va_end(ap); if (buffer[0] == 0) return; const char* endPtr = &(buffer[strnlen(buffer, sizeof (buffer)) -1]); // replace escape color sequence by color command for respective backend // ESC c 0 à 9 : couleur index of background and foreground // replace escape n by carriage return, line feed for (curBuf=buffer;curBuf<endPtr && lastLoop == FALSE;) { token = index (curBuf, 27); if (token == NULL) { // on peut imprimer les derniers caractères et terminer lastLoop = TRUE; } else { // token pointe sur le char d'echappement ESC // on met un caractère de fin de chaine à la place *token++ =0; } oledPrintBuffer (oledConfig, curBuf); oledConfig->curXpos += strnlen (curBuf, sizeof(buffer)); if (lastLoop == FALSE) { // next two char a color coding scheme if (tolower((uint32_t) (*token)) == 'c') { const int32_t colorIndex = INRANGE(0, COLOR_TABLE_SIZE-1, *++token - '0'); oledUseColorIndex (oledConfig, colorIndex); // DebugTrace ("useColorIndex %d", colorIndex); curBuf=token+1; } else if (tolower((uint32_t) (*token)) == 'n') { // DebugTrace ("carriage return"); oledGotoXY (oledConfig, 0, oledConfig->curYpos+1); curBuf=token+1; } } } }