36 #ifndef _IR_PRONTO_HPP 
   37 #define _IR_PRONTO_HPP 
   51 static const uint16_t learnedToken = 0x0000U;
 
   52 static const uint16_t learnedNonModulatedToken = 0x0100U;
 
   53 static const uint16_t bitsInHexadecimal = 4U;
 
   54 static const uint16_t digitsInProntoNumber = 4U;
 
   55 static const uint16_t numbersInPreamble = 4U;
 
   56 static const uint16_t hexMask = 0xFU;
 
   57 static const uint32_t referenceFrequency = 4145146UL;
 
   58 static const uint16_t fallbackFrequency = 64767U; 
 
   59 static const uint32_t microsecondsInSeconds = 1000000UL;
 
   60 static const uint16_t PRONTO_DEFAULT_GAP = 45000;
 
   64     return ((referenceFrequency / code) + 500) / 1000;
 
   73     uint16_t timebase = (microsecondsInSeconds * data[1] + referenceFrequency / 2) / referenceFrequency;
 
   79     case learnedNonModulatedToken: 
 
   85     uint16_t intros = 2 * data[2];
 
   86     uint16_t repeats = 2 * data[3];
 
   87 #if defined(LOCAL_DEBUG) 
   88     Serial.print(F(
"sendPronto intros="));
 
   90     Serial.print(F(
" repeats="));
 
   91     Serial.println(repeats);
 
   93     if (numbersInPreamble + intros + repeats != length) { 
 
  101     uint16_t durations[intros + repeats];
 
  102     for (uint16_t i = 0; i < intros + repeats; i++) {
 
  103         uint32_t duration = ((uint32_t) data[i + numbersInPreamble]) * timebase;
 
  104         durations[i] = (uint16_t)((duration <= UINT16_MAX) ? duration : UINT16_MAX);
 
  112         sendRaw(durations, intros - 1, khz);
 
  127         sendRaw(durations + intros, repeats - 1, khz);
 
  152     size_t len = strlen(str) / (digitsInProntoNumber + 1) + 1;
 
  156     for (uint16_t i = 0; i < len; i++) {
 
  157         long x = strtol(p, endptr, 16);
 
  158         if (x == 0 && i >= numbersInPreamble) {
 
  163         data[i] = 
static_cast<uint16_t
>(x); 
 
  176 void IRsend::sendPronto_PF(uint_farptr_t str, int_fast8_t aNumberOfRepeats) {
 
  177     size_t len = strlen_PF(str);
 
  179     strcpy_PF(work, str); 
 
  184 void IRsend::sendPronto_P(
const char *str, int_fast8_t aNumberOfRepeats) {
 
  185     size_t len = strlen_P(str);
 
  196     size_t len = strlen_P(
reinterpret_cast<const char*
>(str));
 
  198     strcpy_P(work, 
reinterpret_cast<const char*
>(str));
 
  203     return frequency > 0 ? frequency : fallbackFrequency;
 
  215     return (
char) (x <= 9 ? (
'0' + x) : (
'A' + (x - 10)));
 
  224     for (uint16_t i = 0; i < digitsInProntoNumber; i++) {
 
  225         uint16_t shifts = bitsInHexadecimal * (digitsInProntoNumber - 1 - i);
 
  232     dumpNumberHex(aSerial, (duration + timebase / 2) / timebase);
 
  239     for (
size_t i = 0; i < length; i++) {
 
  262     aSerial->println(F(
"Pronto Hex as string without repeat sequence"));
 
  263     aSerial->print(F(
"char prontoData[] = \""));
 
  264     dumpNumberHex(aSerial, aFrequencyHertz > 0 ? learnedToken : learnedNonModulatedToken);
 
  268     uint16_t timebase = 
toTimebase(aFrequencyHertz);
 
  270     aSerial->println(F(
"\";"));
 
  287     for (uint16_t i = 0; i < digitsInProntoNumber; i++) {
 
  288         uint16_t shifts = bitsInHexadecimal * (digitsInProntoNumber - 1 - i);
 
  289         size += 
dumpDigitHex(aString, (number >> shifts) & hexMask);
 
  291     aString->concat(
' ');
 
  300 static size_t dumpDurationHex(String *aString, uint32_t duration, uint16_t timebase) {
 
  301     return dumpNumberHex(aString, (duration + timebase / 2) / timebase);
 
  308     for (
size_t i = 0; i < length; i++) {
 
  334     size += 
dumpNumberHex(aString, frequency > 0 ? learnedToken : learnedNonModulatedToken);
 
  344 #if defined(LOCAL_DEBUG) 
  347 #endif // _IR_PRONTO_HPP