static int uirt2_send_mode2_raw(uirt2_t *dev, struct ir_remote *remote, lirc_t *buf, int length) { byte_t tmp[64]; int i, dest; int ir_length = 0; int res; int repeats = 1; LOGPRINTF(1, "uirt2_send_mode2_raw %d %p", length, buf); tmp[0] = 0; tmp[1] = 0; for (i = 0, dest = 2; i < length; i++) { int val = buf[i] / UIRT2_UNIT; while(val > 0) { if(val > UCHAR_MAX) { tmp[dest++] = UCHAR_MAX - 1; tmp[dest++] = 1; /* 0 won't work */ val -= UCHAR_MAX; length += 2; } else { tmp[dest++] = val; val = 0; } if (dest - 2 > 48) { logprintf(LOG_ERR, "uirt2_raw: too long RAW transmission %d > 48", dest - 2); return 0; } } ir_length += buf[i]; } tmp[dest++] = uirt2_calc_freq(remote->freq) + (repeats & 0x1f); res = uirt2_send_raw(dev, tmp, dest); if (!res) { return 0; } LOGPRINTF(1, "uirt2_send_mode2_raw exit"); return 1; }
static int uirt2_send_mode2_raw(uirt2_t *dev, struct ir_remote *remote, lirc_t *buf, int length) { byte_t tmp[1024]; int i; int ir_length = 0; int res; int repeats = 1; if (length > 48) { logprintf(LOG_ERR, "uirt2_raw: too long RAW transmission %d > 48", length); return 0; } LOGPRINTF(1, "uirt2_send_mode2_raw %d %p", length, buf); tmp[0] = 0; tmp[1] = 0; for (i = 0; i < length; i++) { tmp[2 + i] = buf[i] / UIRT2_UNIT; ir_length += buf[i]; } tmp[2 + length] = uirt2_calc_freq(remote->freq) + (repeats & 0x1f); res = uirt2_send_raw(dev, tmp, length + 3); if (!res) { return 0; } LOGPRINTF(1, "uirt2_send_mode2_raw exit"); return 1; }