Exemplo n.º 1
0
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;
      }
    }
  }
}