Exemplo n.º 1
0
int parseRawFormatPlain(char * msg, RawMessage * m, bool showJson)
{
  unsigned int prio, pgn, dst, src, len, junk, r, i;
  char * p;
  unsigned int data[8];

  p = findFirstOccurrence(msg, ',');
  if(!p)
  {
    return 1;
  }

  memcpy(m->timestamp, msg, p - msg);
  m->timestamp[p - msg] = 0;

  /* Moronic Windows does not support %hh<type> so we use intermediate variables */
  r = sscanf( p
    , ",%u,%u,%u,%u,%u"
    ",%x,%x,%x,%x,%x,%x,%x,%x,%x"
    , &prio
    , &pgn
    , &src
    , &dst
    , &len
    , &data[0]
    , &data[1]
    , &data[2]
    , &data[3]
    , &data[4]
    , &data[5]
    , &data[6]
    , &data[7]
    , &junk
  );
  if (r < 5)
  {
    logError("Error reading message, scanned %u from %s", r, msg);
    if (!showJson) fprintf(stdout, "%s", msg);
    return 2;
  }

  if (r <= 5 + 8)
  {
    for (i = 0; i < len; i++)
    {
      m->data[i] = data[i];
    }
  }
  else
  {
    logError("Too long data for RAWFORMAT_PLAIN! Input: %s", msg);
    if (!showJson) fprintf(stdout, "%s", msg);
    return 2;
  }

  return setParsedValues(m, prio, pgn, dst, src, len);
}
Exemplo n.º 2
0
int parseRawFormatAirmar(char * msg, RawMessage * m, bool showJson)
{
  unsigned int prio, pgn, dst, src, len, i;
  char * p;
  unsigned int id;

  p = findFirstOccurrence(msg, ' ');
  if(!p)
  {
    return 1;
  }

  memcpy(m->timestamp, msg, p - msg - 1);
  m->timestamp[p - msg - 1] = 0;
  p += 3;

  /* Moronic Windows does not support %hh<type> so we use intermediate variables */
  pgn = strtoul(p, &p, 10);
  if (*p == ' ')
  {
    id = strtoul(++p, &p, 16);
  }
  if (*p != ' ')
  {
    logError("Error reading message, scanned %zu bytes from %s", p - msg, msg);
    if (!showJson) fprintf(stdout, "%s", msg);
    return 2;
  }

  getISO11783BitsFromCanId(id, &prio, &pgn, &src, &dst);

  p++;
  len = strlen(p) / 2;
  for (i = 0; i < len; i++)
  {
    if (scanHex(&p, &m->data[i]))
    {
      logError("Error reading message, scanned %zu bytes from %s/%s, index %u", p - msg, msg, p, i);
      if (!showJson) fprintf(stdout, "%s", msg);
      return 2;
    }
    if (i < len)
    {
      if (*p != ',' && *p != ' ')
      {
        logError("Error reading message, scanned %zu bytes from %s", p - msg, msg);
        if (!showJson) fprintf(stdout, "%s", msg);
        return 2;
      }
      p++;
    }
  }

  return setParsedValues(m, prio, pgn, dst, src, len);
}
Exemplo n.º 3
0
int parseRawFormatChetco(char * msg, RawMessage * m, bool showJson)
{
  unsigned int pgn, src, i;
  unsigned int tstamp;
  time_t t;
  struct tm tm;
  char * p;

  if (*msg == 0 || *msg == '\n')
  {
    return 1;
  }

  if (sscanf(msg, "$PCDIN,%x,%x,%x,", &pgn, &tstamp, &src) < 3)
  {
    logError("Error reading Chetco message: %s", msg);
    if (!showJson) fprintf(stdout, "%s", msg);
    return 2;
  }

  t = (time_t) tstamp / 1000;
  localtime_r(&t, &tm);
  strftime(m->timestamp, sizeof(m->timestamp), "%Y-%m-%d-%H:%M:%S", &tm);
  sprintf(m->timestamp + strlen(m->timestamp), ",%u", tstamp % 1000);

  p = msg + STRSIZE("$PCDIN,01FD07,089C77D!,03,"); // Fixed length where data bytes start;

  for (i = 0; *p != '*'; i++)
  {
    if (scanHex(&p, &m->data[i]))
    {
      logError("Error reading message, scanned %zu bytes from %s/%s, index %u", p - msg, msg, p, i);
      if (!showJson) fprintf(stdout, "%s", msg);
      return 2;
    }
  }

  return setParsedValues(m, 0, pgn, 255, src, i + 1);
}
Exemplo n.º 4
0
/**
 * @brief Main function to parse the file
 *
 */
void MeshFileParser::parseFileProcess()
{
    QString _path = this->getFilePath();
    QFile _file(_path);
    bool _fileCreated = false;
    if (_file.exists())
    {
         _fileCreated = _file.open(QIODevice::ReadOnly);

         if (_fileCreated )
         {
             QTextStream _reader(&_file);
             QString _line = _reader.readLine();
             while(!_line.isNull())
             {
                 analyseLine(_line);
                 _line = _reader.readLine();
             }
             setParsedValues(_currentParsedValues);
         }
         _file.close();
    }
}
Exemplo n.º 5
0
int parseRawFormatFast(char * msg, RawMessage * m, bool showJson)
{
  unsigned int prio, pgn, dst, src, len, r, i;
  char * p;

  p = findFirstOccurrence(msg, ',');
  if(!p)
  {
    return 1;
  }

  memcpy(m->timestamp, msg, p - msg);
  m->timestamp[p - msg] = 0;

  /* Moronic Windows does not support %hh<type> so we use intermediate variables */
  r = sscanf( p
    , ",%u,%u,%u,%u,%u "
    , &prio
    , &pgn
    , &src
    , &dst
    , &len
  );
  if (r < 5)
  {
    logError("Error reading message, scanned %u from %s", r, msg);
    if (!showJson) fprintf(stdout, "%s", msg);
    return 2;
  }
  for (i = 0; *p && i < 5;)
  {
    if (*++p == ',')
    {
      i++;
    }
  }
  if (!p)
  {
    logError("Error reading message, scanned %zu bytes from %s", p - msg, msg);
    if (!showJson) fprintf(stdout, "%s", msg);
    return 2;
  }
  p++;
  for (i = 0; i < len; i++)
  {
    if (scanHex(&p, &m->data[i]))
    {
      logError("Error reading message, scanned %zu bytes from %s/%s, index %u", p - msg, msg, p, i);
      if (!showJson) fprintf(stdout, "%s", msg);
      return 2;
    }
    if (i < len)
    {
      if (*p != ',' && !isspace(*p))
      {
        logError("Error reading message, scanned %zu bytes from %s", p - msg, msg);
        if (!showJson) fprintf(stdout, "%s", msg);
        return 2;
      }
      p++;
    }
  }

  return setParsedValues(m, prio, pgn, dst, src, len);
}