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