3FG wrote:Bengt,
I have backup files from February of 2013 with the core algorithm already programmed, so my progress has been very slow.
well, the Github repository for IrTransmogrifier was created in September 2015 (existed om my local disk possibly a year before), 370 commits, > 17k lines Java (4.5k of that is test code), and still no first version...
My intent has been to provide a decoder which uses a single engine to do the decoding, rather than e.g. having one routine for "gap" signals and a different one for biphase signals. I believe that facilitates adding new protocols without much danger of breaking the algorithm(s).
Sorry, do not follow.
Secondly, I want a decoder which accepts protocol definitions from a text file, so that a user can add a new protocol easily.
OK
Third, since my interests are strongly aligned with UEI remotes, I want a way in which decoded signals can be automatically converted for use with UEI executors.
Well, I have previously argued that this "mapping" contains decisions that are better left to the user. Nevertheless, having a smarter, possibly heuristic, mapping of a set of IR signals ("a remote" in IrScrutinizer terminology) might be a good idea, at least as long as the user can reject it. There can be a data base of rules how to map set of IR signals to UEI executors. BUT, isn't this a completely different usecase from decoding and identifying IR signals?
The third desire also explains why the protocol definitions in IRdefs.asc yield a decode of "NEC1 Missing ditto frame" rather than "NEC"-- the UEI executors need to have either NEC1 or NEC2 specified. IMO, "NEC1 Missing ditto frame" is both an accurate description and clearer than "NEC".
Seems like you like to have what DecodeIR calls "NEC" called "NEC1 Missing ditto frame" instead.
When I started this effort, I planned to use IRP as the input. I had difficulty in getting your code to compile (I didn't understand how Antler worked),
Instructions are
here. If you have problems after reading that, I'll help. But please note that it might be a better idea to use the
public API.
It can't represent the B&O protocol
Disagree
It is awkward in representing protocols with variable lead in structure, e.g. Zenith
Don't follow you here. Zenit is a PITA, but IMHO because of the variable length bitfield.
It describes burst sequences in time order from left to right, but by default parameters
are described in lsb, which is the reverse time order.
IIRC, when I write IrpMaster, I discovered that there was a discrepancy between the documentation ("the general spec says how it is to be interpreted") and the "established" IRP protocols (I think took them MSB), so I followed the latter. There
may be some stuff to be clarified here. (It is "all academics"... which to me does not mean that it is unimportant.)
It appears that while parsers can recognize erroneous syntax, they have difficulty in pinpointing the error
IMHO, IrScrutinizer is not worse, possibly better, than comparable programs.
And that's important, because Bengt and Graham seem to be the only two people on the planet who can confidently write complicated IRP
May be some truth here (

) but we are also the two "mathematicians" of the forum. Reformulating algorithms into another setting (like the expression setting of IRP) is not something that you will be good at just because you master the target language.
It doesn't have a mechanism for describing acceptable tolerances when decoding.
Was not intended for that either. Such an attribute is easily added to the protocol data base. Oh, I think it is overkill to have a tolerance on every single durations. (You seem to have 30% on everything anyhow...)
Doesn't describe what to do when decoding a partial signal.
Was not meant for that either. In IrTransmogrifier I have some "decode-only" protocols like "NEC" (in the DecodeIR sense), Denon{1] and Denon{2}, which is how I envision that you tackle that problem.
Has no way to describe e.g. Gray coded signals
Agree. I would also like to mention CRC checksums, cf. Glow-with-the show. The way the latter was "solved" was with overparametrization: the user is required to enter the CRC value. This is not an attractive solution.
Actually, my criticism is somewhat orthogonal to yours: I think that it contains too may possibilities to express "sillyness" that we never would like to implement, in particulat w.r.t. repetitions, like (...)* ... (...)* and, even worse, (... (...)* ....)* (hierarchical repeats). (FYI: IrTransmogrifier rejects multiple repeats).
But most importantly, the few shortcomings of IRP, is that a reason to throw it all out and start all over again? If you throw something out and replace it, at least you should "prove" that it is better than what it replaces.
You approach amounts to introducing keywords with special hard-soldered semantics.
BTW, I found you collection of test files quite useful; thanx for that.
Still have some more things on my mind, but this is getting long enough...
Nice to have some more substantial discussion.
