Infrared4Arduino
Pronto.cpp
Go to the documentation of this file.
1 #include "Pronto.h"
2 #include "IrSignal.h"
3 #include <string.h>
4 
5 IrSignal *Pronto::parse(const uint16_t *data, size_t size) {
6  double timebase = 0.241246 * data[1];
7  frequency_t frequency;
8  switch (data[0]) {
9  case 0x0000:
10  frequency = toFrequency(data[1]);
11  break;
12  case 0x0100:
13  frequency = (frequency_t) 0;
14  break;
15  default:
16  return NULL;
17  }
18  size_t introPairs = data[2];
19  size_t repetitionPairs = data[3];
20  if (4 + 2*(introPairs + repetitionPairs) != size) // inconsistent sizes
21  return NULL;
22 
23  IrSequence *intro = mkSequence(data + 4, introPairs, timebase);
24  IrSequence *repeat = mkSequence(data + 4 + 2*introPairs, repetitionPairs, timebase);
25  IrSequence *ending = new IrSequence();
26 
27  return new IrSignal(*intro, *repeat, *ending, frequency);
28 }
29 
30 IrSignal *Pronto::parse(const char *str) {
31  size_t len = strlen(str)/5 + 1;
32  microseconds_t data[len];
33  unsigned int index = 0;
34  const char *p = str;
35  char *endptr[1] = { NULL };
36  while (*p) {
37  long x = strtol(p, endptr, 16);
38  data[index++] = (microseconds_t) x;
39  p = *endptr;
40  }
41  return parse(data, index);
42 }
43 
44 IrSequence *Pronto::mkSequence(const uint16_t* data, size_t noPairs, double timebase) {
45  microseconds_t *durations = new microseconds_t[2*noPairs];
46  for (unsigned int i = 0; i < 2*noPairs; i++)
47  durations[i] = (microseconds_t) (data[i] * timebase);
48  return new IrSequence(durations, 2*noPairs, true);
49 }
uint16_t microseconds_t
Type for durations in micro seconds.
Definition: InfraredTypes.h:16
This class models an IR signal with intro-, repeat-, and ending sequences.
Definition: IrSignal.h:11
static IrSignal * parse(const uint16_t *data, size_t size)
Function for parsing its input data into an IrSignal.
Definition: Pronto.cpp:5
uint16_t frequency_t
Type for modulation frequency in Hz.
Definition: InfraredTypes.h:33
This class consists of a vector of durations.
Definition: IrSequence.h:12