bug in lirc code: 'post' data from conf file not sent
[email protected] Sat, 10 Feb 2018 15:57:00 +0100
| Newsgroups | gmane.comp.hardware.lirc |
|---|---|
| Message-ID | <trinity-1d65acfd-358c-4ec4-abb3-c332480dd6d4-1518274620728@3c-app-gmx-bs52> |
Hi
I found the issue and I believe it is a bug: 'post' (i.e., a pulse and a space of specific lengths) is only sent if also 'post_data' (i.e., a sequence of 'zero' and 'one') is configured. This limitation is not described in the documentation (see http://www.lirc.org/html/lircd.conf.html). In more detail: the function send_post(remote) sends only if has_post(remote) is true; this is only the case if remote->post_data_bits > 0 (code snippets for your convenience below).
Two options to correct:
1) Fix the code in lib/transmit.c (preferred) - move "if (has_post(remote)) {" down by 4 lines so that it only applies to "send_data" (= the post_data) but not to sending the pulse and space of post.
2) Fix the documentation - add that post is only sent if also post_data will be sent.
Best
Al_
***** Code snippets *****
// copied from lib/transmit.c
static void send_post(struct ir_remote* remote)
{
if (has_post(remote)) {
if (remote->post_p > 0 && remote->post_s > 0) {
send_pulse(remote->post_p);
send_space(remote->post_s);
}
send_data(remote, remote->post_data, remote->post_data_bits, remote->pre_data_bits + remote->bits);
}
}
// copied from lib/ir_remote.h
static inline int has_post(const struct ir_remote* remote)
{
if (remote->post_data_bits > 0)
return 1;
else
return 0;
}
> Gesendet: Samstag, 03. Februar 2018 um 18:08 Uhr
> Von: [email protected]
> An: [email protected]
> Cc: [email protected]
> Betreff: 'post' data from conf file not sent
>
> Hi
>
> I have decoded the IR signal from a heater and written a conf file (copied below). However, when I send an IR signal with "irsend SEND_ONCE zehnderheating KEY_8", the 'post' pulse and space are missing; all other pulses and spaces are correct (see oscilloscope output at https://imgur.com/a/b06JM ; the measured length of the last long pulse matches ptrail, but post is missing). Run on a Raspberry Pi 3 with raspbian kernel version 4.9.59-v7+ and irsend version 0.9.4c.
>
> Any idea what could be the reason?
>
> Al_
>
>
>
> begin remote
>
> name zehnderheating
> bits 8
> pre_data_bits 8
> flags SPACE_ENC
> # eps 10
> aeps 68
> min_repeat 0
>
> zero 30 650
> one 30 830
> # sequence: header plead pre_data pre data post post_data ptrail foot gap
> header 30 1000
> pre_data 0xB8
> # post 30 460
> # ptrail 30
> post 1000 460
> ptrail 300
> # an arbitrary long space as nothing follows
> gap 100000
>
> frequency 455000
> duty_cycle 50
>
> begin codes
> KEY_0 0x0D # switch heater off
> KEY_1 0x86
> KEY_2 0x95
> KEY_3 0xA0
> KEY_4 0xB3
> KEY_5 0xCA
> KEY_6 0xD9
> KEY_7 0xEC
> KEY_8 0xFF
> end codes
>
> end remote
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot