{"id":17576956,"url":"https://github.com/bengtmartensson/irptransmogrifier","last_synced_at":"2025-09-03T17:42:23.624Z","repository":{"id":44804401,"uuid":"42807119","full_name":"bengtmartensson/IrpTransmogrifier","owner":"bengtmartensson","description":"Parser for IRP notation protocols, with rendering, code generation, and decoding.","archived":false,"fork":false,"pushed_at":"2025-05-21T11:32:21.000Z","size":11117,"stargazers_count":29,"open_issues_count":10,"forks_count":5,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-07-25T05:50:04.322Z","etag":null,"topics":["antlr","code-generation","decoder","infrared","ir","irp","irp-protocols","lirc","parser","remote-control"],"latest_commit_sha":null,"homepage":"http://www.harctoolbox.org/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bengtmartensson.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2015-09-20T09:11:13.000Z","updated_at":"2025-05-21T11:31:50.000Z","dependencies_parsed_at":"2023-10-11T11:38:14.294Z","dependency_job_id":"972c3c89-619f-476c-93e3-85ceec4c9924","html_url":"https://github.com/bengtmartensson/IrpTransmogrifier","commit_stats":{"total_commits":1229,"total_committers":4,"mean_commits":307.25,"dds":0.004068348250610199,"last_synced_commit":"0205c0c4ffff34e894d4db54bb424a66a77e820d"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/bengtmartensson/IrpTransmogrifier","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bengtmartensson%2FIrpTransmogrifier","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bengtmartensson%2FIrpTransmogrifier/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bengtmartensson%2FIrpTransmogrifier/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bengtmartensson%2FIrpTransmogrifier/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bengtmartensson","download_url":"https://codeload.github.com/bengtmartensson/IrpTransmogrifier/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bengtmartensson%2FIrpTransmogrifier/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273484079,"owners_count":25114115,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-03T02:00:09.631Z","response_time":76,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["antlr","code-generation","decoder","infrared","ir","irp","irp-protocols","lirc","parser","remote-control"],"created_at":"2024-10-21T23:43:43.163Z","updated_at":"2025-09-03T17:42:23.565Z","avatar_url":"https://github.com/bengtmartensson.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# IrpTransmogrifier\n[![Java CI with Maven + Upload](https://github.com/bengtmartensson/IrpTransmogrifier/actions/workflows/maven.yml/badge.svg)](https://github.com/bengtmartensson/IrpTransmogrifier/actions/workflows/maven.yml)\n\nParser for IRP notation protocols, with rendering, code generation, recognition applications.\n\nThis is a new program, written from scratch, that is intended to replace IrpMaster, DecodeIR, and (most of) ExchangeIR,\nand much more like potentially replacing \"all\" hand written decoders/renderers.\nThe project consists of an API library that is also callable from the command line as a command line program.\nA GUI is possible, as well as the integration in GUI programs, like IrScrutinizer.\n\n## Acknowledgement\nI would like to acknowledge the influence of the [JP1 forum](http://hifi-remote.com/forums/index.php), both the programs\n(in particular of course [DecodeIR](http://www.hifi-remote.com/wiki/index.php?title=DecodeIR), and the discussions\n(in particular with Dave Reed (\"3FG\") and Graham Dixon (\"mathdon\")).\nThis work surely would not exist without the JP1 forum.\n\n## Background\nThis program can be considered as a successor of [IrpMaster](https://harctoolbox.org/IrpMaster,html).\nThe Irp parser therein is based upon a [ANTLR3 grammar](http://www.antlr.org). The \"new version\"\nANTLR4 is really not a new version, but a completely different tool, fixing most of the quirks that were irritating\nin IrpMaster (like the \"ugliness\" of embedding actions within the grammar, no left recursion, and much more).\nUnfortunately, this means that using version 4 instead of version 3 is not like updating a compiler or such,\nbut \"necessitates\" a complete rewrite of the actions.\n\nBut that is of course not all: Both DecodeIR by John Fine and the Analyzer by Graham Dixon have shown to be\nessentially impossible to maintain and extend. Although DecodeIR and IrpMaster (through the data base `IrpProtocols.ini`)\nagree on most (but not all) protocols, this consists of two different, dis-coupled sources of protocol information. Finally, to be able to\ngenerate code from the IRP form is a natural wish.\n\n## Use cases\nThe reason for this project is not (just) to migrate IrpMaster to ANTLR4 -- version 3 is still operational,\nand no more broken than it was at the start. There are a number of interesting use cases for a nice parser/tree traverser:\n\n### Rendering\nThis use case corresponds to IrpMaster. It is probably to be implemented as a traversing of the parse tree of an IRP protocol,\nwith numerical values assigned to the parameters.\n\nIn the present implementation, only one infinite repeat is allowed.\n(A realistic protocol, or use case, requiring more than\none infinite repeat is not known to me.) Also, individual bitfields are restricted to 63 bits of length or less.\n(This is inherited from the use of Java's long type. It [may be removed in the future](https://github.com/bengtmartensson/IrpTransmogrifier/issues/38).)\nWith the exception of these restriction, the implementations should be complete, down to specification holes.\nThere are also a few extensions to the IRP notation as described in the [official documentation](http://www.hifi-remote.com/wiki/index.php/IRP_Notation).\n\nIn IrScrutinizer, the word \"generate\" is used instead of \"render\". These words can be considered as synonyms (here).\n\n### Recognition\nThis use case corresponds to a dynamic version of DecodeIR: given a numerical IR signal,\nfind the parameter/protocol combination(s) that could have generated the given signal.\nThis is implemented by trying to parse the given signal with respect to the candidate protocols.\nIt is thus very systematic, but [comparatively slow](https://github.com/bengtmartensson/IrpTransmogrifier/issues/44).\n\nIt is not claimed that all protocols in the protocol data base are recognizable.\nNon-recognizable protocols are to be marked by setting the `decodable` parameter to `false`.\nTo be recognizable, the IRP protocol should preferably adhere to some additional rules:\n\n* The \"+\" form of repetitions is discouraged in favor of the \"*\" form.\n* The width and shift of a Bitfield must be constant.\n* The decoder is capable of _simple_ equation solving (e.g. `Arctech`), but not of complicated equation solving.\n\nPresently all but two protocols (`zenith`, `nec1-shirriff`, (bitfield width as parameter), `fujitsu_aircon` (would require non-trivial equation solving))\nare recognizable.  It is not guaranteed that new protocols automatically will be recognizable.\n\n#### Loose matches, Guessing\nMany captured signals are not quite correct according to their protocol. However, the firmware in a receiving device is often \"forgiving\",\nand accepts slightly flawed signals. It is thus desirable for a program of this type to find a near match, \"guess\", when an real match fails.\nThis is known as loose mode, opposite of \"strict\" mode. For practical reasons, the loose mode is the default in the command line usage.\nThe strict mode is enabled using the decode option `--strict`.\n\n### Code generation for rendering and/or decoding\nFor a particular protocol, generate target code (C, C++, Java, Python,...) that can render or decode signals\nwith the selected protocol. As opposed to the previous use cases, efficency (memory, execution time) (for the generated code) is potentially\nan issue. This should be able to generate protocol renders for e.g. the Arduino libraries IrRemote, IrLib, and AGirs.\nAt least in the first version, not all protocols describable by IRPs need to be supported. Not implemented in the first phase: Protocols with hierarchical bitspecs\n(rc6*, replay, arctech, entone), protocols with bitspec lenght as parameter (zenith, nec1-shirrif). Also default are not implemented, e.g. NEC1 has to be\ncalled with 3 parameters.\n\nTwo mechanisms are available: XML and [Stringtemplate](http://www.stringtemplate.org/).\nThe program does not come with an XSLT engine, so this has to be invoked independently on the XML export.\nThe program just invokes the template, without caring what it does; if it generates a renderer or decoder.\nThe user is instead governs this by invoking the style sheets or templates (s)he want using the `--target` (`-t`) option to the `code` sub subcommand.\n(For this reason, there is no `--renderer` or `--decoder` option to the `code` sub command.)\nIt is also possible to pass\ntarget-specific parameters to the code generators using the `--parameter` (`-p`) argument.\n\nTargets:\n* [Lircd.conf](http://lirc.org/html/lircd.conf.html) generation from IrScrutinizer. This is based on an XSLT-transformation (`lirc.xsd`) and generates\n [an XSLT (version 1) file that can work with IrScrutinizer](https://github.com/bengtmartensson/IrScrutinizer/blob/master/src/main/config/exportformats.d/lirc.xml).\nHandling of definitions as well as expressions as bitfields not implemented, as well as a few other things (search for \"omitted\" in the above file),\notherwise works. \"90% complete\", see [this issue](https://github.com/bengtmartensson/IrpTransmogrifier/issues/6).\nTo create: see the project [IrProtocolGeneration](https://github.com/bengtmartensson/IrProtocolCodeGeneration).\nIn short, this generates the xml export, and then invokes\nxslt transformations on that xml file.\n* Java. Essentially for testing. This is essentially working both for rendering and decoding, including a generated test rig\n(see the [test project](https://github.com/bengtmartensson/JavaIrpProtocolTest)). Targets: `java-decoder java-decoder-test java-renderer java-renderer-test`.\nNot quite finished, see [this issue](https://github.com/bengtmartensson/IrpTransmogrifier/issues/25).\n\nSome possible future targets:\n* [Infrared4Arduino](https://github.com/bengtmartensson/Infrared4Arduino).\n* [IRremote](https://github.com/z3t0/Arduino-IRremote)\n* Linux kernel modules in [linux/drivers/media/rc](https://github.com/torvalds/linux/tree/master/drivers/media/rc) (decoding only).\n\n### General code analysis\nNot really connected to parsing IRP, but fits in the general framework.\nThis has been inspired by to the Analyzer and the RepeatFinder in\n[Graham Dixon's ExchangeIR](http://www.hifi-remote.com/forums/dload.php?action=file\u0026file_id=8460)\n([Java translation](https://sourceforge.net/p/controlremote/code/HEAD/tree/trunk/exchangeir/)).\n\n## Protocol Data Base\nThe \"ini\"-file `IrpProtocols.ini` of IrpMaster has been replaced by an XML file,\nper default called `IrpProtocols.xml`. The XML format\nis defined by the W3C schema [irp-protocols](https://harctoolbox.org/schemas/irp-protocols.xsd), and has the name space\n`http://www.harctoolbox.org/irp-protocols`. This format has many advantages in\ncomparison with the simpler previous format, for example, it can contain embedded XHTLM fragments.\nIt also can contain different parameters that can be used by different programs, for example, tolerance parameters\nfor decoding.\nArbitrary string-valued parameters are permitted. It is up to an interpreting program to determine the semantic.\n\nThere is also an XSLT stylesheet, which technically translates the XML to HTML, allowing for a user\nfriendly reading of IrpProtocols.xml in the browser.\n\n## API documentation\nUp-to-date API documentation, generated by Javadoc, is found [here](https://bengtmartensson.github.io/IrpTransmogrifier/).\n\n## Integration in Maven projects\nThis project can be integrated into other projects using Maven. For this, include the lines\n```\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.harctoolbox\u003c/groupId\u003e\n            \u003cartifactId\u003eIrpTransmogrifier\u003c/artifactId\u003e\n            \u003cversion\u003e1.2.3\u003c/version\u003e  \u003c!-- or another supported version --\u003e\n        \u003c/dependency\u003e\n```\nin the `pom.xml` of the importing project.\n\n## Installation\nUnpack the binary distribution in a new, empty directory. Start the program by invoking the wrapper\n(`irptransmogrifier.bat` on Windows, `irptransmogrifier.sh` on Unix-like systems like Linux and MacOS.)\nfrom the command line.\nModify and/or relocate the wrapper(s) if desired or necessary.\nDo not double click the wrappers, since this program runs only from the command line.\n\nAlso, do not use the wrapper `irptransmogrifier` in the top top directory of the source tree.\nThis is intended for development only, not by users.\n\n## Building from sources\nThe project uses [Maven](https://maven.apache.org/) as build system. Any modern IDE should be able\nto open/import and build it (as Maven project). Of course, Maven can also be run from the command line,\nlike\n\n    mvn install\n\n## Dependencies\nThe program depends on [ANTLR4](https://www.antlr.org) ([license](https://github.com/antlr/antlr4/blob/master/LICENSE.txt)),\n[Stringtemplate](https://www.stringtemplate.org/), ([license](https://github.com/antlr/stringtemplate4/blob/master/LICENSE.txt)),\nas well as the command line decoder [JCommander](http://jcommander.org/). (licensed under the [Apache 2 license](https://github.com/cbeust/jcommander/blob/master/license.txt)).\nWhen using Maven for building, these are automatically downloaded and installed.\n\n## Usage\nUsing from the command line, this is a command with sub commands. Before the sub command,\ncommon options can be given. After the command, command-specific options can be specified.\nCommands and option names can be abbreviated, as long as the abbreviation is unique.\nThey are matched case sensitively, and can be abbreviated as long as the abbreviation is unambiguous.\n\nThe command\n\n    irptransmogrifier help --short\nlists the subcommands.\nA command like\n\n    irptransmogrifier analyze --help\ngives the usage for the subcommand `analyze`,\nwhile a command like\n\n    irptransmogrifier analyze --help\ngives a possibly somewhat longer description for the subcommand `analyze`.\n\n\nThe subcommands are briefly described next.\n\n### Subcommand analyze\nThe \"analyze\" command takes as input one or several sequences or signals,\nand computes an IRP form that corresponds to the given input (within\nthe specified tolerances). The input can be given either as Pronto\nHex or in raw form, optionally with signs (ignored). Several raw\nformat input sequences can be given by enclosing the individual sequences\nin brackets (\"[]\"). However, if using the `--intro-repeat-ending` option,\nthe sequences are instead interpreted as intro-, repeat-, and (optionally)\nending sequences of an IR signal.\n\nFor raw sequences, an explicit modulation frequency can be given with\nthe `--frequency` option. Otherwise the default frequency, 38000Hz,\nwill be assumed.\nIf this option is given together with a Pronto type signal (which contains\na modulation frequency), it is ignored.\n\nUsing the option `--input`, instead the content of a file can be taken\nas input, containing sequences to be analyzed, one per line, blank\nlines ignored. Using the option `--namedinput`, the sequences may have\nnames, immediately preceeding the sequence.\nIn both cases, the data is taken as IrSequences.\nIrSignals, with intro-, repeat-, and ending, are coerced into IrSequences.\n\nIn the Harctoolbox world, IR sequences start with a flash (mark) and ends with a\nnon-zero gap (space). In some other \"worlds\", the last gap is omitted. These signal\nare in general rejected. The option `--trailinggap \u003cduration\u003e` adds a dummy duration\nto the end of each IR sequence lacking a final gap.\n\nInput sequences can be pre-processed using the options `--chop`, `--clean`,\nand `--repeatfinder`.\n\nThe cleaner works according to this idea: The collected durations found in the sequence(s)\nare bundled into \"bins\" (disjoint intervals), according to `absolutetolerance` and `relativetolerance`.\nEvery duration belonging to a bin is \"close\" (determined by those parameters) to the bin\nmiddle. All the durations within the bin are then replaced by the average of its\nmembers. It is thus not guaranteed that the distance between a duration and its relacement\nwill be consistent with `absolutetolerance` and `relativetolerance`.\n\nThe input sequence(s) are matched using different \"decoders\". Normally\nthe \"best\" decoder match is output. With the `--all` option, all decoder\nmatches are output.\n\nThe options `--statistics` and `--dump-repeatfinder` (the latter forces\nthe repeatfinder to be on) can be used to print extra information.\nThe common options `--absolutetolerance`, `--relativetolerance`, `--minrepeatgap`\ndetermine how the repeat finder breaks the input data. The options\n`--extent`, `--invert`, `--lsb`, `--maxmicroseconds`, `--maxparameterwidth`,\n`--maxroundingerror`, `--maxunits`, `--parameterwidths`, `--radix`, and `--timebase`\ndetermine how the computed IRP is displayed.\n\n## Subcommand bitfield\nThe \"bitfield\" command computes the value and the binary form corresponding\nto the bitfield given as input. Using the `--nameengine` argument,\nthe bitfield can also refer to names.\n\nAs an alternatively, the \"expression\" command may be used.\n\n## Subcommand code\nUsed for generating code for different targets.\n\n## Subcommand decode\nThe \"decode\" command takes as input one or several sequences or signals,\nand output one or many protocol/parameter combinations that corresponds\nto the given input (within the specified tolerances). The input can\nbe given either as Pronto Hex or in raw form, optionally with signs\n(ignored). Several raw format input sequences can be given by enclosing\nthe individual sequences in brackets (\"[]\").\n\nFor raw sequences, an explicit modulation frequency can be given with\nthe `--frequency` option. Otherwise the default frequency, 38000Hz,\nwill be assumed.\n\nUsing the option `--input`, instead the content of a file can be taken\nas input, containing sequences to be analyzed, one per line, blank\nlines ignored. Using the option `--namedinput`, the sequences may have\nnames, immediately preceeding the signal.\n\nIn the Harctoolbox world, IR sequences start with a flash (mark) and ends with a\nnon-zero gap (space). In some other \"worlds\", the last gap is omitted. These signal\nare in general rejected. The option `--trailinggap \u003cduration\u003e` adds a dummy duration\nto the end of each IR sequence lacking a final gap.\n\nInput sequences can be pre-processed using the options `--clean`, and\n`--repeatfinder`.\n\nThe common options `--absolutetolerance`, `--relativetolerance`, `--minrepeatgap`\ndetermine how the repeat finder breaks the input data.\n\n## Subcommand help\n\nThis command list the syntax for the command(s) given as argument,\ndefault all. Also see the option `--describe`.\n\n## Subcommand lirc\nThis command reads a Lirc configuration, from a file, directory, or\nan URL, and computes a correponding IRP form.\n\n## Subcommand list\nThis command list miscellaneous properties of the protocol(s) given\nas arguments.\n\n## Subcommand render\nThis command is used to compute an IR signal from one or more protocols\n(\"render\" it). The protocol can be given either by name(s) (or regular\nexpression if using the `--regexp` option), or, using the `--irp` options,\ngiven explicitly as an IRP form. The parameters can be either given\ndirectly with the -n option,or the `--random` option can be used to\ngenerate random, but valid parameters. With the `--count` or `--number-repeats`\noption, instead an IR sequence is computed,containing the desired\nnumber of repeats.\n\n## Subcommand version\nReports version number and license.\n\n## Usage message\n```\nUsage: IrpTransmogrifier [options] [command] [command options]\n  Options:\n    -a, --absolutetolerance\n      Absolute tolerance in microseconds, used when comparing durations.\n      Default: 100.0.\n    -b, --blacklist\n      List of protocols to be removed from the data base\n    -C, --commentStart\n      Character(s) to be considered starting a line comment in input and\n      namedInput files.\n    -c, --configfiles\n      Pathname(s) of IRP database file(s) in XML format. Default is the one in\n      the jar file. Can be given several times.\n    --describe\n      Print a possibly longer documentation for the present command.\n    -f, --frequencytolerance\n      Frequency tolerance in Hz. Negative disables frequency check. Default:\n      2000.0.\n    -h, -?, --help\n      Print help for this command.\n    -e, --encoding, --iencoding\n      Encoding used to read input.\n      Default: UTF-8\n    -i, --irp\n      Explicit IRP string to use as protocol definition.\n    --logclasses\n      List of (fully qualified) classes and their log levels, in the form\n      class1:level1|class2:level2|...\n      Default: \u003cempty string\u003e\n    -L, --logfile\n      Log file. If empty, log to stderr.\n    -F, --logformat\n      Log format, as in class java.util.logging.SimpleFormatter.\n      Default: [%2$s] %4$s: %5$s%n\n    -l, --loglevel\n      Log level { OFF, SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST, ALL\n      }\n      Default: WARNING\n    --min-leadout\n      Threshold for leadout when decoding. Default: 20000.0.\n    -g, --minrepeatgap\n      Minimum gap required to end a repetition.\n      Default: 5000.0\n    --oencoding\n      Encoding used in generated output.\n      Default: UTF-8\n    -o, --output\n      Name of output file. Default: stdout.\n    -O, --override\n      Let given command line parameters override the protocol parameters in\n      IrpProtoocols.xml\n      Default: false\n    -q, --quiet\n      Quitest possible operation, typically to be used from scripts.\n      Default: false\n    --regexp\n      Interpret protocol/decoder argument as regular expressions.\n      Default: false\n    -r, --relativetolerance\n      Relative tolerance as a number \u003c 1. Default: 0.3.\n    --seed\n      Set seed for the pseudo random number generation. If not specified, will\n      be random, different between program invocations.\n    -s, --sort\n      Sort the protocols alphabetically on output.\n      Default: false\n    -t, --tsv, --csv\n      Use tabs in output to optimize for the import in spreadsheet programs as\n      cvs.\n      Default: false\n    -u, --url-decode\n      URL-decode protocol names, (understanding %20 for example).\n      Default: false\n    --validate\n      Validate IRP database files against the schema, abort if not valid.\n      Default: false\n    --version\n      Report version. Deprecated; use the command \"version\" instead.\n      Default: false\n    -x, --xmllog\n      Write the log in XML format.\n      Default: false\n  Commands:\n    help      Describe the syntax of program and commands.\n      Usage: help [options] commands\n        Options:\n          --describe\n            Print a possibly longer documentation for the present command.\n          -h, -?, --help\n            Print help for this command.\n          -l, --logging\n            Describe the logging related options only.\n            Default: false\n          -c, --common, --options\n            Describe the common options only.\n            Default: false\n          -s, --short\n            Produce a short usage message.\n            Default: false\n\n    version      Report version and license.\n      Usage: version [options]\n        Options:\n          --describe\n            Print a possibly longer documentation for the present command.\n          -h, -?, --help\n            Print help for this command.\n          -s, --short\n            Issue only the version number of the program proper.\n            Default: false\n\n    list      List protocols and their properties.\n      Usage: list [options] List of protocols (default all)\n        Options:\n          -a, --all\n            Implies (almost) all of the \"list xxx\"-options.\n            Default: false\n          --check-sorted\n            Check if the protocol are alphabetically.\n            Default: false\n          -c, --classify\n            Classify the protocol(s).\n            Default: false\n          --describe\n            Print a possibly longer documentation for the present command.\n          --gui, --display\n            Display parse diagram.\n            Default: false\n          --documentation\n            Print (possible longer) documentation, as a dumb rendering of the\n            HTML documenation.\n            Default: false\n          -d, --dump\n            Print the IRP data base as DOC tree stringified, including initial\n            XML comments.\n            Default: false\n          -h, -?, --help\n            Print help for this command.\n          --html\n            Print (possible longer) documentation as HTML.\n            Default: false\n          -i, --irp\n            List IRP form, as given in the database (unparsed, i.e. preserving\n            comments and whitespace, not taking --radix into account).\n            Default: false\n          -m, --mindiff\n            Compute minimal difference between contained durations.\n            Default: false\n          --name\n            List protocol name, also if --quiet is given.\n            Default: false\n          -n, --normalform\n            List the normal form.\n            Default: false\n          --prefer-overs\n            List all protocol's prefer-overs, recursively.\n            Default: false\n          -r, --radix\n            Radix of parameter output.\n            Default: 10\n          --stringtree\n            Produce stringtree.\n            Default: false\n          --warnings\n            Issue warnings for some problematic IRP constructs.\n            Default: false\n          -w, --weight\n            Compute weight of the protocols.\n            Default: false\n          -x, --xml\n            Like dump, but without XML comments.\n            Default: false\n\n    render      Render signal from parameters\n      Usage: render [options] protocol(s) or pattern (default all)\n        Options:\n          -#, --count\n            Generate am IR sequence with count number of transmissions\n          -d, --decode\n            Send the rendered signal to the decoder (for\n            debugging/development).\n            Default: false\n          --describe\n            Print a possibly longer documentation for the present command.\n          -h, -?, --help\n            Print help for this command.\n          -m, --modulate\n            Generate modulated form (EXPERIMENTAL)\n            Default: false\n          -n, --nameengine, --parameters\n            Name Engine to use\n            Default: \u003cempty string\u003e\n          --number-repeats\n            Generate an IR sequence containing the given number of repeats\n          -P, --printparameters\n            Print actual parameters values, for example by --random\n            Default: false\n          -p, --pronto, --ccf, --hex\n            Generate Pronto hex.\n            Default: false\n          --random\n            Generate random, valid, parameters\n            Default: false\n          -R, --raw-without-signs\n            Generate raw form without signs.\n            Default: false\n          -r, --signed-raw\n            Generate raw form.\n            Default: false\n\n    decode      Decode IR signal given as argument\n      Usage: decode [options] durations in micro seconds, alternatively pronto\n            hex\n        Options:\n          -c, --clean\n            Invoke cleaner on signal\n            Default: false\n          --describe\n            Print a possibly longer documentation for the present command.\n          -R, --dump-repeatfinder\n            Print the result of the repeatfinder.\n            Default: false\n          -f, --frequency\n            Set modulation frequency.\n          -G, --girrinput\n            Read raw input in Girr format.\n          -g, --girroutput\n            Generate output in Girr format (only)\n            Default: false\n          -h, -?, --help\n            Print help for this command.\n          -l, --ignoreleadinggarbage\n            Accept decodes starting with undecodable pairs.\n            Default: false\n          -i, --input\n            File/URL from which to take inputs, one per line.\n          -k, --keep-defaulted\n            In output, do not remove parameters that are equal to their\n            defaults.\n            Default: false\n          -n, --namedinput\n            File/URL from which to take inputs, one line name, data one line.\n          -a, --all, --no-prefer-over\n            Output all decodes; ignore prefer-over.\n            Default: false\n          -p, --protocol\n            Comma separated list of protocols to try match (default all).\n          --radix\n            Radix used for printing of output parameters.\n            Default: 10\n          --recursive\n            Apply decoder recursively, (for long signals).\n            Default: false\n          -r, --repeatfinder\n            Invoke repeat finder on input sequence\n            Default: false\n          -s, --strict\n            Require intro- and repeat sequences to match exactly.\n            Default: false\n          -T, --trailinggap\n            Trailing gap (in micro seconds) added to sequences of odd length.\n          --xslt\n            File/URL name of XSLT transformation that will be applied to\n            --input or --namedinput argument\n\n    demodulate      Demodulate IrSequence given as argument (EXPERIMENTAL).\n      Usage: demodulate [options] durations in micro seconds, alternatively\n            pronto hex\n        Options:\n          --describe\n            Print a possibly longer documentation for the present command.\n          -h, -?, --help\n            Print help for this command.\n          -t, --threshold\n            Threshold used for demodulating, in micro seconds.\n            Default: 35.0\n\n    analyze      Analyze signal: tries to find an IRP form with parameters.\n      Usage: analyze [options] durations in microseconds, or pronto hex.\n        Options:\n          -a, --all\n            List all decoder outcomes, instead of only the one with lowest\n            weight.\n            Default: false\n          -b, --bit-usage\n            Create bit usage report. (Not with --all.)\n            Default: false\n          -c, --chop\n            Chop input sequence into several using threshold (in milliseconds)\n            given as argument.\n          -C, --clean\n            Output the cleaned sequence(s).\n            Default: false\n          -d, --decoder\n            Use only the decoders matching argument (regular expression, or\n            prefix). Use the argument \"list\" to list the available decoders.\n          --describe\n            Print a possibly longer documentation for the present command.\n          -R, --dump-repeatfinder\n            Print the result of the repeatfinder.\n            Default: false\n          --eliminate-vars\n            Eliminate variables in output form.\n            Default: false\n          -e, --extent\n            Output the last gap as an extent.\n            Default: false\n          --fatgirr\n            Generate Girr file in fat format. Inhibits all other output.\n            Default: false\n          -f, --frequency\n            Modulation frequency of raw signal.\n          -G, --girrinput\n            Read raw input in Girr format.\n          -g, --girroutput\n            Generate Girr file. Inhibits all other output.\n            Default: false\n          -h, -?, --help\n            Print help for this command.\n          -i, --input\n            File/URL from which to take inputs, one sequence per line.\n          --ire, --intro-repeat-ending\n            Consider the argument as begin, repeat, and ending sequence.\n            Default: false\n          -I, --invert\n            Invert the order in bitspec.\n            Default: false\n          -l, --lsb\n            Force lsb-first bitorder for the parameters.\n            Default: false\n          -u, --maxmicroseconds\n            Maximal duration to be expressed as micro seconds.\n            Default: 10000.0\n          -M, --maxparameterwidth\n            Maximal parameter width.\n            Default: 63\n          --maxroundingerror\n            Maximal rounding errors for expressing as multiple of time unit.\n            Default: 0.3\n          -m, --maxunits\n            Maximal multiplier of time unit in durations.\n            Default: 30.0\n          -n, --namedinput\n            File/URL from which to take inputs, one line name, data one line.\n          -P, --parameterspecs\n            Compute a dumb parameter specs in the IRP.\n            Default: false\n          -p, --parametertable\n            Create parameter table.\n            Default: false\n          -w, --parameterwidths\n            Comma separated list of either parameter widths or name:width\n            pairs.\n            Default: []\n          --radix\n            Radix used for printing of output parameters.\n            Default: 16\n          -r, --repeatfinder\n            Invoke the repeatfinder.\n            Default: false\n          -s, --statistics\n            Print some statistics.\n            Default: false\n          -t, --timebase\n            Force time unit , in microseconds (no suffix), or in periods (with\n            suffix \"p\").\n          --timings\n            Print the total timings of the compute IRP form.\n            Default: false\n          -T, --trailinggap\n            Dummy trailing gap (in micro seconds) added to sequences of odd\n            length.\n          --validate\n            Validate that the resulted protocol can be used for rendering and\n            produces the same signal.\n            Default: false\n          --xslt\n            File/URL name of XSLT transformation that will be applied to\n            --input or --namedinput argument\n\n    code      Generate code for the given target(s)\n      Usage: code [options] protocols\n        Options:\n          --describe\n            Print a possibly longer documentation for the present command.\n          -d, --directory\n            Directory in whicht the generate output files will be written, if\n            not using the --output option.\n          -h, -?, --help\n            Print help for this command.\n          --inspect\n            Fire up stringtemplate inspector on generated code (if sensible)\n            Default: false\n          -p, --parameter\n            Specify target dependent parameters to the code generators.\n            Default: []\n          -s, --stdirectory\n            Directory containing st (string template) files for code\n            generation.\n            Default: st\n        * -t, --target\n            Target(s) for code generation. Use ? for a list.\n            Default: []\n\n    bitfield      Evaluate bitfield given as argument.\n      Usage: bitfield [options] bitfield\n        Options:\n          --describe\n            Print a possibly longer documentation for the present command.\n          -h, -?, --help\n            Print help for this command.\n          -l, --lsb\n            Output bitstream with least significant bit first.\n            Default: false\n          -n, --nameengine, --parameters\n            Define a name engine for resolving the bitfield.\n            Default: \u003cempty string\u003e\n          --xml\n            Generate XML and write to file given as argument.\n\n    expression      Evaluate expression given as argument.\n      Usage: expression [options] expression\n        Options:\n          --describe\n            Print a possibly longer documentation for the present command.\n          --gui, --display\n            Display parse diagram.\n            Default: false\n          -h, -?, --help\n            Print help for this command.\n          -n, --nameengine, --parameters\n            Define a name engine to use for evaluating.\n            Default: \u003cempty string\u003e\n          -r, --radix\n            Radix for outputting result.\n            Default: 10\n          --stringtree\n            Output stringtree.\n            Default: false\n          --xml\n            Generate XML and write to file argument.\n\n    lirc      Convert Lirc configuration files to IRP form.\n      Usage: lirc [options] Lirc config files/directories/URLs; empty for\n            \u003cstdin\u003e.\n        Options:\n          -c, --commands\n            Also list the commands if the remotes.\n            Default: false\n          --describe\n            Print a possibly longer documentation for the present command.\n          -h, -?, --help\n            Print help for this command.\n\n\n\nFor documentation, see https://harctoolbox.org/IrpTransmogrifier.html\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbengtmartensson%2Firptransmogrifier","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbengtmartensson%2Firptransmogrifier","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbengtmartensson%2Firptransmogrifier/lists"}