<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://sigrok.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SteveR</id>
	<title>sigrok - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://sigrok.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SteveR"/>
	<link rel="alternate" type="text/html" href="https://sigrok.org/wiki/Special:Contributions/SteveR"/>
	<updated>2026-04-23T09:38:06Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13725</id>
		<title>Protocol decoder:Ook oregon</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13725"/>
		<updated>2018-09-30T12:39:52Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* sigrok-cli examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_oregon&lt;br /&gt;
| name            = Oregon Scientific&lt;br /&gt;
| description     = Decodes Oregon Scientific signals for weather sensors&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_oregon&lt;br /&gt;
| image           = [[File:ook_oregon.png|250px]]&lt;br /&gt;
| input           = ook&lt;br /&gt;
| output          = none&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = unknown&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder takes &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; input from the ook decoder and turns that into what the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] sensor is reporting.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Oregon weather sensors use Manchester encoding to transmit their data. The v2.1 sensors use a &amp;#039;1010&amp;#039; preamble while the v3 sensors use &amp;#039;1111&amp;#039;. The v2.1 sensors send two copies of all the bits which means the packets are longer.&lt;br /&gt;
&lt;br /&gt;
The decoder should decode Oregon v1, v2.1 and v3 sensors but has only been tested on virtual v2.1 and real v3. v1 and v2.1 traces from real hardware would be welcomed by the author and/or the sigrok developers (on IRC or mailing list) to allow some additional testing (&amp;gt;= 50Khz sample rate please).&lt;br /&gt;
&lt;br /&gt;
The vast majority of the information that allowed this decoders creation came from [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015] Fields names follow its naming conventions and the list of model numbers and SensorID codes has been used to allow model number lookup. The additional information on what fields are used for what provides the information to carry out the rest of the level2 decode.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder provides two lines of decode, the first one does a basic decode and identification of the version while the second looks at the decoded SensorID and then picks out particular nibbles and turns them into a human readable results.&lt;br /&gt;
&lt;br /&gt;
The first line identifies which version is being received by looking for a particular sync pattern. Once the Sync pattern is found the Preamble and Sync bits are marked and stripped off. All the remaining data is then interpreted as sets of 4 bit Nibbles with all bits reversed (except SensorID). There are then some common fields for v2.1 and v3 sensors which are RollingCode, Channel, RollingCode and Flags1. Finally it prints out the remaining nibbles which are the sensor payload as hex digits without interpreting them.&lt;br /&gt;
&lt;br /&gt;
The level2 decode takes things a bit further by using the SensorID and a lookup table in ook_oregon/lists.py to display the model numbers that use that SensorID. It then looks up the type of sensor from the same list and then adds in fields for Temperature, Humidity, UV level, Rainfall, Wind speed and Barometric pressure. Results depends on what the sensor produces and whether it is recognised.&lt;br /&gt;
&lt;br /&gt;
Unknown sensors will be identified as &amp;#039;&amp;#039;&amp;#039;Unknown&amp;#039;&amp;#039;&amp;#039; and as such cannot be level2 decoded without human help.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder has one option&lt;br /&gt;
&lt;br /&gt;
    &amp;#039;id&amp;#039;: &amp;#039;unknown&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Unknown type is&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Unknown&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;Unknown&amp;#039;,&amp;#039;Temp_Hum&amp;#039;,&amp;#039;Temp_Hum1&amp;#039;,&amp;#039;Temp&amp;#039;,&amp;#039;Temp_Baro&amp;#039;,&amp;#039;UV&amp;#039;,&amp;#039;UV1&amp;#039;,&amp;#039;Wind&amp;#039;,&amp;#039;Rain&amp;#039;,&amp;#039;Baro&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
This option allows the user to pick what type of sensor that they think the Unknown one is and see the level2 decode for that choice. This is designed to allow them to try the options and see if they can get a meaningful decode out.&lt;br /&gt;
&lt;br /&gt;
If it does work then the ook_oregon/lists.py can be edited to include the sensorID, model number and decoding type. Please make sure that you are extremely confident that the trace belongs to the right sensor. The format is documented in the file. Please be very careful with the syntax and take a backup before editing it. Restarting Sigrok after this should convert the sensorID into a model number and do the decoding. &lt;br /&gt;
&lt;br /&gt;
Sending the author a copy of the extra or edited line in ook_oregon/lists.py might allow the list to grow over time, email address is at the top of the file. Response time will vary dramatically, no guarantees of inclusion. Alternatively a patch to the ook_oregon decoder could also get your device more universally recognised.&lt;br /&gt;
&lt;br /&gt;
New decoding types can be added if needed, example trace + model info plus reading at the time (from a weather base station) required. Or submit a code patch + trace for the sigrok dumps, model info plus reading at the time in the readme. &lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_oregon --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder concentrates on the protocol and not how it is transmitted so it needs the ook decoder to deal with the Manchester encoding before it can do its work. It stacks on top of the &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder.&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a virtual Oregon v2.1 Temperature and Humidity sensor model BTHR968.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -i oregon_bthr968.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a real Oregon v3 rain sensor model PCR800.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -i oregon_pcr800.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To continuously sample what is coming in on channel D0 at 50khz from a USBee AX PRO clone (fx2lafw) and display just the oregon decode&lt;br /&gt;
&amp;lt;pre&amp;gt;sigrok-cli --driver fx2lafw --config samplerate=50k -C D0 -P ook:data=D0,ook_oregon --continuous -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook_oregon decoder can optionally display the data part of the signal in hex by using the Binary output switch with an option called &amp;quot;data-hex&amp;quot;. The hex can then be compared to other information on the web or saved in the lists.py file from ook_gen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook_oregon=data-hex -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Protocol Information&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific]&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015]&lt;br /&gt;
* [http://wmrx00.sourceforge.net/Arduino/OregonScientific-RF-Protocols.pdf Oregon Scientific RF Protocol Descriptions -June 2011] Older version&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/OregonScientific-RF-Protocols-II.pdf Oregon Scientific RF Protocol Description (Versions 1.0, 2.1, 3.0)]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Base Station Compatability with sensors + Oregon protocol versions and what sensors use them&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [https://weerhuisje.nl/en/e/oregon_sensoren Oregon weerstations met compatibele sensoren 2017] (Oregon weather stations with compatible sensors 2017). Also look at bottom of the page for &amp;quot;Lijst met oude modellen stations en sensoren&amp;quot; (List of old models stations and sensors) which lists Oregon protocol versions and what sensors use them&lt;br /&gt;
* [https://www.weathershack.com/static/osi-sensor-compatibility-chart.html Oregon Scientific Sensor Compatibility Chart] with base stations&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Virtual Sensors&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.connectingstuff.net/blog/encodage-protocoles-oregon-scientific-sur-arduino/ Virtual v2.1 sensor using an Arduino]  by Olivier Lebrun&lt;br /&gt;
* [https://github.com/deberman/OS_V2.1_temp-hum_sensor Arduino os_v2_1_temp_hum_sensor library] written by deberman 2016-02-24, derived from Virtual v2.1 sensor by Olivier Lebrun&lt;br /&gt;
* [https://gist.github.com/RouquinBlanc/5cb6ff88cd02e68d48ea BTHR918N_ArduinoSender] written by Jonathan Martin, derived from Virtual v2.1 sensor by Olivier Lebrun&lt;br /&gt;
* [https://wiki.pilight.org/oregon PiLight]&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13695</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13695"/>
		<updated>2018-09-25T16:24:49Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* sigrok-cli examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanver&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on numbers of samples rather than on sampling rate or specific inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;#039;&amp;#039;&amp;#039;Save Selected Range As&amp;#039;&amp;#039;&amp;#039; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - Invert data - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode type - default Manchester&lt;br /&gt;
    preamble - auto/1010/1111 - Preamble - default auto &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - Transition at start - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Devices can send a 50:50 mark/space square wave to transmit a signal that represents &amp;#039;1111&amp;#039; or &amp;#039;1010&amp;#039;. In one case the pulse samples represent the clock period, in the other only half. The default &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; option is &amp;#039;&amp;#039;&amp;#039;auto&amp;#039;&amp;#039;&amp;#039; which tries both variants at the same time and selects the result with least errors when all of the packet has been seen. This can be very useful when there are Oregon v2 and v3 devices in the same capture. The user can also force the preamble to be 1111 or 1010.&lt;br /&gt;
&lt;br /&gt;
There are two variants, G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and follow G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;0&amp;#039;   zero (low)&lt;br /&gt;
&amp;#039;1&amp;#039;   one (high)&lt;br /&gt;
&amp;#039;E&amp;#039;   Error (invalid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Error bits can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with auto preamble (default) &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon v2)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010&amp;#039; -i oregon_bthr968.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -i oregon_bthr968.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can output the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying Wikipedia: On Off Keying]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Wikipedia: Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html Distributed Wikipedia Mirror: Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ PCBHeaven: Manchester and Diff Manchester encoding] unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_vis&amp;diff=13694</id>
		<title>Protocol decoder:Ook vis</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_vis&amp;diff=13694"/>
		<updated>2018-09-24T13:46:53Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* sigrok-cli examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_vis&lt;br /&gt;
| name            = OOK Visualiser&lt;br /&gt;
| description     = On Off Keying Visualiser&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_vis&lt;br /&gt;
| image           = [[File:ook_vis.png|250px]]&lt;br /&gt;
| input           = ook&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = displayas, synclen, syncoffset&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; protocol decoder takes &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; input from the ook decoder and displays it in a variety of formats.&lt;br /&gt;
&lt;br /&gt;
It is provided to help analyse unknown format waveforms. Using the ook decoder with this one allows you to try &amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Manchester&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;Differential Manchester&amp;#039;&amp;#039;&amp;#039; and their possible settings to see what produces the lowest errors. Then use ook_vis to format the results in a suitable fashion for what you are decoding, make some structure assumptions and see what that does to the results.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; protocol decoder provides two lines of decode. The first line does a basic decode (with formatting) while the second attempts to work out where the preamble and sync might be and then displays the data with a posible structure. The sync position is worked out from the preamble and detects when it switches from &amp;#039;1111&amp;#039; or &amp;#039;1010&amp;#039; to something else.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; decoder has four options&lt;br /&gt;
&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;displayas&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Display as&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Nibble - Hex&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;Byte - Hex&amp;#039;,&amp;#039;Byte - Hex rev&amp;#039;, &amp;#039;Byte - BCD&amp;#039;,&amp;#039;Byte - BCD rev&amp;#039;,&amp;#039;Nibble - Hex&amp;#039;,&amp;#039;Nibble - Hex rev&amp;#039;,&amp;#039;Nibble - BCD&amp;#039;,&amp;#039;Nibble - BCD rev&amp;#039;,)},&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;synclen&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Sync length&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;4&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;0&amp;#039;,&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;,&amp;#039;5&amp;#039;,&amp;#039;6&amp;#039;,&amp;#039;7&amp;#039;,&amp;#039;8&amp;#039;,&amp;#039;9&amp;#039;,&amp;#039;10&amp;#039;)},&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;syncoffset&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Sync offset&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;0&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;-4&amp;#039;,&amp;#039;-3&amp;#039;,&amp;#039;-2&amp;#039;,&amp;#039;-1&amp;#039;,&amp;#039;0&amp;#039;,&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;)}&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;refsample&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Compare&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;off&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;off&amp;#039;, &amp;#039;show numbers&amp;#039;, &amp;#039;1&amp;#039;, &amp;#039;2&amp;#039;, &amp;#039;3&amp;#039;, &amp;#039;4&amp;#039;, &amp;#039;5&amp;#039;, &amp;#039;6&amp;#039;, &amp;#039;7&amp;#039;, &amp;#039;8&amp;#039;, &amp;#039;9&amp;#039;, &amp;#039;10&amp;#039;, &amp;#039;11&amp;#039;, &amp;#039;12&amp;#039;, &amp;#039;13&amp;#039;, &amp;#039;14&amp;#039;, &amp;#039;15&amp;#039;, &amp;#039;16&amp;#039;, &amp;#039;17&amp;#039;, &amp;#039;18&amp;#039;, &amp;#039;19&amp;#039;, &amp;#039;20&amp;#039;, &amp;#039;21&amp;#039;, &amp;#039;22&amp;#039;, &amp;#039;23&amp;#039;, &amp;#039;24&amp;#039;, &amp;#039;25&amp;#039;, &amp;#039;26&amp;#039;, &amp;#039;27&amp;#039;, &amp;#039;28&amp;#039;, &amp;#039;29&amp;#039;, &amp;#039;30&amp;#039;)}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;displayas&amp;#039;&amp;#039;&amp;#039; option allows the user to pick how the data is presented. It supports two lengths 4 bits (Nibble) and 8 bits (Byte). It also allows numbers to be displayed as Hexadecimal or Binary Coded Decimal (BCD) and also supports bit reversal.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;synclen&amp;#039;&amp;#039;&amp;#039; option allows the user to set the length of the Sync and vary it to see what that does to the data after it.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;syncoffset&amp;#039;&amp;#039;&amp;#039; option allows the user to move the start of sync backwards and forwards to see what that does to the data after it.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;refsample&amp;#039;&amp;#039;&amp;#039; option allows one of the packets to be used as a reference sample which all the packets are compared against. To use this feature first select &amp;#039;&amp;#039;&amp;#039;show numbers&amp;#039;&amp;#039;&amp;#039; to identify which packet to use, then select the packet number from 1 - 30. To turn it off again select off.&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_vis --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; decoder concentrates on the protocol and not how it is transmitted so it needs the ook decoder to deal with the encoding before it can do its work. It stacks on top of the &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder.&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace and then pass the result to the ook_vis decoder for display as  reversed hex Nibbles and only display the ook_vis output. The trace belongs to a real Oregon v3 rain sensor model PCR800.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_vis:displayas=&amp;#039;Nibble - Hex rev&amp;#039; -i oregon_pcr800.sr -A ook_vis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Ook_vis.png&amp;diff=13693</id>
		<title>File:Ook vis.png</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Ook_vis.png&amp;diff=13693"/>
		<updated>2018-09-24T13:40:25Z</updated>

		<summary type="html">&lt;p&gt;SteveR: SteveR uploaded a new version of File:Ook vis.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_vis&amp;diff=13692</id>
		<title>Protocol decoder:Ook vis</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_vis&amp;diff=13692"/>
		<updated>2018-09-24T13:31:14Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_vis&lt;br /&gt;
| name            = OOK Visualiser&lt;br /&gt;
| description     = On Off Keying Visualiser&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_vis&lt;br /&gt;
| image           = [[File:ook_vis.png|250px]]&lt;br /&gt;
| input           = ook&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = displayas, synclen, syncoffset&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; protocol decoder takes &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; input from the ook decoder and displays it in a variety of formats.&lt;br /&gt;
&lt;br /&gt;
It is provided to help analyse unknown format waveforms. Using the ook decoder with this one allows you to try &amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Manchester&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;Differential Manchester&amp;#039;&amp;#039;&amp;#039; and their possible settings to see what produces the lowest errors. Then use ook_vis to format the results in a suitable fashion for what you are decoding, make some structure assumptions and see what that does to the results.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; protocol decoder provides two lines of decode. The first line does a basic decode (with formatting) while the second attempts to work out where the preamble and sync might be and then displays the data with a posible structure. The sync position is worked out from the preamble and detects when it switches from &amp;#039;1111&amp;#039; or &amp;#039;1010&amp;#039; to something else.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; decoder has four options&lt;br /&gt;
&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;displayas&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Display as&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Nibble - Hex&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;Byte - Hex&amp;#039;,&amp;#039;Byte - Hex rev&amp;#039;, &amp;#039;Byte - BCD&amp;#039;,&amp;#039;Byte - BCD rev&amp;#039;,&amp;#039;Nibble - Hex&amp;#039;,&amp;#039;Nibble - Hex rev&amp;#039;,&amp;#039;Nibble - BCD&amp;#039;,&amp;#039;Nibble - BCD rev&amp;#039;,)},&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;synclen&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Sync length&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;4&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;0&amp;#039;,&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;,&amp;#039;5&amp;#039;,&amp;#039;6&amp;#039;,&amp;#039;7&amp;#039;,&amp;#039;8&amp;#039;,&amp;#039;9&amp;#039;,&amp;#039;10&amp;#039;)},&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;syncoffset&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Sync offset&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;0&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;-4&amp;#039;,&amp;#039;-3&amp;#039;,&amp;#039;-2&amp;#039;,&amp;#039;-1&amp;#039;,&amp;#039;0&amp;#039;,&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;)}&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;refsample&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Compare&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;off&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;off&amp;#039;, &amp;#039;show numbers&amp;#039;, &amp;#039;1&amp;#039;, &amp;#039;2&amp;#039;, &amp;#039;3&amp;#039;, &amp;#039;4&amp;#039;, &amp;#039;5&amp;#039;, &amp;#039;6&amp;#039;, &amp;#039;7&amp;#039;, &amp;#039;8&amp;#039;, &amp;#039;9&amp;#039;, &amp;#039;10&amp;#039;, &amp;#039;11&amp;#039;, &amp;#039;12&amp;#039;, &amp;#039;13&amp;#039;, &amp;#039;14&amp;#039;, &amp;#039;15&amp;#039;, &amp;#039;16&amp;#039;, &amp;#039;17&amp;#039;, &amp;#039;18&amp;#039;, &amp;#039;19&amp;#039;, &amp;#039;20&amp;#039;, &amp;#039;21&amp;#039;, &amp;#039;22&amp;#039;, &amp;#039;23&amp;#039;, &amp;#039;24&amp;#039;, &amp;#039;25&amp;#039;, &amp;#039;26&amp;#039;, &amp;#039;27&amp;#039;, &amp;#039;28&amp;#039;, &amp;#039;29&amp;#039;, &amp;#039;30&amp;#039;)}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;displayas&amp;#039;&amp;#039;&amp;#039; option allows the user to pick how the data is presented. It supports two lengths 4 bits (Nibble) and 8 bits (Byte). It also allows numbers to be displayed as Hexadecimal or Binary Coded Decimal (BCD) and also supports bit reversal.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;synclen&amp;#039;&amp;#039;&amp;#039; option allows the user to set the length of the Sync and vary it to see what that does to the data after it.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;syncoffset&amp;#039;&amp;#039;&amp;#039; option allows the user to move the start of sync backwards and forwards to see what that does to the data after it.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;refsample&amp;#039;&amp;#039;&amp;#039; option allows one of the packets to be used as a reference sample which all the packets are compared against. To use this feature first select &amp;#039;&amp;#039;&amp;#039;show numbers&amp;#039;&amp;#039;&amp;#039; to identify which packet to use, then select the packet number from 1 - 30. To turn it off again select off.&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_vis --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; decoder concentrates on the protocol and not how it is transmitted so it needs the ook decoder to deal with the encoding before it can do its work. It stacks on top of the &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder.&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default) (Oregon V3 sensor) and then pass the result to the ook_vis decoder and only display the ook_vis output. The trace belongs to a real Oregon v3 rain sensor model PCR800.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_vis -i oregon_pcr800.sr -A ook_vis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13691</id>
		<title>Protocol decoder:Ook oregon</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13691"/>
		<updated>2018-09-24T13:09:01Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_oregon&lt;br /&gt;
| name            = Oregon Scientific&lt;br /&gt;
| description     = Decodes Oregon Scientific signals for weather sensors&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_oregon&lt;br /&gt;
| image           = [[File:ook_oregon.png|250px]]&lt;br /&gt;
| input           = ook&lt;br /&gt;
| output          = none&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = unknown&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder takes &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; input from the ook decoder and turns that into what the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] sensor is reporting.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Oregon weather sensors use Manchester encoding to transmit their data. The v2.1 sensors use a &amp;#039;1010&amp;#039; preamble while the v3 sensors use &amp;#039;1111&amp;#039;. The v2.1 sensors send two copies of all the bits which means the packets are longer.&lt;br /&gt;
&lt;br /&gt;
The decoder should decode Oregon v1, v2.1 and v3 sensors but has only been tested on virtual v2.1 and real v3. v1 and v2.1 traces from real hardware would be welcomed by the author and/or the sigrok developers (on IRC or mailing list) to allow some additional testing (&amp;gt;= 50Khz sample rate please).&lt;br /&gt;
&lt;br /&gt;
The vast majority of the information that allowed this decoders creation came from [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015] Fields names follow its naming conventions and the list of model numbers and SensorID codes has been used to allow model number lookup. The additional information on what fields are used for what provides the information to carry out the rest of the level2 decode.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder provides two lines of decode, the first one does a basic decode and identification of the version while the second looks at the decoded SensorID and then picks out particular nibbles and turns them into a human readable results.&lt;br /&gt;
&lt;br /&gt;
The first line identifies which version is being received by looking for a particular sync pattern. Once the Sync pattern is found the Preamble and Sync bits are marked and stripped off. All the remaining data is then interpreted as sets of 4 bit Nibbles with all bits reversed (except SensorID). There are then some common fields for v2.1 and v3 sensors which are RollingCode, Channel, RollingCode and Flags1. Finally it prints out the remaining nibbles which are the sensor payload as hex digits without interpreting them.&lt;br /&gt;
&lt;br /&gt;
The level2 decode takes things a bit further by using the SensorID and a lookup table in ook_oregon/lists.py to display the model numbers that use that SensorID. It then looks up the type of sensor from the same list and then adds in fields for Temperature, Humidity, UV level, Rainfall, Wind speed and Barometric pressure. Results depends on what the sensor produces and whether it is recognised.&lt;br /&gt;
&lt;br /&gt;
Unknown sensors will be identified as &amp;#039;&amp;#039;&amp;#039;Unknown&amp;#039;&amp;#039;&amp;#039; and as such cannot be level2 decoded without human help.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder has one option&lt;br /&gt;
&lt;br /&gt;
    &amp;#039;id&amp;#039;: &amp;#039;unknown&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Unknown type is&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Unknown&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;Unknown&amp;#039;,&amp;#039;Temp_Hum&amp;#039;,&amp;#039;Temp_Hum1&amp;#039;,&amp;#039;Temp&amp;#039;,&amp;#039;Temp_Baro&amp;#039;,&amp;#039;UV&amp;#039;,&amp;#039;UV1&amp;#039;,&amp;#039;Wind&amp;#039;,&amp;#039;Rain&amp;#039;,&amp;#039;Baro&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
This option allows the user to pick what type of sensor that they think the Unknown one is and see the level2 decode for that choice. This is designed to allow them to try the options and see if they can get a meaningful decode out.&lt;br /&gt;
&lt;br /&gt;
If it does work then the ook_oregon/lists.py can be edited to include the sensorID, model number and decoding type. Please make sure that you are extremely confident that the trace belongs to the right sensor. The format is documented in the file. Please be very careful with the syntax and take a backup before editing it. Restarting Sigrok after this should convert the sensorID into a model number and do the decoding. &lt;br /&gt;
&lt;br /&gt;
Sending the author a copy of the extra or edited line in ook_oregon/lists.py might allow the list to grow over time, email address is at the top of the file. Response time will vary dramatically, no guarantees of inclusion. Alternatively a patch to the ook_oregon decoder could also get your device more universally recognised.&lt;br /&gt;
&lt;br /&gt;
New decoding types can be added if needed, example trace + model info plus reading at the time (from a weather base station) required. Or submit a code patch + trace for the sigrok dumps, model info plus reading at the time in the readme. &lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_oregon --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder concentrates on the protocol and not how it is transmitted so it needs the ook decoder to deal with the Manchester encoding before it can do its work. It stacks on top of the &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder.&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a virtual Oregon v2.1 Temperature and Humidity sensor model BTHR968.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -i oregon_bthr968.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a real Oregon v3 rain sensor model PCR800.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -i oregon_pcr800.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook_oregon decoder can optionally display the data part of the signal in hex by using the Binary output switch with an option called &amp;quot;data-hex&amp;quot;. The hex can then be compared to other information on the web or saved in the lists.py file from ook_gen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook_oregon=data-hex -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Protocol Information&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific]&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015]&lt;br /&gt;
* [http://wmrx00.sourceforge.net/Arduino/OregonScientific-RF-Protocols.pdf Oregon Scientific RF Protocol Descriptions -June 2011] Older version&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/OregonScientific-RF-Protocols-II.pdf Oregon Scientific RF Protocol Description (Versions 1.0, 2.1, 3.0)]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Base Station Compatability with sensors + Oregon protocol versions and what sensors use them&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [https://weerhuisje.nl/en/e/oregon_sensoren Oregon weerstations met compatibele sensoren 2017] (Oregon weather stations with compatible sensors 2017). Also look at bottom of the page for &amp;quot;Lijst met oude modellen stations en sensoren&amp;quot; (List of old models stations and sensors) which lists Oregon protocol versions and what sensors use them&lt;br /&gt;
* [https://www.weathershack.com/static/osi-sensor-compatibility-chart.html Oregon Scientific Sensor Compatibility Chart] with base stations&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Virtual Sensors&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.connectingstuff.net/blog/encodage-protocoles-oregon-scientific-sur-arduino/ Virtual v2.1 sensor using an Arduino]  by Olivier Lebrun&lt;br /&gt;
* [https://github.com/deberman/OS_V2.1_temp-hum_sensor Arduino os_v2_1_temp_hum_sensor library] written by deberman 2016-02-24, derived from Virtual v2.1 sensor by Olivier Lebrun&lt;br /&gt;
* [https://gist.github.com/RouquinBlanc/5cb6ff88cd02e68d48ea BTHR918N_ArduinoSender] written by Jonathan Martin, derived from Virtual v2.1 sensor by Olivier Lebrun&lt;br /&gt;
* [https://wiki.pilight.org/oregon PiLight]&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13690</id>
		<title>Protocol decoder:Ook oregon</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13690"/>
		<updated>2018-09-24T12:51:13Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* sigrok-cli examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_oregon&lt;br /&gt;
| name            = Oregon Scientific&lt;br /&gt;
| description     = Decodes Oregon Scientific signals for weather sensors&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_oregon&lt;br /&gt;
| image           = [[File:ook_oregon.png|250px]]&lt;br /&gt;
| input           = ook&lt;br /&gt;
| output          = none&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = unknown&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder takes &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; input from the ook decoder and turns that into what the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] sensor is reporting.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Oregon weather sensors use Manchester encoding to transmit their data. The v2.1 sensors use a &amp;#039;1010&amp;#039; preamble while the v3 sensors use &amp;#039;1111&amp;#039;. The v2.1 sensors send two copies of all the bits which means the packets are longer.&lt;br /&gt;
&lt;br /&gt;
The decoder should decode Oregon v1, v2.1 and v3 sensors but has only been tested on virtual v2.1 and real v3. v1 and v2.1 traces from real hardware would be welcomed by the author and/or the sigrok developers (on IRC or mailing list) to allow some additional testing (&amp;gt;= 50Khz sample rate please).&lt;br /&gt;
&lt;br /&gt;
The vast majority of the information that allowed this decoders creation came from [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015] Fields names follow its naming conventions and the list of model numbers and SensorID codes has been used to allow model number lookup. The additional information on what fields are used for what provides the information to carry out the rest of the level2 decode.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder provides two lines of decode, the first one does a basic decode and identification of the version while the second looks at the decoded SensorID and then picks out particular nibbles and turns them into a human readable results.&lt;br /&gt;
&lt;br /&gt;
The first line identifies which version is being received by looking for a particular sync pattern. Once the Sync pattern is found the Preamble and Sync bits are marked and stripped off. All the remaining data is then interpreted as sets of 4 bit Nibbles with all bits reversed (except SensorID). There are then some common fields for v2.1 and v3 sensors which are RollingCode, Channel, RollingCode and Flags1. Finally it prints out the remaining nibbles which are the sensor payload as hex digits without interpreting them.&lt;br /&gt;
&lt;br /&gt;
The level2 decode takes things a bit further by using the SensorID and a lookup table in ook_oregon/lists.py to display the model numbers that use that SensorID. It then looks up the type of sensor from the same list and then adds in fields for Temperature, Humidity, UV level, Rainfall, Wind speed and Barometric pressure. Results depends on what the sensor produces and whether it is recognised.&lt;br /&gt;
&lt;br /&gt;
Unknown sensors will be identified as &amp;#039;&amp;#039;&amp;#039;Unknown&amp;#039;&amp;#039;&amp;#039; and as such cannot be level2 decoded without human help.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder has one option&lt;br /&gt;
&lt;br /&gt;
    &amp;#039;id&amp;#039;: &amp;#039;unknown&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Unknown type is&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Unknown&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;Unknown&amp;#039;,&amp;#039;Temp_Hum&amp;#039;,&amp;#039;Temp_Hum1&amp;#039;,&amp;#039;Temp&amp;#039;,&amp;#039;Temp_Baro&amp;#039;,&amp;#039;UV&amp;#039;,&amp;#039;UV1&amp;#039;,&amp;#039;Wind&amp;#039;,&amp;#039;Rain&amp;#039;,&amp;#039;Baro&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
This option allows the user to pick what type of sensor that they think the Unknown one is and see the level2 decode for that choice. This is designed to allow them to try the options and see if they can get a meaningful decode out.&lt;br /&gt;
&lt;br /&gt;
If it does work then the ook_oregon/lists.py can be edited to include the sensorID, model number and decoding type. Please make sure that you are extremely confident that the trace belongs to the right sensor. The format is documented in the file. Please be very careful with the syntax and take a backup before editing it. Restarting Sigrok after this should convert the sensorID into a model number and do the decoding. &lt;br /&gt;
&lt;br /&gt;
Sending the author a copy of the extra or edited line in ook_oregon/lists.py might allow the list to grow over time, email address is at the top of the file. Response time will vary dramatically, no guarantees of inclusion. Alternatively a patch to the ook_oregon decoder could also get your device more universally recognised.&lt;br /&gt;
&lt;br /&gt;
New decoding types can be added if needed, example trace + model info plus reading at the time (from a weather base station) required. Or submit a code patch + trace for the sigrok dumps, model info plus reading at the time in the readme. &lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_oregon --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder concentrates on the protocol and not how it is transmitted so it needs the ook decoder to deal with the Manchester encoding before it can do its work. It stacks on top of the &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder.&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a virtual Oregon v2.1 Temperature and Humidity sensor model BTHR968.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -i oregon_bthr968.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a real Oregon v3 rain sensor model PCR800.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -i oregon_pcr800.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook_oregon decoder can optionally display the data part of the signal in hex by using the Binary output switch with an option called &amp;quot;data-hex&amp;quot;. The hex can then be compared to other information on the web or saved in the lists.py file from ook_gen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook_oregon=data-hex -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Protocol Information&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific]&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015]&lt;br /&gt;
* [http://wmrx00.sourceforge.net/Arduino/OregonScientific-RF-Protocols.pdf Oregon Scientific RF Protocol Descriptions -June 2011] Older version&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/OregonScientific-RF-Protocols-II.pdf Oregon Scientific RF Protocol Description (Versions 1.0, 2.1, 3.0)]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Base Station Compatability with sensors + Oregon protocol versions and what sensors use them&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [https://weerhuisje.nl/en/e/oregon_sensoren Oregon weerstations met compatibele sensoren 2017] (Oregon weather stations with compatible sensors 2017). Also look at bottom of the page for &amp;quot;Lijst met oude modellen stations en sensoren&amp;quot; (List of old models stations and sensors) which lists Oregon protocol versions and what sensors use them&lt;br /&gt;
* [https://www.weathershack.com/static/osi-sensor-compatibility-chart.html Oregon Scientific Sensor Compatibility Chart] with base stations&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Virtual Sensors&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.connectingstuff.net/blog/encodage-protocoles-oregon-scientific-sur-arduino/ Virtual v2.1 sensor using an Arduino]  by Olivier Lebrun&lt;br /&gt;
* [https://github.com/deberman/OS_V2.1_temp-hum_sensor os_v2_1_temp_hum_sensor library] written by deberman 2016-02-24, derived from Virtual v2.1 sensor by Olivier Lebrun&lt;br /&gt;
* [https://wiki.pilight.org/oregon PiLight]&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13689</id>
		<title>Protocol decoder:Ook oregon</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13689"/>
		<updated>2018-09-24T12:31:27Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_oregon&lt;br /&gt;
| name            = Oregon Scientific&lt;br /&gt;
| description     = Decodes Oregon Scientific signals for weather sensors&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_oregon&lt;br /&gt;
| image           = [[File:ook_oregon.png|250px]]&lt;br /&gt;
| input           = ook&lt;br /&gt;
| output          = none&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = unknown&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder takes &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; input from the ook decoder and turns that into what the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] sensor is reporting.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Oregon weather sensors use Manchester encoding to transmit their data. The v2.1 sensors use a &amp;#039;1010&amp;#039; preamble while the v3 sensors use &amp;#039;1111&amp;#039;. The v2.1 sensors send two copies of all the bits which means the packets are longer.&lt;br /&gt;
&lt;br /&gt;
The decoder should decode Oregon v1, v2.1 and v3 sensors but has only been tested on virtual v2.1 and real v3. v1 and v2.1 traces from real hardware would be welcomed by the author and/or the sigrok developers (on IRC or mailing list) to allow some additional testing (&amp;gt;= 50Khz sample rate please).&lt;br /&gt;
&lt;br /&gt;
The vast majority of the information that allowed this decoders creation came from [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015] Fields names follow its naming conventions and the list of model numbers and SensorID codes has been used to allow model number lookup. The additional information on what fields are used for what provides the information to carry out the rest of the level2 decode.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder provides two lines of decode, the first one does a basic decode and identification of the version while the second looks at the decoded SensorID and then picks out particular nibbles and turns them into a human readable results.&lt;br /&gt;
&lt;br /&gt;
The first line identifies which version is being received by looking for a particular sync pattern. Once the Sync pattern is found the Preamble and Sync bits are marked and stripped off. All the remaining data is then interpreted as sets of 4 bit Nibbles with all bits reversed (except SensorID). There are then some common fields for v2.1 and v3 sensors which are RollingCode, Channel, RollingCode and Flags1. Finally it prints out the remaining nibbles which are the sensor payload as hex digits without interpreting them.&lt;br /&gt;
&lt;br /&gt;
The level2 decode takes things a bit further by using the SensorID and a lookup table in ook_oregon/lists.py to display the model numbers that use that SensorID. It then looks up the type of sensor from the same list and then adds in fields for Temperature, Humidity, UV level, Rainfall, Wind speed and Barometric pressure. Results depends on what the sensor produces and whether it is recognised.&lt;br /&gt;
&lt;br /&gt;
Unknown sensors will be identified as &amp;#039;&amp;#039;&amp;#039;Unknown&amp;#039;&amp;#039;&amp;#039; and as such cannot be level2 decoded without human help.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder has one option&lt;br /&gt;
&lt;br /&gt;
    &amp;#039;id&amp;#039;: &amp;#039;unknown&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Unknown type is&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Unknown&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;Unknown&amp;#039;,&amp;#039;Temp_Hum&amp;#039;,&amp;#039;Temp_Hum1&amp;#039;,&amp;#039;Temp&amp;#039;,&amp;#039;Temp_Baro&amp;#039;,&amp;#039;UV&amp;#039;,&amp;#039;UV1&amp;#039;,&amp;#039;Wind&amp;#039;,&amp;#039;Rain&amp;#039;,&amp;#039;Baro&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
This option allows the user to pick what type of sensor that they think the Unknown one is and see the level2 decode for that choice. This is designed to allow them to try the options and see if they can get a meaningful decode out.&lt;br /&gt;
&lt;br /&gt;
If it does work then the ook_oregon/lists.py can be edited to include the sensorID, model number and decoding type. Please make sure that you are extremely confident that the trace belongs to the right sensor. The format is documented in the file. Please be very careful with the syntax and take a backup before editing it. Restarting Sigrok after this should convert the sensorID into a model number and do the decoding. &lt;br /&gt;
&lt;br /&gt;
Sending the author a copy of the extra or edited line in ook_oregon/lists.py might allow the list to grow over time, email address is at the top of the file. Response time will vary dramatically, no guarantees of inclusion. Alternatively a patch to the ook_oregon decoder could also get your device more universally recognised.&lt;br /&gt;
&lt;br /&gt;
New decoding types can be added if needed, example trace + model info plus reading at the time (from a weather base station) required. Or submit a code patch + trace for the sigrok dumps, model info plus reading at the time in the readme. &lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_oregon --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder concentrates on the protocol and not how it is transmitted so it needs the ook decoder to deal with the Manchester encoding before it can do its work. It stacks on top of the &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder.&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a virtual Oregon v2.1 Temperature sensor model THGR228N.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,ook_oregon -i thgr228n.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default) (Oregon V3 sensor) and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a real Oregon v3 rain sensor model PCR800.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -i oregon_pcr800.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook_oregon decoder can optionally display the data part of the signal in hex by using the Binary output switch with an option called &amp;quot;data-hex&amp;quot;. The hex can then be compared to other information on the web or saved in the lists.py file from ook_gen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook_oregon=data-hex -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Protocol Information&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific]&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015]&lt;br /&gt;
* [http://wmrx00.sourceforge.net/Arduino/OregonScientific-RF-Protocols.pdf Oregon Scientific RF Protocol Descriptions -June 2011] Older version&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/OregonScientific-RF-Protocols-II.pdf Oregon Scientific RF Protocol Description (Versions 1.0, 2.1, 3.0)]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Base Station Compatability with sensors + Oregon protocol versions and what sensors use them&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [https://weerhuisje.nl/en/e/oregon_sensoren Oregon weerstations met compatibele sensoren 2017] (Oregon weather stations with compatible sensors 2017). Also look at bottom of the page for &amp;quot;Lijst met oude modellen stations en sensoren&amp;quot; (List of old models stations and sensors) which lists Oregon protocol versions and what sensors use them&lt;br /&gt;
* [https://www.weathershack.com/static/osi-sensor-compatibility-chart.html Oregon Scientific Sensor Compatibility Chart] with base stations&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Virtual Sensors&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.connectingstuff.net/blog/encodage-protocoles-oregon-scientific-sur-arduino/ Virtual v2.1 sensor using an Arduino]  by Olivier Lebrun&lt;br /&gt;
* [https://github.com/deberman/OS_V2.1_temp-hum_sensor os_v2_1_temp_hum_sensor library] written by deberman 2016-02-24, derived from Virtual v2.1 sensor by Olivier Lebrun&lt;br /&gt;
* [https://wiki.pilight.org/oregon PiLight]&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Ook_oregon.png&amp;diff=13688</id>
		<title>File:Ook oregon.png</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Ook_oregon.png&amp;diff=13688"/>
		<updated>2018-09-24T12:29:31Z</updated>

		<summary type="html">&lt;p&gt;SteveR: SteveR uploaded a new version of File:Ook oregon.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13687</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13687"/>
		<updated>2018-09-24T12:19:10Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* Decoder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanver&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on numbers of samples rather than on sampling rate or specific inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;#039;&amp;#039;&amp;#039;Save Selected Range As&amp;#039;&amp;#039;&amp;#039; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - Invert data - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode type - default Manchester&lt;br /&gt;
    preamble - auto/1010/1111 - Preamble - default auto &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - Transition at start - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Devices can send a 50:50 mark/space square wave to transmit a signal that represents &amp;#039;1111&amp;#039; or &amp;#039;1010&amp;#039;. In one case the pulse samples represent the clock period, in the other only half. The default &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; option is &amp;#039;&amp;#039;&amp;#039;auto&amp;#039;&amp;#039;&amp;#039; which tries both variants at the same time and selects the result with least errors when all of the packet has been seen. This can be very useful when there are Oregon v2 and v3 devices in the same capture. The user can also force the preamble to be 1111 or 1010.&lt;br /&gt;
&lt;br /&gt;
There are two variants, G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and follow G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;0&amp;#039;   zero (low)&lt;br /&gt;
&amp;#039;1&amp;#039;   one (high)&lt;br /&gt;
&amp;#039;E&amp;#039;   Error (invalid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Error bits can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with auto preamble (default) &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon v2)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010&amp;#039; -i oregon_bthr968.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,oregon -i oregon_bthr968.sr -A oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can output the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying Wikipedia: On Off Keying]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Wikipedia: Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html Distributed Wikipedia Mirror: Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ PCBHeaven: Manchester and Diff Manchester encoding] unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13686</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13686"/>
		<updated>2018-09-24T12:15:09Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* sigrok-cli examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanver&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on numbers of samples rather than on sampling rate or specific inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;#039;&amp;#039;&amp;#039;Save Selected Range As&amp;#039;&amp;#039;&amp;#039; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - Invert data - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode type - default Manchester&lt;br /&gt;
    preamble - &amp;#039;auto&amp;#039;/&amp;#039;1010&amp;#039;/&amp;#039;1111&amp;#039; - Preamble - default &amp;#039;auto&amp;#039; &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - Transition at start - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Devices can send a 50:50 mark/space square wave to transmit a signal that represents &amp;#039;1111&amp;#039; or &amp;#039;1010&amp;#039;. In one case the pulse samples represent the clock period, in the other only half. The default &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; option is &amp;#039;&amp;#039;&amp;#039;auto&amp;#039;&amp;#039;&amp;#039; which tries both variants at the same time and selects the result with least errors when all of the packet has been seen. This can be very useful when there are Oregon v2 and v3 devices in the same capture. The user can also force the preamble to be 1111 or 1010.&lt;br /&gt;
&lt;br /&gt;
There are two variants, G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and follow G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;0&amp;#039;   zero (low)&lt;br /&gt;
&amp;#039;1&amp;#039;   one (high)&lt;br /&gt;
&amp;#039;E&amp;#039;   Error (invalid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Error bits can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with auto preamble (default) &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon v2)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010&amp;#039; -i oregon_bthr968.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,oregon -i oregon_bthr968.sr -A oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can output the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying Wikipedia: On Off Keying]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Wikipedia: Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html Distributed Wikipedia Mirror: Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ PCBHeaven: Manchester and Diff Manchester encoding] unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13685</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13685"/>
		<updated>2018-09-24T12:12:59Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* sigrok-cli examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanver&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on numbers of samples rather than on sampling rate or specific inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;#039;&amp;#039;&amp;#039;Save Selected Range As&amp;#039;&amp;#039;&amp;#039; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - Invert data - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode type - default Manchester&lt;br /&gt;
    preamble - &amp;#039;auto&amp;#039;/&amp;#039;1010&amp;#039;/&amp;#039;1111&amp;#039; - Preamble - default &amp;#039;auto&amp;#039; &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - Transition at start - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Devices can send a 50:50 mark/space square wave to transmit a signal that represents &amp;#039;1111&amp;#039; or &amp;#039;1010&amp;#039;. In one case the pulse samples represent the clock period, in the other only half. The default &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; option is &amp;#039;&amp;#039;&amp;#039;auto&amp;#039;&amp;#039;&amp;#039; which tries both variants at the same time and selects the result with least errors when all of the packet has been seen. This can be very useful when there are Oregon v2 and v3 devices in the same capture. The user can also force the preamble to be 1111 or 1010.&lt;br /&gt;
&lt;br /&gt;
There are two variants, G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and follow G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;0&amp;#039;   zero (low)&lt;br /&gt;
&amp;#039;1&amp;#039;   one (high)&lt;br /&gt;
&amp;#039;E&amp;#039;   Error (invalid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Error bits can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with &amp;#039;&amp;#039;&amp;#039;auto&amp;#039;&amp;#039;&amp;#039; preamble (default) &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon v2)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010&amp;#039; -i oregon_bthr968.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,oregon -i oregon_bthr968.sr -A oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can output the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying Wikipedia: On Off Keying]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Wikipedia: Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html Distributed Wikipedia Mirror: Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ PCBHeaven: Manchester and Diff Manchester encoding] unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13684</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13684"/>
		<updated>2018-09-24T11:58:11Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* Decoder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanver&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on numbers of samples rather than on sampling rate or specific inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;#039;&amp;#039;&amp;#039;Save Selected Range As&amp;#039;&amp;#039;&amp;#039; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - Invert data - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode type - default Manchester&lt;br /&gt;
    preamble - &amp;#039;auto&amp;#039;/&amp;#039;1010&amp;#039;/&amp;#039;1111&amp;#039; - Preamble - default &amp;#039;auto&amp;#039; &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - Transition at start - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Devices can send a 50:50 mark/space square wave to transmit a signal that represents &amp;#039;1111&amp;#039; or &amp;#039;1010&amp;#039;. In one case the pulse samples represent the clock period, in the other only half. The default &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; option is &amp;#039;&amp;#039;&amp;#039;auto&amp;#039;&amp;#039;&amp;#039; which tries both variants at the same time and selects the result with least errors when all of the packet has been seen. This can be very useful when there are Oregon v2 and v3 devices in the same capture. The user can also force the preamble to be 1111 or 1010.&lt;br /&gt;
&lt;br /&gt;
There are two variants, G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and follow G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;0&amp;#039;   zero (low)&lt;br /&gt;
&amp;#039;1&amp;#039;   one (high)&lt;br /&gt;
&amp;#039;E&amp;#039;   Error (invalid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Error bits can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with a preamble starting 1010.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039; -i thgr228n.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,oregon -i thgr228n.sr -A oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can output the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying Wikipedia: On Off Keying]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Wikipedia: Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html Distributed Wikipedia Mirror: Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ PCBHeaven: Manchester and Diff Manchester encoding] unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Ook.png&amp;diff=13683</id>
		<title>File:Ook.png</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Ook.png&amp;diff=13683"/>
		<updated>2018-09-24T10:57:32Z</updated>

		<summary type="html">&lt;p&gt;SteveR: SteveR uploaded a new version of File:Ook.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13583</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13583"/>
		<updated>2018-06-19T11:53:07Z</updated>

		<summary type="html">&lt;p&gt;SteveR: option misspelt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanver&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on numbers of samples rather than on sampling rate or specific inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;#039;&amp;#039;&amp;#039;Save Selected Range As&amp;#039;&amp;#039;&amp;#039; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode As - default Manchester&lt;br /&gt;
    preamble - &amp;#039;1010 ...&amp;#039;/&amp;#039;1111 ...&amp;#039; - Preamble pattern - default &amp;#039;1111 ...&amp;#039; &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Preamble filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - transition at start is a - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Devices can send a 50:50 mark/space square wave to transmit a signal that is &amp;#039;1111 ...&amp;#039; or &amp;#039;1010 ...&amp;#039;. In one case the pulse samples represent the clock period in the other only half. Which one was intended cannot be easily detected by the receiver, so there is an option for the user to make the choice. Making the right choice should remove most of the decoding errors.&lt;br /&gt;
&lt;br /&gt;
There are also two variants, as per G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and comply with G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;0&amp;#039;   zero (low)&lt;br /&gt;
&amp;#039;1&amp;#039;   one (high)&lt;br /&gt;
&amp;#039;E&amp;#039;   Error (invalid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Error bits can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with a preamble starting 1010.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039; -i thgr228n.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,oregon -i thgr228n.sr -A oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can output the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying Wikipedia: On Off Keying]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Wikipedia: Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html Distributed Wikipedia Mirror: Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ PCBHeaven: Manchester and Diff Manchester encoding] unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13582</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13582"/>
		<updated>2018-06-19T11:50:54Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanvar&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on numbers of samples rather than on sampling rate or specific inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;#039;&amp;#039;&amp;#039;Save Selected Range As&amp;#039;&amp;#039;&amp;#039; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode As - default Manchester&lt;br /&gt;
    preamble - &amp;#039;1010 ...&amp;#039;/&amp;#039;1111 ...&amp;#039; - Preamble pattern - default &amp;#039;1111 ...&amp;#039; &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Preamble filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - transition at start is a - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Devices can send a 50:50 mark/space square wave to transmit a signal that is &amp;#039;1111 ...&amp;#039; or &amp;#039;1010 ...&amp;#039;. In one case the pulse samples represent the clock period in the other only half. Which one was intended cannot be easily detected by the receiver, so there is an option for the user to make the choice. Making the right choice should remove most of the decoding errors.&lt;br /&gt;
&lt;br /&gt;
There are also two variants, as per G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and comply with G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;0&amp;#039;   zero (low)&lt;br /&gt;
&amp;#039;1&amp;#039;   one (high)&lt;br /&gt;
&amp;#039;E&amp;#039;   Error (invalid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Error bits can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with a preamble starting 1010.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039; -i thgr228n.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,oregon -i thgr228n.sr -A oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can output the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying Wikipedia: On Off Keying]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Wikipedia: Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html Distributed Wikipedia Mirror: Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ PCBHeaven: Manchester and Diff Manchester encoding] unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13581</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13581"/>
		<updated>2018-06-19T11:49:37Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanvar&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on sample lengths rather than on sampling rate or specific inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;#039;&amp;#039;&amp;#039;Save Selected Range As&amp;#039;&amp;#039;&amp;#039; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode As - default Manchester&lt;br /&gt;
    preamble - &amp;#039;1010 ...&amp;#039;/&amp;#039;1111 ...&amp;#039; - Preamble pattern - default &amp;#039;1111 ...&amp;#039; &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Preamble filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - transition at start is a - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Devices can send a 50:50 mark/space square wave to transmit a signal that is &amp;#039;1111 ...&amp;#039; or &amp;#039;1010 ...&amp;#039;. In one case the pulse samples represent the clock period in the other only half. Which one was intended cannot be easily detected by the receiver, so there is an option for the user to make the choice. Making the right choice should remove most of the decoding errors.&lt;br /&gt;
&lt;br /&gt;
There are also two variants, as per G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and comply with G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;0&amp;#039;   zero (low)&lt;br /&gt;
&amp;#039;1&amp;#039;   one (high)&lt;br /&gt;
&amp;#039;E&amp;#039;   Error (invalid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Error bits can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with a preamble starting 1010.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039; -i thgr228n.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,oregon -i thgr228n.sr -A oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can output the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying Wikipedia: On Off Keying]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Wikipedia: Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html Distributed Wikipedia Mirror: Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ PCBHeaven: Manchester and Diff Manchester encoding] unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13580</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13580"/>
		<updated>2018-06-19T11:45:19Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* Getting a signal to Analyse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanvar&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on sample lengths rather than on sampling rate or inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;#039;&amp;#039;&amp;#039;Save Selected Range As&amp;#039;&amp;#039;&amp;#039; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode As - default Manchester&lt;br /&gt;
    preamble - &amp;#039;1010 ...&amp;#039;/&amp;#039;1111 ...&amp;#039; - Preamble pattern - default &amp;#039;1111 ...&amp;#039; &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Preamble filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - transition at start is a - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Devices can send a 50:50 mark/space square wave to transmit a signal that is &amp;#039;1111 ...&amp;#039; or &amp;#039;1010 ...&amp;#039;. In one case the pulse samples represent the clock period in the other only half. Which one was intended cannot be easily detected by the receiver, so there is an option for the user to make the choice. Making the right choice should remove most of the decoding errors.&lt;br /&gt;
&lt;br /&gt;
There are also two variants, as per G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and comply with G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;0&amp;#039;   zero (low)&lt;br /&gt;
&amp;#039;1&amp;#039;   one (high)&lt;br /&gt;
&amp;#039;E&amp;#039;   Error (invalid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Error bits can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with a preamble starting 1010.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039; -i thgr228n.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,oregon -i thgr228n.sr -A oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can output the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying Wikipedia: On Off Keying]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Wikipedia: Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html Distributed Wikipedia Mirror: Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ PCBHeaven: Manchester and Diff Manchester encoding] unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13579</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13579"/>
		<updated>2018-06-19T11:35:36Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* sigrok-cli examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanvar&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on sample lengths rather than on sampling rate or inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;quot;Save Selected Range As&amp;quot; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode As - default Manchester&lt;br /&gt;
    preamble - &amp;#039;1010 ...&amp;#039;/&amp;#039;1111 ...&amp;#039; - Preamble pattern - default &amp;#039;1111 ...&amp;#039; &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Preamble filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - transition at start is a - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Devices can send a 50:50 mark/space square wave to transmit a signal that is &amp;#039;1111 ...&amp;#039; or &amp;#039;1010 ...&amp;#039;. In one case the pulse samples represent the clock period in the other only half. Which one was intended cannot be easily detected by the receiver, so there is an option for the user to make the choice. Making the right choice should remove most of the decoding errors.&lt;br /&gt;
&lt;br /&gt;
There are also two variants, as per G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and comply with G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;0&amp;#039;   zero (low)&lt;br /&gt;
&amp;#039;1&amp;#039;   one (high)&lt;br /&gt;
&amp;#039;E&amp;#039;   Error (invalid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Error bits can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with a preamble starting 1010.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039; -i thgr228n.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,oregon -i thgr228n.sr -A oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can output the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying Wikipedia: On Off Keying]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Wikipedia: Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html Distributed Wikipedia Mirror: Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ PCBHeaven: Manchester and Diff Manchester encoding] unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13578</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13578"/>
		<updated>2018-06-19T11:24:41Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanvar&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on sample lengths rather than on sampling rate or inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;quot;Save Selected Range As&amp;quot; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode As - default Manchester&lt;br /&gt;
    preamble - &amp;#039;1010 ...&amp;#039;/&amp;#039;1111 ...&amp;#039; - Preamble pattern - default &amp;#039;1111 ...&amp;#039; &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Preamble filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - transition at start is a - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Devices can send a 50:50 mark/space square wave to transmit a signal that is &amp;#039;1111 ...&amp;#039; or &amp;#039;1010 ...&amp;#039;. In one case the pulse samples represent the clock period in the other only half. Which one was intended cannot be easily detected by the receiver, so there is an option for the user to make the choice. Making the right choice should remove most of the decoding errors.&lt;br /&gt;
&lt;br /&gt;
There are also two variants, as per G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and comply with G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;0&amp;#039;   zero (low)&lt;br /&gt;
&amp;#039;1&amp;#039;   one (high)&lt;br /&gt;
&amp;#039;E&amp;#039;   Error (invalid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Error bits can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with a preamble starting 1010.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039; -i thgr228n.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,oregon -i thgr228n.sr -A oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can optionally display the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying Wikipedia: On Off Keying]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Wikipedia: Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html Distributed Wikipedia Mirror: Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ PCBHeaven: Manchester and Diff Manchester encoding] unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13577</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13577"/>
		<updated>2018-06-19T11:19:51Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* Decoder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanvar&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on sample lengths rather than on sampling rate or inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;quot;Save Selected Range As&amp;quot; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode As - default Manchester&lt;br /&gt;
    preamble - &amp;#039;1010 ...&amp;#039;/&amp;#039;1111 ...&amp;#039; - Preamble pattern - default &amp;#039;1111 ...&amp;#039; &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Preamble filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - transition at start is a - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Devices can send a 50:50 mark/space square wave to transmit a signal that is &amp;#039;1111 ...&amp;#039; or &amp;#039;1010 ...&amp;#039;. In one case the pulse samples represent the clock period in the other only half. Which one was intended cannot be easily detected by the receiver, so there is an option for the user to make the choice. Making the right choice should remove most of the decoding errors.&lt;br /&gt;
&lt;br /&gt;
There are also two variants, as per G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and comply with G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;0&amp;#039;   zero (low)&lt;br /&gt;
&amp;#039;1&amp;#039;   one (high)&lt;br /&gt;
&amp;#039;E&amp;#039;   Error (invalid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Error bits can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with a preamble starting 1010.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039; -i thgr228n.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,oregon -i thgr228n.sr -A oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can optionally display the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying Wikipedia: On Off Keying]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Wikipedia: Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html  Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ Distributed Wikipedia Mirror: Manchester and Diff Manchester encoding] good unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13576</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13576"/>
		<updated>2018-06-19T11:16:59Z</updated>

		<summary type="html">&lt;p&gt;SteveR: fixed formatting of Output, tweaked sigrok-cli examples and tidied up Resource links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanvar&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on sample lengths rather than on sampling rate or inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;quot;Save Selected Range As&amp;quot; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode As - default Manchester&lt;br /&gt;
    preamble - &amp;#039;1010 ...&amp;#039;/&amp;#039;1111 ...&amp;#039; - Preamble pattern - default &amp;#039;1111 ...&amp;#039; &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Preamble filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - transition at start is a - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
This can send a 50:50 mark/space square wave to transmit a signal that is &amp;#039;1111 ...&amp;#039; or &amp;#039;1010 ...&amp;#039;. In one case the pulse samples represent the clock period in the other only half. Which one was intended cannot be easily detected by the receiver, so there is an option for the user to make the choice. Making the right choice should remove most of the decoding errors.&lt;br /&gt;
&lt;br /&gt;
There are also two variants, as per G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and comply with G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;0&amp;#039;   zero (low)&lt;br /&gt;
&amp;#039;1&amp;#039;   one (high)&lt;br /&gt;
&amp;#039;E&amp;#039;   Error (invalid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Error bits can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with a preamble starting 1010.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039; -i thgr228n.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,oregon -i thgr228n.sr -A oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can optionally display the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying Wikipedia: On Off Keying]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Wikipedia: Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html  Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ Distributed Wikipedia Mirror: Manchester and Diff Manchester encoding] good unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Ook_gen.png&amp;diff=13575</id>
		<title>File:Ook gen.png</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Ook_gen.png&amp;diff=13575"/>
		<updated>2018-06-18T16:28:51Z</updated>

		<summary type="html">&lt;p&gt;SteveR: SteveR uploaded a new version of File:Ook gen.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_gen&amp;diff=13574</id>
		<title>Protocol decoder:Ook gen</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_gen&amp;diff=13574"/>
		<updated>2018-06-18T16:19:35Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_gen&lt;br /&gt;
| name            = OOK Generator&lt;br /&gt;
| description     = On Off Keying Generator&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_gen&lt;br /&gt;
| image           = [[File:ook_gen.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = type&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_gen&amp;#039;&amp;#039;&amp;#039; protocol decoder takes data from one or more lines from lists.py file and generates ook signal(s) from it.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
It is provided to help test decoders that use the output generated by the ook decoder without having the capture files and supplies ook in the same way to stacked decoders.&lt;br /&gt;
&lt;br /&gt;
It will also allow you to test the Oregon hex codes posted in various places online. The format that Oregon capturing programs use varies, some of them re-order the Nibbles. There are examples of a number of these in the lists.py file&lt;br /&gt;
&lt;br /&gt;
At the moment it only works with Pulseview and Linux sigrok-cli.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; decoder has one option&lt;br /&gt;
&lt;br /&gt;
{ &amp;#039;id&amp;#039;: &amp;#039;type&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;OOK Type&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Oregon&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;None&amp;#039;,&amp;#039;Oregon&amp;#039;,) }&lt;br /&gt;
&lt;br /&gt;
If the &amp;#039;&amp;#039;&amp;#039;Oregon&amp;#039;&amp;#039;&amp;#039; option is selected (only one available for now) then it will generate ook for the ook_oregon Oregon decoder.&lt;br /&gt;
&lt;br /&gt;
Selecting the Oregon type produces three lines of decode. The first line displays the comment or info that goes with the code. The second is the Hex that was generated from the code while the third displays the ook bits.&lt;br /&gt;
&lt;br /&gt;
if you uncomment the following line from the lists.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&amp;#039;198408E000C70040034&amp;#039;,&amp;#039;WGR800 Av Speed 0.4m/s Gusts 0.7m/s  Direction: N &amp;#039;,&amp;#039;v3&amp;#039;],&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then it will generate the ook to simulate a WGR800 wind sensor&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_gen --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
To decode the example WGR800 uncomment the line in lists.py and then run. The trace belongs to a real Oregon v3 rain sensor model PCR800 and is needed to run the ook_gen although the contents of the sr file are pretty much ignored.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook_gen,ook_oregon -i oregon_pcr800.sr -A ook_oregon&lt;br /&gt;
ook_oregon-1: Oregon v3 Preamble&lt;br /&gt;
ook_oregon-1: Sync&lt;br /&gt;
ook_oregon-1: SensorID: 1984&lt;br /&gt;
ook_oregon-1: Ch: 0&lt;br /&gt;
ook_oregon-1: RollingCode: 8e&lt;br /&gt;
ook_oregon-1: Flags1: 0&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: c&lt;br /&gt;
ook_oregon-1: 7&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: 4&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: 3&lt;br /&gt;
ook_oregon-1: 4&lt;br /&gt;
ook_oregon-1: WGR800 - Wind&lt;br /&gt;
ook_oregon-1: Ch 0&lt;br /&gt;
ook_oregon-1: Batt Ok&lt;br /&gt;
ook_oregon-1: N (0°)&lt;br /&gt;
ook_oregon-1: Gust 0.7 m/s&lt;br /&gt;
ook_oregon-1: Speed 0.4 m/s&lt;br /&gt;
ook_oregon-1: Checksum OK Calc 43 Rx 43 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_vis&amp;diff=13573</id>
		<title>Protocol decoder:Ook vis</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_vis&amp;diff=13573"/>
		<updated>2018-06-18T16:11:33Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_vis&lt;br /&gt;
| name            = OOK Visualiser&lt;br /&gt;
| description     = On Off Keying Visualiser&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_vis&lt;br /&gt;
| image           = [[File:ook_vis.png|250px]]&lt;br /&gt;
| input           = ook&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = displayas, synclen, syncoffset&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; protocol decoder takes &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; input from the ook decoder and displays it in a variety of formats.&lt;br /&gt;
&lt;br /&gt;
It is provided to help analyse unknown format waveforms. Using the ook decoder with this one allows you to try &amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Manchester&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;Differential Manchester&amp;#039;&amp;#039;&amp;#039; and their possible settings to see what produces the lowest errors. Then use ook_vis to format the results in a suitable fashion for what you are decoding, make some structure assumptions and see what that does to the results.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; protocol decoder provides two lines of decode. The first line does a basic decode (with formatting) while the second attempts to work out where the preamble and sync might be and then displays the data with a posible structure. The sync position is worked out from the preamble and detects when it switches from &amp;#039;1111 ...&amp;#039; or &amp;#039;1010 ...&amp;#039; to something else.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; decoder has three options&lt;br /&gt;
&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;displayas&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Display as&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Nibble - Hex&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;Byte - Hex&amp;#039;,&amp;#039;Byte - Hex rev&amp;#039;, &amp;#039;Byte - BCD&amp;#039;,&amp;#039;Byte - BCD rev&amp;#039;,&amp;#039;Nibble - Hex&amp;#039;,&amp;#039;Nibble - Hex rev&amp;#039;,&amp;#039;Nibble - BCD&amp;#039;,&amp;#039;Nibble - BCD rev&amp;#039;,)},&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;synclen&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Sync length&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;4&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;0&amp;#039;,&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;,&amp;#039;5&amp;#039;,&amp;#039;6&amp;#039;,&amp;#039;7&amp;#039;,&amp;#039;8&amp;#039;,&amp;#039;9&amp;#039;,&amp;#039;10&amp;#039;)},&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;syncoffset&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Sync offseth&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;0&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;-4&amp;#039;,&amp;#039;-3&amp;#039;,&amp;#039;-2&amp;#039;,&amp;#039;-1&amp;#039;,&amp;#039;0&amp;#039;,&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;)}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;displayas&amp;#039;&amp;#039;&amp;#039; option allows the user to pick how the data is presented. It supportes two lengths 4 bits (Nibble) and 8 bits (Byte). It also allows numbers to be displayed as Hexadecimal or Binary Coded Decimal (BCD) and also supports bit reversal.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;synclen&amp;#039;&amp;#039;&amp;#039; option allows the user to set the length of the Sync and vary it to see what that does to the data after it.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;syncoffset&amp;#039;&amp;#039;&amp;#039; option allows the user to move the start of sync backwards and forwards to see what that does to the data after it.&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_vis --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; decoder concentrates on the protocol and not how it is transmitted so it needs the ook decoder to deal with the encoding before it can do its work. It stacks on top of the &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder.&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default) (Oregon V3 sensor) and then pass the result to the ook_vis decoder and only display the ook_vis output. The trace belongs to a real Oregon v3 rain sensor model PCR800.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_vis -i oregon_pcr800.sr -A ook_vis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13572</id>
		<title>Protocol decoder:Ook oregon</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13572"/>
		<updated>2018-06-18T16:06:01Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_oregon&lt;br /&gt;
| name            = Oregon Scientific&lt;br /&gt;
| description     = Decodes Oregon Scientific signals for weather sensors&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_oregon&lt;br /&gt;
| image           = [[File:ook_oregon.png|250px]]&lt;br /&gt;
| input           = ook&lt;br /&gt;
| output          = none&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = unknown&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder takes &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; input from the ook decoder and turns that into what the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] sensor is reporting.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Oregon weather sensors use Manchester encoding to transmit their data. The v2.1 sensors use a &amp;#039;1010 ...&amp;#039; preamble while the v3 sensors use a &amp;#039;1111 ...&amp;#039; preamble. The v2.1 sensors send two copies of all the bits which means the packets are longer.&lt;br /&gt;
&lt;br /&gt;
The decoder should decode Oregon v1, v2.1 and v3 sensors but has only been tested on virtual v2.1 and real v3. v1 and v2.1 traces from real hardware would be welcomed by the author and/or the sigrok developers (on IRC or mailing list) to allow some additional testing (&amp;gt;= 50Khz sample rate please).&lt;br /&gt;
&lt;br /&gt;
The vast majority of the information that allowed this decoders creation came from [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015] Fields names follow its naming conventions and the list of model numbers and SensorID codes has been used to allow model number lookup. The additional information on what fields are used for what provides the information to carry out the rest of the level2 decode.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder provides two lines of decode, the first one does a basic decode and identification of the version while the second looks at the decoded SensorID and then picks out particular nibbles and turns them into a human readable results.&lt;br /&gt;
&lt;br /&gt;
The first line identifies which version is being received by looking for a particular sync pattern. Once the Sync pattern is found the Preamble and Sync bits are marked and stripped off. All the remaining data is then interpreted as sets of 4 bit Nibbles with all bits reversed (except SensorID). There are then some common fields for v2.1 and v3 sensors which are RollingCode, Channel, RollingCode and Flags1. Finally it prints out the remaining nibbles which are the sensor payload as hex digits without interpreting them.&lt;br /&gt;
&lt;br /&gt;
The level2 decode takes things a bit further by using the SensorID and a lookup table in ook_oregon/lists.py to display the model numbers that use that SensorID. It then looks up the type of sensor from the same list and then adds in fields for Temperature, Humidity, UV level, Rainfall, Wind speed and Barometric pressure. Results depends on what the sensor produces and whether it is recognised.&lt;br /&gt;
&lt;br /&gt;
Unknown sensors will be identified as &amp;#039;&amp;#039;&amp;#039;Unknown&amp;#039;&amp;#039;&amp;#039; and as such cannot be level2 decoded without human help.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder has one option&lt;br /&gt;
&lt;br /&gt;
    &amp;#039;id&amp;#039;: &amp;#039;unknown&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Unknown type is&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Unknown&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;Unknown&amp;#039;,&amp;#039;Temp_Hum&amp;#039;,&amp;#039;Temp_Hum1&amp;#039;,&amp;#039;Temp&amp;#039;,&amp;#039;Temp_Baro&amp;#039;,&amp;#039;UV&amp;#039;,&amp;#039;UV1&amp;#039;,&amp;#039;Wind&amp;#039;,&amp;#039;Rain&amp;#039;,&amp;#039;Baro&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
This option allows the user to pick what type of sensor that they think the Unknown one is and see the level2 decode for that choice. This is designed to allow them to try the options and see if they can get a meaningful decode out.&lt;br /&gt;
&lt;br /&gt;
If it does work then the ook_oregon/lists.py can be edited to include the sensorID, model number and decoding type. Please make sure that you are extremely confident that the trace belongs to the right sensor. The format is documented in the file. Please be very careful with the syntax and take a backup before editing it. Restarting Sigrok after this should convert the sensorID into a model number and do the decoding. &lt;br /&gt;
&lt;br /&gt;
Sending the author a copy of the extra or edited line in ook_oregon/lists.py might allow the list to grow over time, email address is at the top of the file. Response time will vary dramatically, no guarantees of inclusion. Alternatively a patch to the ook_oregon decoder could also get your device more universally recognised.&lt;br /&gt;
&lt;br /&gt;
New decoding types can be added if needed, example trace + model info plus reading at the time (from a weather base station) required. Or submit a code patch + trace for the sigrok dumps, model info plus reading at the time in the readme. &lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_oregon --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder concentrates on the protocol and not how it is transmitted so it needs the ook decoder to deal with the Manchester encoding before it can do its work. It stacks on top of the &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder.&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a virtual Oregon v2.1 Temperature sensor model THGR228N.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,ook_oregon -i thgr228n.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default) (Oregon V3 sensor) and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a real Oregon v3 rain sensor model PCR800.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -i oregon_pcr800.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook_oregon decoder can optionally display the data part of the signal in hex by using the Binary output switch with an option called &amp;quot;data-hex&amp;quot;. The hex can then be compared to other information on the web or saved in the lists.py file from ook_gen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook_oregon=data-hex -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Protocol Information&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific]&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015]&lt;br /&gt;
* [http://wmrx00.sourceforge.net/Arduino/OregonScientific-RF-Protocols.pdf Oregon Scientific RF Protocol Descriptions -June 2011] Older version&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/OregonScientific-RF-Protocols-II.pdf Oregon Scientific RF Protocol Description (Versions 1.0, 2.1, 3.0)]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Base Station Compatability with sensors + Oregon protocol versions and what sensors use them&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [https://weerhuisje.nl/en/e/oregon_sensoren Oregon weerstations met compatibele sensoren 2017] (Oregon weather stations with compatible sensors 2017). Also look at bottom of the page for &amp;quot;Lijst met oude modellen stations en sensoren&amp;quot; (List of old models stations and sensors) which lists Oregon protocol versions and what sensors use them&lt;br /&gt;
* [https://www.weathershack.com/static/osi-sensor-compatibility-chart.html Oregon Scientific Sensor Compatibility Chart] with base stations&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Virtual Sensors&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.connectingstuff.net/blog/encodage-protocoles-oregon-scientific-sur-arduino/ Virtual v2.1 sensor using an Arduino]  by Olivier Lebrun&lt;br /&gt;
* [https://github.com/deberman/OS_V2.1_temp-hum_sensor os_v2_1_temp_hum_sensor library] written by deberman 2016-02-24, derived from Virtual v2.1 sensor by Olivier Lebrun&lt;br /&gt;
* [https://wiki.pilight.org/oregon PiLight]&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoders&amp;diff=13549</id>
		<title>Protocol decoders</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoders&amp;diff=13549"/>
		<updated>2018-06-17T19:27:36Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* Possible candidates for future protocol decoders */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of &amp;#039;&amp;#039;&amp;#039;supported protocol decoders (PDs)&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;decoders which we might want to write in the future&amp;#039;&amp;#039;&amp;#039; (or users might want to contribute).&lt;br /&gt;
&lt;br /&gt;
See [[Protocol decoder API]] for details on how the decoders work in sigrok, and [[Protocol decoder HOWTO]] for a quick introduction about how to write your own decoders.&lt;br /&gt;
&lt;br /&gt;
== Supported protocol decoders ==&lt;br /&gt;
&lt;br /&gt;
Number of currently supported protocol decoders: &amp;#039;&amp;#039;&amp;#039;89&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot; class=&amp;quot;alternategrey sortable sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Protocol&lt;br /&gt;
!Category&lt;br /&gt;
!Input IDs&lt;br /&gt;
!Output IDs&lt;br /&gt;
!Status&lt;br /&gt;
!Full name&lt;br /&gt;
!Description&lt;br /&gt;
&lt;br /&gt;
{{pd|ac97|AC &amp;#039;97|Audio Codec &amp;#039;97|Audio and modem control for PC systems.|Audio|&amp;amp;mdash;|ac97|supported}}&lt;br /&gt;
{{pd|ade77xx|ADE77xx|Analog Devices ADE77xx|Poly phase multifunction energy metering IC protocol.|Sensors|spi|ade77xx|supported}}&lt;br /&gt;
{{pd|adf435x|ADF435x|Analog Devices ADF4350/1|Wideband synthesizer with integrated VCO.|RF|spi|adf435x|supported}}&lt;br /&gt;
{{pd|adns5020|ADNS-5020|Avago ADNS-5020 optical mouse sensor|Bidirectional command and data over an SPI-like protocol.|Sensors|spi|adns5020|supported}}&lt;br /&gt;
{{pd|am230x|AM230x/DHTxx/RHTxx|Aosong AM230x/DHTxx|Aosong AM230x/DHTxx/RHTxx humidity/temperature sensor protocol.|Sensors|&amp;amp;mdash;|am230x|supported}}&lt;br /&gt;
{{pd|arm_etmv3|ARM ETMv3|ARM Embedded Trace Macroblock|Decode ETM instruction trace packets.|Flash/debug|uart|arm_etmv3|supported}}&lt;br /&gt;
{{pd|arm_itm|ARM ITM|ARM Instrumentation Trace Macroblock|Trace data from Cortex-M / ARMv7m ITM module.|Flash/debug|uart|arm_itm|supported}}&lt;br /&gt;
{{pd|arm_tpiu|ARM TPIU|ARM Trace Port Interface Unit|Filter TPIU formatted trace data into separate streams.|Flash/debug|uart|uart|supported}}&lt;br /&gt;
{{pd|atsha204a|ATSHA204A|Microchip ATSHA204A|Microchip ATSHA204A CryptoAuthentication device.|Memory|i2c|atsha204a|supported}}&lt;br /&gt;
{{pd|aud|AUD|Advanced User Debugger|Renesas/Hitachi Advanced User Debugger (AUD) protocol.|Flash/debug|&amp;amp;mdash;|aud|supported}}&lt;br /&gt;
{{pd|avr_isp|AVR ISP|AVR in-system programming|Protocol for in-system programming Atmel AVR MCUs.|Flash/debug|spi|avr_isp|supported}}&lt;br /&gt;
{{pd|avr_pdi|AVR PDI|Atmel Program and Debug Interface|Atmel proprietary interface for the ATxmega MCU.|Flash/debug|&amp;amp;mdash;|avr_pdi|supported}}&lt;br /&gt;
{{pd|can|CAN|Controller Area Network|Field bus protocol for distributed realtime control.|Automotive|&amp;amp;mdash;|can|supported}}&lt;br /&gt;
{{pd|cfp|CFP|100 Gigabit C form-factor pluggable|100 Gigabit C form-factor pluggable (CFP) protocol.|Networking|mdio|&amp;amp;mdash;|supported}}&lt;br /&gt;
{{pd|counter|Counter|Edge counter|Count number of edges.|Misc|&amp;amp;mdash;|&amp;amp;mdash;|supported}}&lt;br /&gt;
{{pd|dali|DALI|Digital Addressable Lighting Interface|DALI lighting control protocol.|Lighting|&amp;amp;mdash;|dali|supported}}&lt;br /&gt;
{{pd|dcf77|DCF77|DCF77 time protocol|European longwave time signal (77.5kHz carrier signal).|Time signal|&amp;amp;mdash;|dcf77|supported}}&lt;br /&gt;
{{pd|dmx512|DMX512|Digital MultipleX 512|Professional lighting control protocol.|Lighting|&amp;amp;mdash;|dmx512|supported}}&lt;br /&gt;
{{pd|ds1307|DS1307|Dallas DS1307|Realtime clock module protocol.|RTC|i2c|ds1307|supported}}&lt;br /&gt;
{{pd|ds243x|DS243x|Maxim DS2432/DS2433|Maxim DS243x series 1-Wire EEPROM protocol.|Memory|onewire_network|ds243x|supported}}&lt;br /&gt;
{{pd|dsi|DSI|Digital Serial Interface|DSI lighting control protocol.|Lighting|&amp;amp;mdash;|dsi|supported}}&lt;br /&gt;
{{pd|edid|EDID|Extended Display Identification Data|Data structure describing display device capabilities.|PC|i2c|edid|supported}}&lt;br /&gt;
{{pd|eeprom24xx|24xx EEPROM|24xx I²C EEPROM|24xx series I²C EEPROM protocol.|Memory|i2c|eeprom24xx|supported}}&lt;br /&gt;
{{pd|eeprom93cxx|93Cxx EEPROM|93Cxx Microwire EEPROM|93Cxx series Microwire EEPROM protocol.|Memory|microwire|eeprom93cxx|supported}}&lt;br /&gt;
{{pd|em4100|EM4100|RFID EM4100|EM4100 100-150kHz RFID protocol.|RFID|&amp;amp;mdash;|em4100|supported}}&lt;br /&gt;
{{pd|em4305|EM4305|RFID EM4205/EM4305|EM4205/EM4305 100-150kHz RFID protocol.|RFID|&amp;amp;mdash;|em4305|supported}}&lt;br /&gt;
{{pd|gpib|GPIB|General Purpose Interface Bus|IEEE-488 GPIB / HPIB protocol.|Other|&amp;amp;mdash;|gpib|supported}}&lt;br /&gt;
{{pd|graycode|Gray code|Gray code and rotary encoder|Accumulate rotary encoder increments, provide timing statistics.|Misc|&amp;amp;mdash;|graycode|supported}}&lt;br /&gt;
{{pd|guess_bitrate|Guess bitrate|Guess bitrate/baudrate|Guess the bitrate/baudrate of a UART (or other) protocol.|Other|&amp;amp;mdash;|guess_bitrate|supported}}&lt;br /&gt;
{{pd|i2c|I2C|Inter-Integrated Circuit|Two-wire, multi-master, serial bus.|Embedded|&amp;amp;mdash;|i2c|supported}}&lt;br /&gt;
{{pd|i2cdemux|I2C demux|I2C demultiplexer|Demux I2C packets into per-slave-address streams.|Embedded|i2c|&amp;#039;&amp;#039;runtime decision&amp;#039;&amp;#039;|supported}}&lt;br /&gt;
{{pd|i2cfilter|I2C filter|I2C filter|Filter out addresses/directions in an I2C stream.|Embedded|i2c|i2c|supported}}&lt;br /&gt;
{{pd|i2s|I2S|Integrated Interchip Sound|Serial bus for connecting digital audio devices.|Audio|&amp;amp;mdash;|i2s|supported}}&lt;br /&gt;
{{pd|iec|IEC|Commodore bus|Commodore serial IEEE-488 (IEC) bus protocol.|Other|&amp;amp;mdash;|gpib|supported}}&lt;br /&gt;
{{pd|ir_nec|IR NEC|IR NEC|NEC infrared remote control protocol.|IR|&amp;amp;mdash;|ir_nec|supported}}&lt;br /&gt;
{{pd|ir_rc5|IR RC-5|IR RC-5|RC-5 infrared remote control protocol.|IR|&amp;amp;mdash;|ir_rc5|supported}}&lt;br /&gt;
{{pd|jitter|Jitter|Timing jitter calculation|Retrieves the timing jitter between two digital signals.|Misc|&amp;amp;mdash;|jitter|supported}}&lt;br /&gt;
{{pd|jtag|JTAG|Joint Test Action Group (IEEE 1149.1)|Protocol for testing, debugging, and flashing ICs.|Flash/debug|&amp;amp;mdash;|jtag|supported}}&lt;br /&gt;
{{pd|jtag_stm32|JTAG / STM32|Joint Test Action Group / ST STM32|ST STM32-specific JTAG protocol.|Flash/debug|jtag|jtag_stm32|supported}}&lt;br /&gt;
{{pd|lm75|LM75|National LM75|National LM75 (and compatibles) temperature sensor protocol.|Sensors|i2c|lm75|supported}}&lt;br /&gt;
{{pd|lpc|LPC|Low-Pin-Count|Protocol for low-bandwidth devices on PC mainboards.|PC|&amp;amp;mdash;|lpc|supported}}&lt;br /&gt;
{{pd|maple_bus|Maple bus|SEGA Maple bus|Maple bus peripheral protocol for SEGA Dreamcast.|Misc|&amp;amp;mdash;|maple_bus|supported}}&lt;br /&gt;
{{pd|max7219|MAX7219|Maxim MAX7219/MAX7221|8-digit LED display driver.|Display|spi|max7219|supported}}&lt;br /&gt;
{{pd|maxim_ds28ea00|DS28EA00|Maxim DS28EA00 1-Wire digital thermometer|1-Wire digital thermometer with Sequence Detect and PIO.|Sensors|onewire_network|maxim_ds28ea00|supported}}&lt;br /&gt;
{{pd|mcs48|MCS-48|Intel MCS-48|Intel MCS-48 external memory protocol.|CPU|&amp;amp;mdash;|mcs48|supported}}&lt;br /&gt;
{{pd|mdio|MDIO|Management Data Input/Output|Half-duplex sync serial bus for MII management between MAC and PHY.|Networking|&amp;amp;mdash;|mdio|supported}}&lt;br /&gt;
{{pd|microwire|Microwire|Microwire|3-wire, half-duplex, synchronous serial bus.|Embedded|&amp;amp;mdash;|microwire|supported}}&lt;br /&gt;
{{pd|midi|MIDI|Musical Instrument Digital Interface|Musical Instrument Digital Interface (MIDI) protocol.|Music|uart|midi|supported}}&lt;br /&gt;
{{pd|mlx90614|MLX90614|Melexis MLX90614|Infrared Thermometer protocol.|Sensors|i2c|mlx90614|supported}}&lt;br /&gt;
{{pd|modbus|Modbus|Modbus RTU over RS232/RS485|Modbus RTU protocol for industrial applications.|Misc|uart|modbus|supported}}&lt;br /&gt;
{{pd|morse|Morse|Morse code|Demodulated morse code protocol.|Misc|&amp;amp;mdash;|morse|supported}}&lt;br /&gt;
{{pd|mrf24j40|MRF24J40|Microchip MRF24J40|IEEE 802.15.4 2.4 GHz RF tranceiver chip.|RF|spi|mf24j40|supported}}&lt;br /&gt;
{{pd|mxc6225xu|MXC6225XU|MEMSIC MXC6225XU|Digital Thermal Orientation Sensor (DTOS) protocol.|Sensors|i2c|mxc6225xu|supported}}&lt;br /&gt;
{{pd|nrf24l01|nRF24L01(+)|Nordic Semiconductor nRF24L01/nRF24L01+|2.4GHz transceiver chip.|Wireless|spi|nrf24l01|supported}}&lt;br /&gt;
{{pd|nunchuk|Nunchuk|Nintendo Wii Nunchuk|Nintendo Wii Nunchuk controller protocol.|Other|i2c|nunchuk|supported}}&lt;br /&gt;
{{pd|onewire_link|1-Wire link layer|1-Wire serial communication bus (link layer)|Bidirectional, half-duplex, asynchronous serial bus.|Embedded|&amp;amp;mdash;|onewire_link|supported}}&lt;br /&gt;
{{pd|onewire_network|1-Wire network layer|1-Wire serial communication bus (network layer)|Bidirectional, half-duplex, asynchronous serial bus.|Embedded|onewire_link|onewire_network|supported}}&lt;br /&gt;
{{pd|pan1321|PAN1321|Panasonic PAN1321|Bluetooth RF module with Serial Port Profile (SPP).|Bluetooth|uart|pan1321|supported}}&lt;br /&gt;
{{pd|parallel|Parallel|Parallel sync bus|Generic parallel synchronous bus.|Misc|&amp;amp;mdash;|parallel|supported}}&lt;br /&gt;
{{pd|ps2|PS/2|PS/2|PS/2 keyboard/mouse interface.|PC|&amp;amp;mdash;|ps2|supported}}&lt;br /&gt;
{{pd|pwm|PWM|Pulse-width modulation|Analog level encoded in duty cycle percentage.|Misc|&amp;amp;mdash;|pwm|supported}}&lt;br /&gt;
{{pd|qi|Qi|Qi charger protocol|Async serial protocol for Qi charger receivers.|Misc|&amp;amp;mdash;|qi|supported}}&lt;br /&gt;
{{pd|rc_encode|RC encode|Remote control encoder|PT2262/HX2262/SC5262 remote control encoder protocol.|Wireless|&amp;amp;mdash;|&amp;amp;mdash;|supported}}&lt;br /&gt;
{{pd|rfm12|RFM12|RFM12 control protocol|HopeRF RFM12 wireless transceivers control protocol.|Wireless|spi|rfm12|supported}}&lt;br /&gt;
{{pd|rgb_led_spi|RGB LED (SPI)|RGB LED string decoder (SPI)|RGB LED string protocol (RGB values clocked over SPI).|LED|spi|rgb_led_spi|supported}}&lt;br /&gt;
{{pd|rgb_led_ws281x|RGB LED (WS281x)|RGB LED string decoder (WS281x)|RGB LED string protocol (WS281x).|LED|&amp;amp;mdash;|rgb_led_ws281x|supported}}&lt;br /&gt;
{{pd|rtc8564|RTC-8564|Epson RTC-8564 JE/NB|Realtime clock module protocol.|RTC|i2c|rtc8564|supported}}&lt;br /&gt;
{{pd|sda2506|SDA2506|Siemens SDA 2506-5|Serial nonvolatile 1-Kbit EEPROM.|Memory|&amp;amp;mdash;|sda2506|supported}}&lt;br /&gt;
{{pd|sdcard_sd|SD card (SD mode)|Secure Digital card (SD mode)|Secure Digital card (SD mode) low-level protocol.|Memory|&amp;amp;mdash;|sdcard_sd|supported}}&lt;br /&gt;
{{pd|sdcard_spi|SD card (SPI mode)|Secure Digital card (SPI mode)|Secure Digital card (SPI mode) low-level protocol.|Memory|spi|sdcard_spi|supported}}&lt;br /&gt;
{{pd|spdif|S/PDIF|Sony/Philips Digital Interface Format|Serial bus for connecting digital audio devices.|Audio|&amp;amp;mdash;|spdif|supported}}&lt;br /&gt;
{{pd|spi|SPI|Serial Peripheral Interface|Full-duplex, synchronous, serial bus.|Embedded|&amp;amp;mdash;|spi|supported}}&lt;br /&gt;
{{pd|spiflash|SPI flash|SPI flash chips|xx25 series SPI (NOR) flash chip protocol.|SPI flash|spi|spiflash|supported}}&lt;br /&gt;
{{pd|ssi32|SSI32|Synchronous Serial Interface (32bit)|Synchronous Serial Interface (32bit) protocol.|Misc|spi|ssi32|supported}}&lt;br /&gt;
{{pd|st7735|ST7735|Sitronix ST7735|Sitronix ST7735 TFT controller protocol.|Display|&amp;amp;mdash;|st7735|supported}}&lt;br /&gt;
{{pd|stepper_motor|Stepper motor|Stepper motor position / speed|Absolute position and movement speed from step/dir.|Motors|&amp;amp;mdash;|stepper_motor|supported}}&lt;br /&gt;
{{pd|swd|SWD|Serial Wire Debug|Two-wire protocol for debug access to ARM CPUs.|Flash/debug|&amp;amp;mdash;|swd|supported}}&lt;br /&gt;
{{pd|t55xx|T55xx|RFID T5xx|T55xx 100-150kHz RFID protocol.|RFID|&amp;amp;mdash;|t55xx|supported}}&lt;br /&gt;
{{pd|tca6408a|TI TCA6408A|Texas Instruments TCA6408A|Texas Instruments TCA6408A 8-bit I²C I/O expander.|I/O expander|i2c|tca6408a|supported}}&lt;br /&gt;
{{pd|timing|Timing|Timing calculation|Calculate time between edges.|Misc|&amp;amp;mdash;|timing|supported}}&lt;br /&gt;
{{pd|tlc5620|TI TLC5620|Texas Instruments TLC5620|Texas Instruments TLC5620 8-bit quad DAC.|DAC|&amp;amp;mdash;|tlc5620|supported}}&lt;br /&gt;
{{pd|uart|UART|Universal Asynchronous Receiver/Transmitter|Asynchronous, serial bus.|Embedded|&amp;amp;mdash;|uart|supported}}&lt;br /&gt;
{{pd|usb_packet|USB packet|Universal Serial Bus (LS/FS) packet|USB (low-speed and full-speed) packet protocol.|USB|usb_signalling|usb_packet|supported}}&lt;br /&gt;
{{pd|usb_power_delivery|USB PD|USB Power Delivery|USB Power Delivery protocol.|USB|&amp;amp;mdash;|usb_pd|supported}}&lt;br /&gt;
{{pd|usb_request|USB request|Universal Serial Bus (LS/FS) transaction/request|USB (low-speed and full-speed) transaction/request protocol.|USB|usb_packet|usb_request|supported}}&lt;br /&gt;
{{pd|usb_signalling|USB signalling|Universal Serial Bus (LS/FS) signalling|USB (low-speed and full-speed) signalling protocol.|USB|&amp;amp;mdash;|usb_signalling|supported}}&lt;br /&gt;
{{pd|wiegand|Wiegand|Wiegand interface|Wiegand interface for electronic entry systems.|RFID|&amp;amp;mdash;|wiegand|supported}}&lt;br /&gt;
{{pd|xfp|XFP|10 Gigabit Small Form Factor Pluggable Module (XFP)|Data structure describing device capabilities.|Networking|i2c|xfp|supported}}&lt;br /&gt;
{{pd|z80|Z80|Zilog Z80 CPU|Zilog Z80 microprocessor disassembly.|CPU|&amp;amp;mdash;|z80|supported}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible candidates for future protocol decoders ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot; class=&amp;quot;alternategrey sortable sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Protocol&lt;br /&gt;
!Category&lt;br /&gt;
!Input ID(s)&lt;br /&gt;
!Output ID(s)&lt;br /&gt;
!Status&lt;br /&gt;
!Description&lt;br /&gt;
!Comments&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SA8807A&lt;br /&gt;
| Displays&lt;br /&gt;
| spi&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| SPI-attached LCD. Datasheet: [http://pdf1.alldatasheet.com/datasheet-pdf/view/36922/SAMES/SA8807A.html Sames SA8807A].&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EA eDIPTFT43-A&lt;br /&gt;
| Displays&lt;br /&gt;
| i2c&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| I2C-attached LCD. Datasheet: [http://www.lcd-module.de/pdf/grafik/ediptft43-a.pdf EA eDIPTFT43-A].&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Analog Devices AD7291&lt;br /&gt;
| ADC&lt;br /&gt;
| i2c&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| I2C-attached ADC. Datasheet: [http://pdf1.alldatasheet.com/datasheet-pdf/view/318172/AD/AD7291.html Analog Devices AD7291].&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Analog Devices ADS1258&lt;br /&gt;
| ADC&lt;br /&gt;
| spi&lt;br /&gt;
| ads1258&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 0%&lt;br /&gt;
| SPI-attached ADC.&lt;br /&gt;
| Planned (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Microchip MCP3901&lt;br /&gt;
| ADC&lt;br /&gt;
| spi&lt;br /&gt;
| mcp3901&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 0%&lt;br /&gt;
| Can be controlled via a parallel protocol, or SPI, or I2C.&lt;br /&gt;
| Planned (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| JTAG / TMPA9xx&lt;br /&gt;
| Flash/debug&lt;br /&gt;
| jtag&lt;br /&gt;
| jtag_tmpa9xx&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Toshiba TMPA9xx specific JTAG protocol details.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB transfer&lt;br /&gt;
| USB&lt;br /&gt;
| usb_request&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB / HID&lt;br /&gt;
| USB&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| usb_hid&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB / CDC&lt;br /&gt;
| USB&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| usb_cdc&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB / USBTMC&lt;br /&gt;
| USB&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| usb_usbtmc&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Dallas DS1985&lt;br /&gt;
| Other&lt;br /&gt;
| onewire_network&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 0%&lt;br /&gt;
| Dallas DS1985 iButton (1-Wire) device.&lt;br /&gt;
| Planned (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| UNI/O&lt;br /&gt;
| Embedded&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Synchronous_Serial_Interface SSI]&lt;br /&gt;
| Embedded&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Synchronous Serial Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| CompactFlash&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MMC&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Memory Stick&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SmartMedia&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| xD-Picture Card&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/ISO/IEC_7816 ISO 7816]&lt;br /&gt;
| Smartcards&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FlexRay&lt;br /&gt;
| Automotive&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Flexray FlexRay] is an automotive network communications protocol.&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| LIN&lt;br /&gt;
| Automotive&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Local_Interconnect_Network LIN] (Local Interconnect Network) is an automotive bus standard.&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| AVR TPI&lt;br /&gt;
| Flash/debug&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Atmel Tiny Programming Interface (TPI) protocol.&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FWH&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISA&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| PCI&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SMBus&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| IDE&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SCSI&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Platform_Environment_Control_Interface PECI]&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Platform Environment Control Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/SVID SVID]&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Serial Voltage Identification&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:mfm|MFM]]&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 90%&lt;br /&gt;
| Floppy disk FM and [https://en.wikipedia.org/wiki/Modified_Frequency_Modulation MFM].&lt;br /&gt;
| Work in progress (David Wiens).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| HD Audio&lt;br /&gt;
| Audio&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Nokia NRC17&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Sony SIRC&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Philips RC-6&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Philips RC-MM&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Philips RECS80&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Infrared_Data_Association IrDA]&lt;br /&gt;
| Misc&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| HD44780&lt;br /&gt;
| Displays&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [http://en.wikipedia.org/wiki/HD44780_Character_LCD HD44780 character LCD] protocol&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 7-segment display&lt;br /&gt;
| Displays&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:Pcf8814|PCF8814]]&lt;br /&gt;
| Displays&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| pcf8814&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 50%&lt;br /&gt;
| Philips PCF8814 65 x 96 pixels matrix LCD driver&lt;br /&gt;
| Work in progress (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:Pcf8814_lcd|PCF8814 LCD]]&lt;br /&gt;
| Displays&lt;br /&gt;
| pcf8814&lt;br /&gt;
| pcf8814_lcd&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 50%&lt;br /&gt;
| Philips PCF8814 65 x 96 pixels matrix LCD driver&lt;br /&gt;
| Work in progress (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/RDM_%28lighting%29 RDM]&lt;br /&gt;
| Industrial Lighting&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| rdm&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/NMEA_0183 NMEA 0183]&lt;br /&gt;
| GPS&lt;br /&gt;
| uart&lt;br /&gt;
| nmea0183&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:Nmea2000|NMEA2000]]&lt;br /&gt;
| Marine&lt;br /&gt;
| can&lt;br /&gt;
| nmea2000&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [https://en.wikipedia.org/wiki/NMEA_2000 NMEA 2000 Wikipedia page]&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Digital_Command_Control DCC]&lt;br /&gt;
| Trains&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| dcc&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Train_Communication_Network MVB]&lt;br /&gt;
| Trains&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mvb&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Multifunction Vehicle Bus&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Train_Communication_Network WTB]&lt;br /&gt;
| Trains&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| wtb&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Wire Train Bus&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/C-Bus_%28protocol%29 C-Bus]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| cbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/X10_%28industry_standard%29 X10]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| x10&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/LonWorks LonWorks]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| lonworks&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/S-Bus S-Bus]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| sbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Meter-Bus M-Bus]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Modbus Modbus ASCII]&lt;br /&gt;
| Automation&lt;br /&gt;
| uart&lt;br /&gt;
| modbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Modbus Modbus TCP]&lt;br /&gt;
| Automation&lt;br /&gt;
| ip&lt;br /&gt;
| modbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Highway_Addressable_Remote_Transducer_Protocol HART protocol]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| hart&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/INTERBUS INTERBUS]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| interbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/DirectNET_Protocol DirectNET]&lt;br /&gt;
| Automation&lt;br /&gt;
| uart&lt;br /&gt;
| directnet&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/KNX_%28standard%29 KNX]&lt;br /&gt;
| Automation&lt;br /&gt;
| various&lt;br /&gt;
| knx&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Bacnet BACnet]&lt;br /&gt;
| Automation&lt;br /&gt;
| &lt;br /&gt;
| bacnet&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/OpenTherm OpenTherm]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| opentherm&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/EBUS_%28serial_buses%29 EBUS]&lt;br /&gt;
| Automation&lt;br /&gt;
| uart&lt;br /&gt;
| ebus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Attachment_Unit_Interface AUI]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| aui&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Attachment Unit Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Medium_Dependent_Interface MDI]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mdi&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Medium Dependent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Media_Independent_Interface MII]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mii&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Media Independent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Gigabit_Media_Independent_Interface#Gigabit_Media_Independent_Interface GMII]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| gmii&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Gigabit Media Independent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/10_Gigabit_Media_Independent_Interface#10_Gigabit_Media_Independent_Interface XGMII]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| xgmii&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| 10 Gigabit Media Independent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:esp8266|ESP8266]]&lt;br /&gt;
| Wireless&lt;br /&gt;
| uart&lt;br /&gt;
| esp8266&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| WiFi Serial Transceiver&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:cc1101|TI CC1101]]&lt;br /&gt;
| Wireless&lt;br /&gt;
| spi&lt;br /&gt;
| cc1101&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 1%&lt;br /&gt;
| SPI-attached wireless controller for 315/433/868/915 MHz ISM bands. [http://www.ti.com/lit/ds/symlink/cc1101.pdf Datasheet]&lt;br /&gt;
| Work in progress ([[User:Rohieb|rohieb]])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:tmds|TMDS (HDMI / DVI Pixel Data)]]&lt;br /&gt;
| Display&lt;br /&gt;
| tmds&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 1%&lt;br /&gt;
| https://github.com/mithro/tmds_encoding&lt;br /&gt;
| Work in progress ([[User:Mithro|mithro]])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:Easymatic|Easymatic]]&lt;br /&gt;
| Home automation&lt;br /&gt;
| uart&lt;br /&gt;
| easymatic&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 10%&lt;br /&gt;
| &lt;br /&gt;
| Work in progress (Platypus)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:DDC/CI|DDC/CI]]&lt;br /&gt;
| PC&lt;br /&gt;
| i2c&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:CEC|CEC]]&lt;br /&gt;
| Misc&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Kenwood VH&lt;br /&gt;
| Misc&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 50%&lt;br /&gt;
| SYSTEM CONTROL protocol used by Kenwood&amp;#039;s VH HiFi-system&lt;br /&gt;
| In progress: https://github.com/kripton/libsigrokdecode/compare/kenwood_vh&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| IEC 61131-9&lt;br /&gt;
| Industrial&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &amp;quot;Single-drop digital communication interface for small sensors and actuators (SDCI, marketed as IO-Link)&amp;quot; https://en.wikipedia.org/wiki/IEC_61131&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:Ook|Ook]]&lt;br /&gt;
| Wireless&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| ook&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 90%&lt;br /&gt;
| Decodes On Off Keying waveforms which are frequently used for remote control protocols &lt;br /&gt;
| Work in progress ([[User:SteveR|stever]])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:Ook_oregon|Ook_oregon]]&lt;br /&gt;
| Wireless&lt;br /&gt;
| ook&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 90%&lt;br /&gt;
| Decodes Oregon Scientific signals for weather sensors &lt;br /&gt;
| Work in progress ([[User:SteveR|stever]])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:Ook_vis|Ook_vis]]&lt;br /&gt;
| Wireless&lt;br /&gt;
| ook&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 90%&lt;br /&gt;
| On Off Keying Visualiser &lt;br /&gt;
| Work in progress ([[User:SteveR|stever]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoders&amp;diff=13548</id>
		<title>Protocol decoders</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoders&amp;diff=13548"/>
		<updated>2018-06-17T19:25:39Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* Possible candidates for future protocol decoders */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of &amp;#039;&amp;#039;&amp;#039;supported protocol decoders (PDs)&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;decoders which we might want to write in the future&amp;#039;&amp;#039;&amp;#039; (or users might want to contribute).&lt;br /&gt;
&lt;br /&gt;
See [[Protocol decoder API]] for details on how the decoders work in sigrok, and [[Protocol decoder HOWTO]] for a quick introduction about how to write your own decoders.&lt;br /&gt;
&lt;br /&gt;
== Supported protocol decoders ==&lt;br /&gt;
&lt;br /&gt;
Number of currently supported protocol decoders: &amp;#039;&amp;#039;&amp;#039;89&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot; class=&amp;quot;alternategrey sortable sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Protocol&lt;br /&gt;
!Category&lt;br /&gt;
!Input IDs&lt;br /&gt;
!Output IDs&lt;br /&gt;
!Status&lt;br /&gt;
!Full name&lt;br /&gt;
!Description&lt;br /&gt;
&lt;br /&gt;
{{pd|ac97|AC &amp;#039;97|Audio Codec &amp;#039;97|Audio and modem control for PC systems.|Audio|&amp;amp;mdash;|ac97|supported}}&lt;br /&gt;
{{pd|ade77xx|ADE77xx|Analog Devices ADE77xx|Poly phase multifunction energy metering IC protocol.|Sensors|spi|ade77xx|supported}}&lt;br /&gt;
{{pd|adf435x|ADF435x|Analog Devices ADF4350/1|Wideband synthesizer with integrated VCO.|RF|spi|adf435x|supported}}&lt;br /&gt;
{{pd|adns5020|ADNS-5020|Avago ADNS-5020 optical mouse sensor|Bidirectional command and data over an SPI-like protocol.|Sensors|spi|adns5020|supported}}&lt;br /&gt;
{{pd|am230x|AM230x/DHTxx/RHTxx|Aosong AM230x/DHTxx|Aosong AM230x/DHTxx/RHTxx humidity/temperature sensor protocol.|Sensors|&amp;amp;mdash;|am230x|supported}}&lt;br /&gt;
{{pd|arm_etmv3|ARM ETMv3|ARM Embedded Trace Macroblock|Decode ETM instruction trace packets.|Flash/debug|uart|arm_etmv3|supported}}&lt;br /&gt;
{{pd|arm_itm|ARM ITM|ARM Instrumentation Trace Macroblock|Trace data from Cortex-M / ARMv7m ITM module.|Flash/debug|uart|arm_itm|supported}}&lt;br /&gt;
{{pd|arm_tpiu|ARM TPIU|ARM Trace Port Interface Unit|Filter TPIU formatted trace data into separate streams.|Flash/debug|uart|uart|supported}}&lt;br /&gt;
{{pd|atsha204a|ATSHA204A|Microchip ATSHA204A|Microchip ATSHA204A CryptoAuthentication device.|Memory|i2c|atsha204a|supported}}&lt;br /&gt;
{{pd|aud|AUD|Advanced User Debugger|Renesas/Hitachi Advanced User Debugger (AUD) protocol.|Flash/debug|&amp;amp;mdash;|aud|supported}}&lt;br /&gt;
{{pd|avr_isp|AVR ISP|AVR in-system programming|Protocol for in-system programming Atmel AVR MCUs.|Flash/debug|spi|avr_isp|supported}}&lt;br /&gt;
{{pd|avr_pdi|AVR PDI|Atmel Program and Debug Interface|Atmel proprietary interface for the ATxmega MCU.|Flash/debug|&amp;amp;mdash;|avr_pdi|supported}}&lt;br /&gt;
{{pd|can|CAN|Controller Area Network|Field bus protocol for distributed realtime control.|Automotive|&amp;amp;mdash;|can|supported}}&lt;br /&gt;
{{pd|cfp|CFP|100 Gigabit C form-factor pluggable|100 Gigabit C form-factor pluggable (CFP) protocol.|Networking|mdio|&amp;amp;mdash;|supported}}&lt;br /&gt;
{{pd|counter|Counter|Edge counter|Count number of edges.|Misc|&amp;amp;mdash;|&amp;amp;mdash;|supported}}&lt;br /&gt;
{{pd|dali|DALI|Digital Addressable Lighting Interface|DALI lighting control protocol.|Lighting|&amp;amp;mdash;|dali|supported}}&lt;br /&gt;
{{pd|dcf77|DCF77|DCF77 time protocol|European longwave time signal (77.5kHz carrier signal).|Time signal|&amp;amp;mdash;|dcf77|supported}}&lt;br /&gt;
{{pd|dmx512|DMX512|Digital MultipleX 512|Professional lighting control protocol.|Lighting|&amp;amp;mdash;|dmx512|supported}}&lt;br /&gt;
{{pd|ds1307|DS1307|Dallas DS1307|Realtime clock module protocol.|RTC|i2c|ds1307|supported}}&lt;br /&gt;
{{pd|ds243x|DS243x|Maxim DS2432/DS2433|Maxim DS243x series 1-Wire EEPROM protocol.|Memory|onewire_network|ds243x|supported}}&lt;br /&gt;
{{pd|dsi|DSI|Digital Serial Interface|DSI lighting control protocol.|Lighting|&amp;amp;mdash;|dsi|supported}}&lt;br /&gt;
{{pd|edid|EDID|Extended Display Identification Data|Data structure describing display device capabilities.|PC|i2c|edid|supported}}&lt;br /&gt;
{{pd|eeprom24xx|24xx EEPROM|24xx I²C EEPROM|24xx series I²C EEPROM protocol.|Memory|i2c|eeprom24xx|supported}}&lt;br /&gt;
{{pd|eeprom93cxx|93Cxx EEPROM|93Cxx Microwire EEPROM|93Cxx series Microwire EEPROM protocol.|Memory|microwire|eeprom93cxx|supported}}&lt;br /&gt;
{{pd|em4100|EM4100|RFID EM4100|EM4100 100-150kHz RFID protocol.|RFID|&amp;amp;mdash;|em4100|supported}}&lt;br /&gt;
{{pd|em4305|EM4305|RFID EM4205/EM4305|EM4205/EM4305 100-150kHz RFID protocol.|RFID|&amp;amp;mdash;|em4305|supported}}&lt;br /&gt;
{{pd|gpib|GPIB|General Purpose Interface Bus|IEEE-488 GPIB / HPIB protocol.|Other|&amp;amp;mdash;|gpib|supported}}&lt;br /&gt;
{{pd|graycode|Gray code|Gray code and rotary encoder|Accumulate rotary encoder increments, provide timing statistics.|Misc|&amp;amp;mdash;|graycode|supported}}&lt;br /&gt;
{{pd|guess_bitrate|Guess bitrate|Guess bitrate/baudrate|Guess the bitrate/baudrate of a UART (or other) protocol.|Other|&amp;amp;mdash;|guess_bitrate|supported}}&lt;br /&gt;
{{pd|i2c|I2C|Inter-Integrated Circuit|Two-wire, multi-master, serial bus.|Embedded|&amp;amp;mdash;|i2c|supported}}&lt;br /&gt;
{{pd|i2cdemux|I2C demux|I2C demultiplexer|Demux I2C packets into per-slave-address streams.|Embedded|i2c|&amp;#039;&amp;#039;runtime decision&amp;#039;&amp;#039;|supported}}&lt;br /&gt;
{{pd|i2cfilter|I2C filter|I2C filter|Filter out addresses/directions in an I2C stream.|Embedded|i2c|i2c|supported}}&lt;br /&gt;
{{pd|i2s|I2S|Integrated Interchip Sound|Serial bus for connecting digital audio devices.|Audio|&amp;amp;mdash;|i2s|supported}}&lt;br /&gt;
{{pd|iec|IEC|Commodore bus|Commodore serial IEEE-488 (IEC) bus protocol.|Other|&amp;amp;mdash;|gpib|supported}}&lt;br /&gt;
{{pd|ir_nec|IR NEC|IR NEC|NEC infrared remote control protocol.|IR|&amp;amp;mdash;|ir_nec|supported}}&lt;br /&gt;
{{pd|ir_rc5|IR RC-5|IR RC-5|RC-5 infrared remote control protocol.|IR|&amp;amp;mdash;|ir_rc5|supported}}&lt;br /&gt;
{{pd|jitter|Jitter|Timing jitter calculation|Retrieves the timing jitter between two digital signals.|Misc|&amp;amp;mdash;|jitter|supported}}&lt;br /&gt;
{{pd|jtag|JTAG|Joint Test Action Group (IEEE 1149.1)|Protocol for testing, debugging, and flashing ICs.|Flash/debug|&amp;amp;mdash;|jtag|supported}}&lt;br /&gt;
{{pd|jtag_stm32|JTAG / STM32|Joint Test Action Group / ST STM32|ST STM32-specific JTAG protocol.|Flash/debug|jtag|jtag_stm32|supported}}&lt;br /&gt;
{{pd|lm75|LM75|National LM75|National LM75 (and compatibles) temperature sensor protocol.|Sensors|i2c|lm75|supported}}&lt;br /&gt;
{{pd|lpc|LPC|Low-Pin-Count|Protocol for low-bandwidth devices on PC mainboards.|PC|&amp;amp;mdash;|lpc|supported}}&lt;br /&gt;
{{pd|maple_bus|Maple bus|SEGA Maple bus|Maple bus peripheral protocol for SEGA Dreamcast.|Misc|&amp;amp;mdash;|maple_bus|supported}}&lt;br /&gt;
{{pd|max7219|MAX7219|Maxim MAX7219/MAX7221|8-digit LED display driver.|Display|spi|max7219|supported}}&lt;br /&gt;
{{pd|maxim_ds28ea00|DS28EA00|Maxim DS28EA00 1-Wire digital thermometer|1-Wire digital thermometer with Sequence Detect and PIO.|Sensors|onewire_network|maxim_ds28ea00|supported}}&lt;br /&gt;
{{pd|mcs48|MCS-48|Intel MCS-48|Intel MCS-48 external memory protocol.|CPU|&amp;amp;mdash;|mcs48|supported}}&lt;br /&gt;
{{pd|mdio|MDIO|Management Data Input/Output|Half-duplex sync serial bus for MII management between MAC and PHY.|Networking|&amp;amp;mdash;|mdio|supported}}&lt;br /&gt;
{{pd|microwire|Microwire|Microwire|3-wire, half-duplex, synchronous serial bus.|Embedded|&amp;amp;mdash;|microwire|supported}}&lt;br /&gt;
{{pd|midi|MIDI|Musical Instrument Digital Interface|Musical Instrument Digital Interface (MIDI) protocol.|Music|uart|midi|supported}}&lt;br /&gt;
{{pd|mlx90614|MLX90614|Melexis MLX90614|Infrared Thermometer protocol.|Sensors|i2c|mlx90614|supported}}&lt;br /&gt;
{{pd|modbus|Modbus|Modbus RTU over RS232/RS485|Modbus RTU protocol for industrial applications.|Misc|uart|modbus|supported}}&lt;br /&gt;
{{pd|morse|Morse|Morse code|Demodulated morse code protocol.|Misc|&amp;amp;mdash;|morse|supported}}&lt;br /&gt;
{{pd|mrf24j40|MRF24J40|Microchip MRF24J40|IEEE 802.15.4 2.4 GHz RF tranceiver chip.|RF|spi|mf24j40|supported}}&lt;br /&gt;
{{pd|mxc6225xu|MXC6225XU|MEMSIC MXC6225XU|Digital Thermal Orientation Sensor (DTOS) protocol.|Sensors|i2c|mxc6225xu|supported}}&lt;br /&gt;
{{pd|nrf24l01|nRF24L01(+)|Nordic Semiconductor nRF24L01/nRF24L01+|2.4GHz transceiver chip.|Wireless|spi|nrf24l01|supported}}&lt;br /&gt;
{{pd|nunchuk|Nunchuk|Nintendo Wii Nunchuk|Nintendo Wii Nunchuk controller protocol.|Other|i2c|nunchuk|supported}}&lt;br /&gt;
{{pd|onewire_link|1-Wire link layer|1-Wire serial communication bus (link layer)|Bidirectional, half-duplex, asynchronous serial bus.|Embedded|&amp;amp;mdash;|onewire_link|supported}}&lt;br /&gt;
{{pd|onewire_network|1-Wire network layer|1-Wire serial communication bus (network layer)|Bidirectional, half-duplex, asynchronous serial bus.|Embedded|onewire_link|onewire_network|supported}}&lt;br /&gt;
{{pd|pan1321|PAN1321|Panasonic PAN1321|Bluetooth RF module with Serial Port Profile (SPP).|Bluetooth|uart|pan1321|supported}}&lt;br /&gt;
{{pd|parallel|Parallel|Parallel sync bus|Generic parallel synchronous bus.|Misc|&amp;amp;mdash;|parallel|supported}}&lt;br /&gt;
{{pd|ps2|PS/2|PS/2|PS/2 keyboard/mouse interface.|PC|&amp;amp;mdash;|ps2|supported}}&lt;br /&gt;
{{pd|pwm|PWM|Pulse-width modulation|Analog level encoded in duty cycle percentage.|Misc|&amp;amp;mdash;|pwm|supported}}&lt;br /&gt;
{{pd|qi|Qi|Qi charger protocol|Async serial protocol for Qi charger receivers.|Misc|&amp;amp;mdash;|qi|supported}}&lt;br /&gt;
{{pd|rc_encode|RC encode|Remote control encoder|PT2262/HX2262/SC5262 remote control encoder protocol.|Wireless|&amp;amp;mdash;|&amp;amp;mdash;|supported}}&lt;br /&gt;
{{pd|rfm12|RFM12|RFM12 control protocol|HopeRF RFM12 wireless transceivers control protocol.|Wireless|spi|rfm12|supported}}&lt;br /&gt;
{{pd|rgb_led_spi|RGB LED (SPI)|RGB LED string decoder (SPI)|RGB LED string protocol (RGB values clocked over SPI).|LED|spi|rgb_led_spi|supported}}&lt;br /&gt;
{{pd|rgb_led_ws281x|RGB LED (WS281x)|RGB LED string decoder (WS281x)|RGB LED string protocol (WS281x).|LED|&amp;amp;mdash;|rgb_led_ws281x|supported}}&lt;br /&gt;
{{pd|rtc8564|RTC-8564|Epson RTC-8564 JE/NB|Realtime clock module protocol.|RTC|i2c|rtc8564|supported}}&lt;br /&gt;
{{pd|sda2506|SDA2506|Siemens SDA 2506-5|Serial nonvolatile 1-Kbit EEPROM.|Memory|&amp;amp;mdash;|sda2506|supported}}&lt;br /&gt;
{{pd|sdcard_sd|SD card (SD mode)|Secure Digital card (SD mode)|Secure Digital card (SD mode) low-level protocol.|Memory|&amp;amp;mdash;|sdcard_sd|supported}}&lt;br /&gt;
{{pd|sdcard_spi|SD card (SPI mode)|Secure Digital card (SPI mode)|Secure Digital card (SPI mode) low-level protocol.|Memory|spi|sdcard_spi|supported}}&lt;br /&gt;
{{pd|spdif|S/PDIF|Sony/Philips Digital Interface Format|Serial bus for connecting digital audio devices.|Audio|&amp;amp;mdash;|spdif|supported}}&lt;br /&gt;
{{pd|spi|SPI|Serial Peripheral Interface|Full-duplex, synchronous, serial bus.|Embedded|&amp;amp;mdash;|spi|supported}}&lt;br /&gt;
{{pd|spiflash|SPI flash|SPI flash chips|xx25 series SPI (NOR) flash chip protocol.|SPI flash|spi|spiflash|supported}}&lt;br /&gt;
{{pd|ssi32|SSI32|Synchronous Serial Interface (32bit)|Synchronous Serial Interface (32bit) protocol.|Misc|spi|ssi32|supported}}&lt;br /&gt;
{{pd|st7735|ST7735|Sitronix ST7735|Sitronix ST7735 TFT controller protocol.|Display|&amp;amp;mdash;|st7735|supported}}&lt;br /&gt;
{{pd|stepper_motor|Stepper motor|Stepper motor position / speed|Absolute position and movement speed from step/dir.|Motors|&amp;amp;mdash;|stepper_motor|supported}}&lt;br /&gt;
{{pd|swd|SWD|Serial Wire Debug|Two-wire protocol for debug access to ARM CPUs.|Flash/debug|&amp;amp;mdash;|swd|supported}}&lt;br /&gt;
{{pd|t55xx|T55xx|RFID T5xx|T55xx 100-150kHz RFID protocol.|RFID|&amp;amp;mdash;|t55xx|supported}}&lt;br /&gt;
{{pd|tca6408a|TI TCA6408A|Texas Instruments TCA6408A|Texas Instruments TCA6408A 8-bit I²C I/O expander.|I/O expander|i2c|tca6408a|supported}}&lt;br /&gt;
{{pd|timing|Timing|Timing calculation|Calculate time between edges.|Misc|&amp;amp;mdash;|timing|supported}}&lt;br /&gt;
{{pd|tlc5620|TI TLC5620|Texas Instruments TLC5620|Texas Instruments TLC5620 8-bit quad DAC.|DAC|&amp;amp;mdash;|tlc5620|supported}}&lt;br /&gt;
{{pd|uart|UART|Universal Asynchronous Receiver/Transmitter|Asynchronous, serial bus.|Embedded|&amp;amp;mdash;|uart|supported}}&lt;br /&gt;
{{pd|usb_packet|USB packet|Universal Serial Bus (LS/FS) packet|USB (low-speed and full-speed) packet protocol.|USB|usb_signalling|usb_packet|supported}}&lt;br /&gt;
{{pd|usb_power_delivery|USB PD|USB Power Delivery|USB Power Delivery protocol.|USB|&amp;amp;mdash;|usb_pd|supported}}&lt;br /&gt;
{{pd|usb_request|USB request|Universal Serial Bus (LS/FS) transaction/request|USB (low-speed and full-speed) transaction/request protocol.|USB|usb_packet|usb_request|supported}}&lt;br /&gt;
{{pd|usb_signalling|USB signalling|Universal Serial Bus (LS/FS) signalling|USB (low-speed and full-speed) signalling protocol.|USB|&amp;amp;mdash;|usb_signalling|supported}}&lt;br /&gt;
{{pd|wiegand|Wiegand|Wiegand interface|Wiegand interface for electronic entry systems.|RFID|&amp;amp;mdash;|wiegand|supported}}&lt;br /&gt;
{{pd|xfp|XFP|10 Gigabit Small Form Factor Pluggable Module (XFP)|Data structure describing device capabilities.|Networking|i2c|xfp|supported}}&lt;br /&gt;
{{pd|z80|Z80|Zilog Z80 CPU|Zilog Z80 microprocessor disassembly.|CPU|&amp;amp;mdash;|z80|supported}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible candidates for future protocol decoders ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot; class=&amp;quot;alternategrey sortable sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Protocol&lt;br /&gt;
!Category&lt;br /&gt;
!Input ID(s)&lt;br /&gt;
!Output ID(s)&lt;br /&gt;
!Status&lt;br /&gt;
!Description&lt;br /&gt;
!Comments&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SA8807A&lt;br /&gt;
| Displays&lt;br /&gt;
| spi&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| SPI-attached LCD. Datasheet: [http://pdf1.alldatasheet.com/datasheet-pdf/view/36922/SAMES/SA8807A.html Sames SA8807A].&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EA eDIPTFT43-A&lt;br /&gt;
| Displays&lt;br /&gt;
| i2c&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| I2C-attached LCD. Datasheet: [http://www.lcd-module.de/pdf/grafik/ediptft43-a.pdf EA eDIPTFT43-A].&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Analog Devices AD7291&lt;br /&gt;
| ADC&lt;br /&gt;
| i2c&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| I2C-attached ADC. Datasheet: [http://pdf1.alldatasheet.com/datasheet-pdf/view/318172/AD/AD7291.html Analog Devices AD7291].&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Analog Devices ADS1258&lt;br /&gt;
| ADC&lt;br /&gt;
| spi&lt;br /&gt;
| ads1258&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 0%&lt;br /&gt;
| SPI-attached ADC.&lt;br /&gt;
| Planned (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Microchip MCP3901&lt;br /&gt;
| ADC&lt;br /&gt;
| spi&lt;br /&gt;
| mcp3901&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 0%&lt;br /&gt;
| Can be controlled via a parallel protocol, or SPI, or I2C.&lt;br /&gt;
| Planned (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| JTAG / TMPA9xx&lt;br /&gt;
| Flash/debug&lt;br /&gt;
| jtag&lt;br /&gt;
| jtag_tmpa9xx&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Toshiba TMPA9xx specific JTAG protocol details.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB transfer&lt;br /&gt;
| USB&lt;br /&gt;
| usb_request&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB / HID&lt;br /&gt;
| USB&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| usb_hid&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB / CDC&lt;br /&gt;
| USB&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| usb_cdc&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB / USBTMC&lt;br /&gt;
| USB&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| usb_usbtmc&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Dallas DS1985&lt;br /&gt;
| Other&lt;br /&gt;
| onewire_network&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 0%&lt;br /&gt;
| Dallas DS1985 iButton (1-Wire) device.&lt;br /&gt;
| Planned (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| UNI/O&lt;br /&gt;
| Embedded&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Synchronous_Serial_Interface SSI]&lt;br /&gt;
| Embedded&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Synchronous Serial Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| CompactFlash&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MMC&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Memory Stick&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SmartMedia&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| xD-Picture Card&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/ISO/IEC_7816 ISO 7816]&lt;br /&gt;
| Smartcards&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FlexRay&lt;br /&gt;
| Automotive&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Flexray FlexRay] is an automotive network communications protocol.&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| LIN&lt;br /&gt;
| Automotive&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Local_Interconnect_Network LIN] (Local Interconnect Network) is an automotive bus standard.&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| AVR TPI&lt;br /&gt;
| Flash/debug&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Atmel Tiny Programming Interface (TPI) protocol.&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FWH&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISA&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| PCI&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SMBus&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| IDE&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SCSI&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Platform_Environment_Control_Interface PECI]&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Platform Environment Control Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/SVID SVID]&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Serial Voltage Identification&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:mfm|MFM]]&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 90%&lt;br /&gt;
| Floppy disk FM and [https://en.wikipedia.org/wiki/Modified_Frequency_Modulation MFM].&lt;br /&gt;
| Work in progress (David Wiens).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| HD Audio&lt;br /&gt;
| Audio&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Nokia NRC17&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Sony SIRC&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Philips RC-6&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Philips RC-MM&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Philips RECS80&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Infrared_Data_Association IrDA]&lt;br /&gt;
| Misc&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| HD44780&lt;br /&gt;
| Displays&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [http://en.wikipedia.org/wiki/HD44780_Character_LCD HD44780 character LCD] protocol&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 7-segment display&lt;br /&gt;
| Displays&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:Pcf8814|PCF8814]]&lt;br /&gt;
| Displays&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| pcf8814&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 50%&lt;br /&gt;
| Philips PCF8814 65 x 96 pixels matrix LCD driver&lt;br /&gt;
| Work in progress (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:Pcf8814_lcd|PCF8814 LCD]]&lt;br /&gt;
| Displays&lt;br /&gt;
| pcf8814&lt;br /&gt;
| pcf8814_lcd&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 50%&lt;br /&gt;
| Philips PCF8814 65 x 96 pixels matrix LCD driver&lt;br /&gt;
| Work in progress (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/RDM_%28lighting%29 RDM]&lt;br /&gt;
| Industrial Lighting&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| rdm&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/NMEA_0183 NMEA 0183]&lt;br /&gt;
| GPS&lt;br /&gt;
| uart&lt;br /&gt;
| nmea0183&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:Nmea2000|NMEA2000]]&lt;br /&gt;
| Marine&lt;br /&gt;
| can&lt;br /&gt;
| nmea2000&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [https://en.wikipedia.org/wiki/NMEA_2000 NMEA 2000 Wikipedia page]&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Digital_Command_Control DCC]&lt;br /&gt;
| Trains&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| dcc&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Train_Communication_Network MVB]&lt;br /&gt;
| Trains&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mvb&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Multifunction Vehicle Bus&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Train_Communication_Network WTB]&lt;br /&gt;
| Trains&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| wtb&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Wire Train Bus&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/C-Bus_%28protocol%29 C-Bus]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| cbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/X10_%28industry_standard%29 X10]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| x10&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/LonWorks LonWorks]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| lonworks&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/S-Bus S-Bus]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| sbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Meter-Bus M-Bus]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Modbus Modbus ASCII]&lt;br /&gt;
| Automation&lt;br /&gt;
| uart&lt;br /&gt;
| modbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Modbus Modbus TCP]&lt;br /&gt;
| Automation&lt;br /&gt;
| ip&lt;br /&gt;
| modbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Highway_Addressable_Remote_Transducer_Protocol HART protocol]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| hart&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/INTERBUS INTERBUS]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| interbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/DirectNET_Protocol DirectNET]&lt;br /&gt;
| Automation&lt;br /&gt;
| uart&lt;br /&gt;
| directnet&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/KNX_%28standard%29 KNX]&lt;br /&gt;
| Automation&lt;br /&gt;
| various&lt;br /&gt;
| knx&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Bacnet BACnet]&lt;br /&gt;
| Automation&lt;br /&gt;
| &lt;br /&gt;
| bacnet&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/OpenTherm OpenTherm]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| opentherm&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/EBUS_%28serial_buses%29 EBUS]&lt;br /&gt;
| Automation&lt;br /&gt;
| uart&lt;br /&gt;
| ebus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Attachment_Unit_Interface AUI]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| aui&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Attachment Unit Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Medium_Dependent_Interface MDI]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mdi&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Medium Dependent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Media_Independent_Interface MII]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mii&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Media Independent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Gigabit_Media_Independent_Interface#Gigabit_Media_Independent_Interface GMII]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| gmii&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Gigabit Media Independent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/10_Gigabit_Media_Independent_Interface#10_Gigabit_Media_Independent_Interface XGMII]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| xgmii&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| 10 Gigabit Media Independent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:esp8266|ESP8266]]&lt;br /&gt;
| Wireless&lt;br /&gt;
| uart&lt;br /&gt;
| esp8266&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| WiFi Serial Transceiver&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:cc1101|TI CC1101]]&lt;br /&gt;
| Wireless&lt;br /&gt;
| spi&lt;br /&gt;
| cc1101&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 1%&lt;br /&gt;
| SPI-attached wireless controller for 315/433/868/915 MHz ISM bands. [http://www.ti.com/lit/ds/symlink/cc1101.pdf Datasheet]&lt;br /&gt;
| Work in progress ([[User:Rohieb|rohieb]])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:tmds|TMDS (HDMI / DVI Pixel Data)]]&lt;br /&gt;
| Display&lt;br /&gt;
| tmds&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 1%&lt;br /&gt;
| https://github.com/mithro/tmds_encoding&lt;br /&gt;
| Work in progress ([[User:Mithro|mithro]])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:Easymatic|Easymatic]]&lt;br /&gt;
| Home automation&lt;br /&gt;
| uart&lt;br /&gt;
| easymatic&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 10%&lt;br /&gt;
| &lt;br /&gt;
| Work in progress (Platypus)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:DDC/CI|DDC/CI]]&lt;br /&gt;
| PC&lt;br /&gt;
| i2c&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:CEC|CEC]]&lt;br /&gt;
| Misc&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Kenwood VH&lt;br /&gt;
| Misc&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 50%&lt;br /&gt;
| SYSTEM CONTROL protocol used by Kenwood&amp;#039;s VH HiFi-system&lt;br /&gt;
| In progress: https://github.com/kripton/libsigrokdecode/compare/kenwood_vh&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| IEC 61131-9&lt;br /&gt;
| Industrial&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &amp;quot;Single-drop digital communication interface for small sensors and actuators (SDCI, marketed as IO-Link)&amp;quot; https://en.wikipedia.org/wiki/IEC_61131&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:Ook|Ook]]&lt;br /&gt;
| Wireless&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| ook&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 90%&lt;br /&gt;
| Decodes On Off Keying waveforms which are frequently used for remote control protocols &lt;br /&gt;
| Work in progress ([[User:SteveR|stever]])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:Ook_oregon|Ook_oregon]]&lt;br /&gt;
| Wireless&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| ook_oregon&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 90%&lt;br /&gt;
| Decodes Oregon Scientific signals for weather sensors &lt;br /&gt;
| Work in progress ([[User:SteveR|stever]])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:Ook_vis|Ook_vis]]&lt;br /&gt;
| Wireless&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| ook_vis&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 90%&lt;br /&gt;
| On Off Keying Visualiser &lt;br /&gt;
| Work in progress ([[User:SteveR|stever]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoders&amp;diff=13547</id>
		<title>Protocol decoders</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoders&amp;diff=13547"/>
		<updated>2018-06-17T19:22:31Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* Possible candidates for future protocol decoders */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of &amp;#039;&amp;#039;&amp;#039;supported protocol decoders (PDs)&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;decoders which we might want to write in the future&amp;#039;&amp;#039;&amp;#039; (or users might want to contribute).&lt;br /&gt;
&lt;br /&gt;
See [[Protocol decoder API]] for details on how the decoders work in sigrok, and [[Protocol decoder HOWTO]] for a quick introduction about how to write your own decoders.&lt;br /&gt;
&lt;br /&gt;
== Supported protocol decoders ==&lt;br /&gt;
&lt;br /&gt;
Number of currently supported protocol decoders: &amp;#039;&amp;#039;&amp;#039;89&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot; class=&amp;quot;alternategrey sortable sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Protocol&lt;br /&gt;
!Category&lt;br /&gt;
!Input IDs&lt;br /&gt;
!Output IDs&lt;br /&gt;
!Status&lt;br /&gt;
!Full name&lt;br /&gt;
!Description&lt;br /&gt;
&lt;br /&gt;
{{pd|ac97|AC &amp;#039;97|Audio Codec &amp;#039;97|Audio and modem control for PC systems.|Audio|&amp;amp;mdash;|ac97|supported}}&lt;br /&gt;
{{pd|ade77xx|ADE77xx|Analog Devices ADE77xx|Poly phase multifunction energy metering IC protocol.|Sensors|spi|ade77xx|supported}}&lt;br /&gt;
{{pd|adf435x|ADF435x|Analog Devices ADF4350/1|Wideband synthesizer with integrated VCO.|RF|spi|adf435x|supported}}&lt;br /&gt;
{{pd|adns5020|ADNS-5020|Avago ADNS-5020 optical mouse sensor|Bidirectional command and data over an SPI-like protocol.|Sensors|spi|adns5020|supported}}&lt;br /&gt;
{{pd|am230x|AM230x/DHTxx/RHTxx|Aosong AM230x/DHTxx|Aosong AM230x/DHTxx/RHTxx humidity/temperature sensor protocol.|Sensors|&amp;amp;mdash;|am230x|supported}}&lt;br /&gt;
{{pd|arm_etmv3|ARM ETMv3|ARM Embedded Trace Macroblock|Decode ETM instruction trace packets.|Flash/debug|uart|arm_etmv3|supported}}&lt;br /&gt;
{{pd|arm_itm|ARM ITM|ARM Instrumentation Trace Macroblock|Trace data from Cortex-M / ARMv7m ITM module.|Flash/debug|uart|arm_itm|supported}}&lt;br /&gt;
{{pd|arm_tpiu|ARM TPIU|ARM Trace Port Interface Unit|Filter TPIU formatted trace data into separate streams.|Flash/debug|uart|uart|supported}}&lt;br /&gt;
{{pd|atsha204a|ATSHA204A|Microchip ATSHA204A|Microchip ATSHA204A CryptoAuthentication device.|Memory|i2c|atsha204a|supported}}&lt;br /&gt;
{{pd|aud|AUD|Advanced User Debugger|Renesas/Hitachi Advanced User Debugger (AUD) protocol.|Flash/debug|&amp;amp;mdash;|aud|supported}}&lt;br /&gt;
{{pd|avr_isp|AVR ISP|AVR in-system programming|Protocol for in-system programming Atmel AVR MCUs.|Flash/debug|spi|avr_isp|supported}}&lt;br /&gt;
{{pd|avr_pdi|AVR PDI|Atmel Program and Debug Interface|Atmel proprietary interface for the ATxmega MCU.|Flash/debug|&amp;amp;mdash;|avr_pdi|supported}}&lt;br /&gt;
{{pd|can|CAN|Controller Area Network|Field bus protocol for distributed realtime control.|Automotive|&amp;amp;mdash;|can|supported}}&lt;br /&gt;
{{pd|cfp|CFP|100 Gigabit C form-factor pluggable|100 Gigabit C form-factor pluggable (CFP) protocol.|Networking|mdio|&amp;amp;mdash;|supported}}&lt;br /&gt;
{{pd|counter|Counter|Edge counter|Count number of edges.|Misc|&amp;amp;mdash;|&amp;amp;mdash;|supported}}&lt;br /&gt;
{{pd|dali|DALI|Digital Addressable Lighting Interface|DALI lighting control protocol.|Lighting|&amp;amp;mdash;|dali|supported}}&lt;br /&gt;
{{pd|dcf77|DCF77|DCF77 time protocol|European longwave time signal (77.5kHz carrier signal).|Time signal|&amp;amp;mdash;|dcf77|supported}}&lt;br /&gt;
{{pd|dmx512|DMX512|Digital MultipleX 512|Professional lighting control protocol.|Lighting|&amp;amp;mdash;|dmx512|supported}}&lt;br /&gt;
{{pd|ds1307|DS1307|Dallas DS1307|Realtime clock module protocol.|RTC|i2c|ds1307|supported}}&lt;br /&gt;
{{pd|ds243x|DS243x|Maxim DS2432/DS2433|Maxim DS243x series 1-Wire EEPROM protocol.|Memory|onewire_network|ds243x|supported}}&lt;br /&gt;
{{pd|dsi|DSI|Digital Serial Interface|DSI lighting control protocol.|Lighting|&amp;amp;mdash;|dsi|supported}}&lt;br /&gt;
{{pd|edid|EDID|Extended Display Identification Data|Data structure describing display device capabilities.|PC|i2c|edid|supported}}&lt;br /&gt;
{{pd|eeprom24xx|24xx EEPROM|24xx I²C EEPROM|24xx series I²C EEPROM protocol.|Memory|i2c|eeprom24xx|supported}}&lt;br /&gt;
{{pd|eeprom93cxx|93Cxx EEPROM|93Cxx Microwire EEPROM|93Cxx series Microwire EEPROM protocol.|Memory|microwire|eeprom93cxx|supported}}&lt;br /&gt;
{{pd|em4100|EM4100|RFID EM4100|EM4100 100-150kHz RFID protocol.|RFID|&amp;amp;mdash;|em4100|supported}}&lt;br /&gt;
{{pd|em4305|EM4305|RFID EM4205/EM4305|EM4205/EM4305 100-150kHz RFID protocol.|RFID|&amp;amp;mdash;|em4305|supported}}&lt;br /&gt;
{{pd|gpib|GPIB|General Purpose Interface Bus|IEEE-488 GPIB / HPIB protocol.|Other|&amp;amp;mdash;|gpib|supported}}&lt;br /&gt;
{{pd|graycode|Gray code|Gray code and rotary encoder|Accumulate rotary encoder increments, provide timing statistics.|Misc|&amp;amp;mdash;|graycode|supported}}&lt;br /&gt;
{{pd|guess_bitrate|Guess bitrate|Guess bitrate/baudrate|Guess the bitrate/baudrate of a UART (or other) protocol.|Other|&amp;amp;mdash;|guess_bitrate|supported}}&lt;br /&gt;
{{pd|i2c|I2C|Inter-Integrated Circuit|Two-wire, multi-master, serial bus.|Embedded|&amp;amp;mdash;|i2c|supported}}&lt;br /&gt;
{{pd|i2cdemux|I2C demux|I2C demultiplexer|Demux I2C packets into per-slave-address streams.|Embedded|i2c|&amp;#039;&amp;#039;runtime decision&amp;#039;&amp;#039;|supported}}&lt;br /&gt;
{{pd|i2cfilter|I2C filter|I2C filter|Filter out addresses/directions in an I2C stream.|Embedded|i2c|i2c|supported}}&lt;br /&gt;
{{pd|i2s|I2S|Integrated Interchip Sound|Serial bus for connecting digital audio devices.|Audio|&amp;amp;mdash;|i2s|supported}}&lt;br /&gt;
{{pd|iec|IEC|Commodore bus|Commodore serial IEEE-488 (IEC) bus protocol.|Other|&amp;amp;mdash;|gpib|supported}}&lt;br /&gt;
{{pd|ir_nec|IR NEC|IR NEC|NEC infrared remote control protocol.|IR|&amp;amp;mdash;|ir_nec|supported}}&lt;br /&gt;
{{pd|ir_rc5|IR RC-5|IR RC-5|RC-5 infrared remote control protocol.|IR|&amp;amp;mdash;|ir_rc5|supported}}&lt;br /&gt;
{{pd|jitter|Jitter|Timing jitter calculation|Retrieves the timing jitter between two digital signals.|Misc|&amp;amp;mdash;|jitter|supported}}&lt;br /&gt;
{{pd|jtag|JTAG|Joint Test Action Group (IEEE 1149.1)|Protocol for testing, debugging, and flashing ICs.|Flash/debug|&amp;amp;mdash;|jtag|supported}}&lt;br /&gt;
{{pd|jtag_stm32|JTAG / STM32|Joint Test Action Group / ST STM32|ST STM32-specific JTAG protocol.|Flash/debug|jtag|jtag_stm32|supported}}&lt;br /&gt;
{{pd|lm75|LM75|National LM75|National LM75 (and compatibles) temperature sensor protocol.|Sensors|i2c|lm75|supported}}&lt;br /&gt;
{{pd|lpc|LPC|Low-Pin-Count|Protocol for low-bandwidth devices on PC mainboards.|PC|&amp;amp;mdash;|lpc|supported}}&lt;br /&gt;
{{pd|maple_bus|Maple bus|SEGA Maple bus|Maple bus peripheral protocol for SEGA Dreamcast.|Misc|&amp;amp;mdash;|maple_bus|supported}}&lt;br /&gt;
{{pd|max7219|MAX7219|Maxim MAX7219/MAX7221|8-digit LED display driver.|Display|spi|max7219|supported}}&lt;br /&gt;
{{pd|maxim_ds28ea00|DS28EA00|Maxim DS28EA00 1-Wire digital thermometer|1-Wire digital thermometer with Sequence Detect and PIO.|Sensors|onewire_network|maxim_ds28ea00|supported}}&lt;br /&gt;
{{pd|mcs48|MCS-48|Intel MCS-48|Intel MCS-48 external memory protocol.|CPU|&amp;amp;mdash;|mcs48|supported}}&lt;br /&gt;
{{pd|mdio|MDIO|Management Data Input/Output|Half-duplex sync serial bus for MII management between MAC and PHY.|Networking|&amp;amp;mdash;|mdio|supported}}&lt;br /&gt;
{{pd|microwire|Microwire|Microwire|3-wire, half-duplex, synchronous serial bus.|Embedded|&amp;amp;mdash;|microwire|supported}}&lt;br /&gt;
{{pd|midi|MIDI|Musical Instrument Digital Interface|Musical Instrument Digital Interface (MIDI) protocol.|Music|uart|midi|supported}}&lt;br /&gt;
{{pd|mlx90614|MLX90614|Melexis MLX90614|Infrared Thermometer protocol.|Sensors|i2c|mlx90614|supported}}&lt;br /&gt;
{{pd|modbus|Modbus|Modbus RTU over RS232/RS485|Modbus RTU protocol for industrial applications.|Misc|uart|modbus|supported}}&lt;br /&gt;
{{pd|morse|Morse|Morse code|Demodulated morse code protocol.|Misc|&amp;amp;mdash;|morse|supported}}&lt;br /&gt;
{{pd|mrf24j40|MRF24J40|Microchip MRF24J40|IEEE 802.15.4 2.4 GHz RF tranceiver chip.|RF|spi|mf24j40|supported}}&lt;br /&gt;
{{pd|mxc6225xu|MXC6225XU|MEMSIC MXC6225XU|Digital Thermal Orientation Sensor (DTOS) protocol.|Sensors|i2c|mxc6225xu|supported}}&lt;br /&gt;
{{pd|nrf24l01|nRF24L01(+)|Nordic Semiconductor nRF24L01/nRF24L01+|2.4GHz transceiver chip.|Wireless|spi|nrf24l01|supported}}&lt;br /&gt;
{{pd|nunchuk|Nunchuk|Nintendo Wii Nunchuk|Nintendo Wii Nunchuk controller protocol.|Other|i2c|nunchuk|supported}}&lt;br /&gt;
{{pd|onewire_link|1-Wire link layer|1-Wire serial communication bus (link layer)|Bidirectional, half-duplex, asynchronous serial bus.|Embedded|&amp;amp;mdash;|onewire_link|supported}}&lt;br /&gt;
{{pd|onewire_network|1-Wire network layer|1-Wire serial communication bus (network layer)|Bidirectional, half-duplex, asynchronous serial bus.|Embedded|onewire_link|onewire_network|supported}}&lt;br /&gt;
{{pd|pan1321|PAN1321|Panasonic PAN1321|Bluetooth RF module with Serial Port Profile (SPP).|Bluetooth|uart|pan1321|supported}}&lt;br /&gt;
{{pd|parallel|Parallel|Parallel sync bus|Generic parallel synchronous bus.|Misc|&amp;amp;mdash;|parallel|supported}}&lt;br /&gt;
{{pd|ps2|PS/2|PS/2|PS/2 keyboard/mouse interface.|PC|&amp;amp;mdash;|ps2|supported}}&lt;br /&gt;
{{pd|pwm|PWM|Pulse-width modulation|Analog level encoded in duty cycle percentage.|Misc|&amp;amp;mdash;|pwm|supported}}&lt;br /&gt;
{{pd|qi|Qi|Qi charger protocol|Async serial protocol for Qi charger receivers.|Misc|&amp;amp;mdash;|qi|supported}}&lt;br /&gt;
{{pd|rc_encode|RC encode|Remote control encoder|PT2262/HX2262/SC5262 remote control encoder protocol.|Wireless|&amp;amp;mdash;|&amp;amp;mdash;|supported}}&lt;br /&gt;
{{pd|rfm12|RFM12|RFM12 control protocol|HopeRF RFM12 wireless transceivers control protocol.|Wireless|spi|rfm12|supported}}&lt;br /&gt;
{{pd|rgb_led_spi|RGB LED (SPI)|RGB LED string decoder (SPI)|RGB LED string protocol (RGB values clocked over SPI).|LED|spi|rgb_led_spi|supported}}&lt;br /&gt;
{{pd|rgb_led_ws281x|RGB LED (WS281x)|RGB LED string decoder (WS281x)|RGB LED string protocol (WS281x).|LED|&amp;amp;mdash;|rgb_led_ws281x|supported}}&lt;br /&gt;
{{pd|rtc8564|RTC-8564|Epson RTC-8564 JE/NB|Realtime clock module protocol.|RTC|i2c|rtc8564|supported}}&lt;br /&gt;
{{pd|sda2506|SDA2506|Siemens SDA 2506-5|Serial nonvolatile 1-Kbit EEPROM.|Memory|&amp;amp;mdash;|sda2506|supported}}&lt;br /&gt;
{{pd|sdcard_sd|SD card (SD mode)|Secure Digital card (SD mode)|Secure Digital card (SD mode) low-level protocol.|Memory|&amp;amp;mdash;|sdcard_sd|supported}}&lt;br /&gt;
{{pd|sdcard_spi|SD card (SPI mode)|Secure Digital card (SPI mode)|Secure Digital card (SPI mode) low-level protocol.|Memory|spi|sdcard_spi|supported}}&lt;br /&gt;
{{pd|spdif|S/PDIF|Sony/Philips Digital Interface Format|Serial bus for connecting digital audio devices.|Audio|&amp;amp;mdash;|spdif|supported}}&lt;br /&gt;
{{pd|spi|SPI|Serial Peripheral Interface|Full-duplex, synchronous, serial bus.|Embedded|&amp;amp;mdash;|spi|supported}}&lt;br /&gt;
{{pd|spiflash|SPI flash|SPI flash chips|xx25 series SPI (NOR) flash chip protocol.|SPI flash|spi|spiflash|supported}}&lt;br /&gt;
{{pd|ssi32|SSI32|Synchronous Serial Interface (32bit)|Synchronous Serial Interface (32bit) protocol.|Misc|spi|ssi32|supported}}&lt;br /&gt;
{{pd|st7735|ST7735|Sitronix ST7735|Sitronix ST7735 TFT controller protocol.|Display|&amp;amp;mdash;|st7735|supported}}&lt;br /&gt;
{{pd|stepper_motor|Stepper motor|Stepper motor position / speed|Absolute position and movement speed from step/dir.|Motors|&amp;amp;mdash;|stepper_motor|supported}}&lt;br /&gt;
{{pd|swd|SWD|Serial Wire Debug|Two-wire protocol for debug access to ARM CPUs.|Flash/debug|&amp;amp;mdash;|swd|supported}}&lt;br /&gt;
{{pd|t55xx|T55xx|RFID T5xx|T55xx 100-150kHz RFID protocol.|RFID|&amp;amp;mdash;|t55xx|supported}}&lt;br /&gt;
{{pd|tca6408a|TI TCA6408A|Texas Instruments TCA6408A|Texas Instruments TCA6408A 8-bit I²C I/O expander.|I/O expander|i2c|tca6408a|supported}}&lt;br /&gt;
{{pd|timing|Timing|Timing calculation|Calculate time between edges.|Misc|&amp;amp;mdash;|timing|supported}}&lt;br /&gt;
{{pd|tlc5620|TI TLC5620|Texas Instruments TLC5620|Texas Instruments TLC5620 8-bit quad DAC.|DAC|&amp;amp;mdash;|tlc5620|supported}}&lt;br /&gt;
{{pd|uart|UART|Universal Asynchronous Receiver/Transmitter|Asynchronous, serial bus.|Embedded|&amp;amp;mdash;|uart|supported}}&lt;br /&gt;
{{pd|usb_packet|USB packet|Universal Serial Bus (LS/FS) packet|USB (low-speed and full-speed) packet protocol.|USB|usb_signalling|usb_packet|supported}}&lt;br /&gt;
{{pd|usb_power_delivery|USB PD|USB Power Delivery|USB Power Delivery protocol.|USB|&amp;amp;mdash;|usb_pd|supported}}&lt;br /&gt;
{{pd|usb_request|USB request|Universal Serial Bus (LS/FS) transaction/request|USB (low-speed and full-speed) transaction/request protocol.|USB|usb_packet|usb_request|supported}}&lt;br /&gt;
{{pd|usb_signalling|USB signalling|Universal Serial Bus (LS/FS) signalling|USB (low-speed and full-speed) signalling protocol.|USB|&amp;amp;mdash;|usb_signalling|supported}}&lt;br /&gt;
{{pd|wiegand|Wiegand|Wiegand interface|Wiegand interface for electronic entry systems.|RFID|&amp;amp;mdash;|wiegand|supported}}&lt;br /&gt;
{{pd|xfp|XFP|10 Gigabit Small Form Factor Pluggable Module (XFP)|Data structure describing device capabilities.|Networking|i2c|xfp|supported}}&lt;br /&gt;
{{pd|z80|Z80|Zilog Z80 CPU|Zilog Z80 microprocessor disassembly.|CPU|&amp;amp;mdash;|z80|supported}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible candidates for future protocol decoders ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot; class=&amp;quot;alternategrey sortable sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Protocol&lt;br /&gt;
!Category&lt;br /&gt;
!Input ID(s)&lt;br /&gt;
!Output ID(s)&lt;br /&gt;
!Status&lt;br /&gt;
!Description&lt;br /&gt;
!Comments&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SA8807A&lt;br /&gt;
| Displays&lt;br /&gt;
| spi&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| SPI-attached LCD. Datasheet: [http://pdf1.alldatasheet.com/datasheet-pdf/view/36922/SAMES/SA8807A.html Sames SA8807A].&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EA eDIPTFT43-A&lt;br /&gt;
| Displays&lt;br /&gt;
| i2c&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| I2C-attached LCD. Datasheet: [http://www.lcd-module.de/pdf/grafik/ediptft43-a.pdf EA eDIPTFT43-A].&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Analog Devices AD7291&lt;br /&gt;
| ADC&lt;br /&gt;
| i2c&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| I2C-attached ADC. Datasheet: [http://pdf1.alldatasheet.com/datasheet-pdf/view/318172/AD/AD7291.html Analog Devices AD7291].&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Analog Devices ADS1258&lt;br /&gt;
| ADC&lt;br /&gt;
| spi&lt;br /&gt;
| ads1258&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 0%&lt;br /&gt;
| SPI-attached ADC.&lt;br /&gt;
| Planned (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Microchip MCP3901&lt;br /&gt;
| ADC&lt;br /&gt;
| spi&lt;br /&gt;
| mcp3901&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 0%&lt;br /&gt;
| Can be controlled via a parallel protocol, or SPI, or I2C.&lt;br /&gt;
| Planned (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| JTAG / TMPA9xx&lt;br /&gt;
| Flash/debug&lt;br /&gt;
| jtag&lt;br /&gt;
| jtag_tmpa9xx&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Toshiba TMPA9xx specific JTAG protocol details.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB transfer&lt;br /&gt;
| USB&lt;br /&gt;
| usb_request&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB / HID&lt;br /&gt;
| USB&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| usb_hid&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB / CDC&lt;br /&gt;
| USB&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| usb_cdc&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB / USBTMC&lt;br /&gt;
| USB&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| usb_usbtmc&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Dallas DS1985&lt;br /&gt;
| Other&lt;br /&gt;
| onewire_network&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 0%&lt;br /&gt;
| Dallas DS1985 iButton (1-Wire) device.&lt;br /&gt;
| Planned (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| UNI/O&lt;br /&gt;
| Embedded&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Synchronous_Serial_Interface SSI]&lt;br /&gt;
| Embedded&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Synchronous Serial Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| CompactFlash&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MMC&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Memory Stick&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SmartMedia&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| xD-Picture Card&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/ISO/IEC_7816 ISO 7816]&lt;br /&gt;
| Smartcards&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FlexRay&lt;br /&gt;
| Automotive&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Flexray FlexRay] is an automotive network communications protocol.&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| LIN&lt;br /&gt;
| Automotive&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Local_Interconnect_Network LIN] (Local Interconnect Network) is an automotive bus standard.&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| AVR TPI&lt;br /&gt;
| Flash/debug&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Atmel Tiny Programming Interface (TPI) protocol.&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FWH&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISA&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| PCI&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SMBus&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| IDE&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SCSI&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Platform_Environment_Control_Interface PECI]&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Platform Environment Control Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/SVID SVID]&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Serial Voltage Identification&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:mfm|MFM]]&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 90%&lt;br /&gt;
| Floppy disk FM and [https://en.wikipedia.org/wiki/Modified_Frequency_Modulation MFM].&lt;br /&gt;
| Work in progress (David Wiens).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| HD Audio&lt;br /&gt;
| Audio&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Nokia NRC17&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Sony SIRC&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Philips RC-6&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Philips RC-MM&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Philips RECS80&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Infrared_Data_Association IrDA]&lt;br /&gt;
| Misc&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| HD44780&lt;br /&gt;
| Displays&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [http://en.wikipedia.org/wiki/HD44780_Character_LCD HD44780 character LCD] protocol&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 7-segment display&lt;br /&gt;
| Displays&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:Pcf8814|PCF8814]]&lt;br /&gt;
| Displays&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| pcf8814&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 50%&lt;br /&gt;
| Philips PCF8814 65 x 96 pixels matrix LCD driver&lt;br /&gt;
| Work in progress (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:Pcf8814_lcd|PCF8814 LCD]]&lt;br /&gt;
| Displays&lt;br /&gt;
| pcf8814&lt;br /&gt;
| pcf8814_lcd&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 50%&lt;br /&gt;
| Philips PCF8814 65 x 96 pixels matrix LCD driver&lt;br /&gt;
| Work in progress (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/RDM_%28lighting%29 RDM]&lt;br /&gt;
| Industrial Lighting&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| rdm&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/NMEA_0183 NMEA 0183]&lt;br /&gt;
| GPS&lt;br /&gt;
| uart&lt;br /&gt;
| nmea0183&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:Nmea2000|NMEA2000]]&lt;br /&gt;
| Marine&lt;br /&gt;
| can&lt;br /&gt;
| nmea2000&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [https://en.wikipedia.org/wiki/NMEA_2000 NMEA 2000 Wikipedia page]&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Digital_Command_Control DCC]&lt;br /&gt;
| Trains&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| dcc&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Train_Communication_Network MVB]&lt;br /&gt;
| Trains&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mvb&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Multifunction Vehicle Bus&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Train_Communication_Network WTB]&lt;br /&gt;
| Trains&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| wtb&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Wire Train Bus&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/C-Bus_%28protocol%29 C-Bus]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| cbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/X10_%28industry_standard%29 X10]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| x10&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/LonWorks LonWorks]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| lonworks&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/S-Bus S-Bus]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| sbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Meter-Bus M-Bus]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Modbus Modbus ASCII]&lt;br /&gt;
| Automation&lt;br /&gt;
| uart&lt;br /&gt;
| modbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Modbus Modbus TCP]&lt;br /&gt;
| Automation&lt;br /&gt;
| ip&lt;br /&gt;
| modbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Highway_Addressable_Remote_Transducer_Protocol HART protocol]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| hart&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/INTERBUS INTERBUS]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| interbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/DirectNET_Protocol DirectNET]&lt;br /&gt;
| Automation&lt;br /&gt;
| uart&lt;br /&gt;
| directnet&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/KNX_%28standard%29 KNX]&lt;br /&gt;
| Automation&lt;br /&gt;
| various&lt;br /&gt;
| knx&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Bacnet BACnet]&lt;br /&gt;
| Automation&lt;br /&gt;
| &lt;br /&gt;
| bacnet&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/OpenTherm OpenTherm]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| opentherm&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/EBUS_%28serial_buses%29 EBUS]&lt;br /&gt;
| Automation&lt;br /&gt;
| uart&lt;br /&gt;
| ebus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Attachment_Unit_Interface AUI]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| aui&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Attachment Unit Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Medium_Dependent_Interface MDI]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mdi&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Medium Dependent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Media_Independent_Interface MII]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mii&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Media Independent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Gigabit_Media_Independent_Interface#Gigabit_Media_Independent_Interface GMII]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| gmii&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Gigabit Media Independent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/10_Gigabit_Media_Independent_Interface#10_Gigabit_Media_Independent_Interface XGMII]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| xgmii&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| 10 Gigabit Media Independent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:esp8266|ESP8266]]&lt;br /&gt;
| Wireless&lt;br /&gt;
| uart&lt;br /&gt;
| esp8266&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| WiFi Serial Transceiver&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:cc1101|TI CC1101]]&lt;br /&gt;
| Wireless&lt;br /&gt;
| spi&lt;br /&gt;
| cc1101&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 1%&lt;br /&gt;
| SPI-attached wireless controller for 315/433/868/915 MHz ISM bands. [http://www.ti.com/lit/ds/symlink/cc1101.pdf Datasheet]&lt;br /&gt;
| Work in progress ([[User:Rohieb|rohieb]])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:tmds|TMDS (HDMI / DVI Pixel Data)]]&lt;br /&gt;
| Display&lt;br /&gt;
| tmds&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 1%&lt;br /&gt;
| https://github.com/mithro/tmds_encoding&lt;br /&gt;
| Work in progress ([[User:Mithro|mithro]])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:Easymatic|Easymatic]]&lt;br /&gt;
| Home automation&lt;br /&gt;
| uart&lt;br /&gt;
| easymatic&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 10%&lt;br /&gt;
| &lt;br /&gt;
| Work in progress (Platypus)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:DDC/CI|DDC/CI]]&lt;br /&gt;
| PC&lt;br /&gt;
| i2c&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:CEC|CEC]]&lt;br /&gt;
| Misc&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Kenwood VH&lt;br /&gt;
| Misc&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 50%&lt;br /&gt;
| SYSTEM CONTROL protocol used by Kenwood&amp;#039;s VH HiFi-system&lt;br /&gt;
| In progress: https://github.com/kripton/libsigrokdecode/compare/kenwood_vh&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| IEC 61131-9&lt;br /&gt;
| Industrial&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &amp;quot;Single-drop digital communication interface for small sensors and actuators (SDCI, marketed as IO-Link)&amp;quot; https://en.wikipedia.org/wiki/IEC_61131&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:Ook|OOK]]&lt;br /&gt;
| Wireless&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| ook&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 90%&lt;br /&gt;
| Decodes On Off Keying waveforms which are frequently used for remote control protocols &lt;br /&gt;
| Work in progress ([[User:SteveR|stever]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoders&amp;diff=13546</id>
		<title>Protocol decoders</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoders&amp;diff=13546"/>
		<updated>2018-06-17T19:18:38Z</updated>

		<summary type="html">&lt;p&gt;SteveR: /* Possible candidates for future protocol decoders */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of &amp;#039;&amp;#039;&amp;#039;supported protocol decoders (PDs)&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;decoders which we might want to write in the future&amp;#039;&amp;#039;&amp;#039; (or users might want to contribute).&lt;br /&gt;
&lt;br /&gt;
See [[Protocol decoder API]] for details on how the decoders work in sigrok, and [[Protocol decoder HOWTO]] for a quick introduction about how to write your own decoders.&lt;br /&gt;
&lt;br /&gt;
== Supported protocol decoders ==&lt;br /&gt;
&lt;br /&gt;
Number of currently supported protocol decoders: &amp;#039;&amp;#039;&amp;#039;89&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot; class=&amp;quot;alternategrey sortable sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Protocol&lt;br /&gt;
!Category&lt;br /&gt;
!Input IDs&lt;br /&gt;
!Output IDs&lt;br /&gt;
!Status&lt;br /&gt;
!Full name&lt;br /&gt;
!Description&lt;br /&gt;
&lt;br /&gt;
{{pd|ac97|AC &amp;#039;97|Audio Codec &amp;#039;97|Audio and modem control for PC systems.|Audio|&amp;amp;mdash;|ac97|supported}}&lt;br /&gt;
{{pd|ade77xx|ADE77xx|Analog Devices ADE77xx|Poly phase multifunction energy metering IC protocol.|Sensors|spi|ade77xx|supported}}&lt;br /&gt;
{{pd|adf435x|ADF435x|Analog Devices ADF4350/1|Wideband synthesizer with integrated VCO.|RF|spi|adf435x|supported}}&lt;br /&gt;
{{pd|adns5020|ADNS-5020|Avago ADNS-5020 optical mouse sensor|Bidirectional command and data over an SPI-like protocol.|Sensors|spi|adns5020|supported}}&lt;br /&gt;
{{pd|am230x|AM230x/DHTxx/RHTxx|Aosong AM230x/DHTxx|Aosong AM230x/DHTxx/RHTxx humidity/temperature sensor protocol.|Sensors|&amp;amp;mdash;|am230x|supported}}&lt;br /&gt;
{{pd|arm_etmv3|ARM ETMv3|ARM Embedded Trace Macroblock|Decode ETM instruction trace packets.|Flash/debug|uart|arm_etmv3|supported}}&lt;br /&gt;
{{pd|arm_itm|ARM ITM|ARM Instrumentation Trace Macroblock|Trace data from Cortex-M / ARMv7m ITM module.|Flash/debug|uart|arm_itm|supported}}&lt;br /&gt;
{{pd|arm_tpiu|ARM TPIU|ARM Trace Port Interface Unit|Filter TPIU formatted trace data into separate streams.|Flash/debug|uart|uart|supported}}&lt;br /&gt;
{{pd|atsha204a|ATSHA204A|Microchip ATSHA204A|Microchip ATSHA204A CryptoAuthentication device.|Memory|i2c|atsha204a|supported}}&lt;br /&gt;
{{pd|aud|AUD|Advanced User Debugger|Renesas/Hitachi Advanced User Debugger (AUD) protocol.|Flash/debug|&amp;amp;mdash;|aud|supported}}&lt;br /&gt;
{{pd|avr_isp|AVR ISP|AVR in-system programming|Protocol for in-system programming Atmel AVR MCUs.|Flash/debug|spi|avr_isp|supported}}&lt;br /&gt;
{{pd|avr_pdi|AVR PDI|Atmel Program and Debug Interface|Atmel proprietary interface for the ATxmega MCU.|Flash/debug|&amp;amp;mdash;|avr_pdi|supported}}&lt;br /&gt;
{{pd|can|CAN|Controller Area Network|Field bus protocol for distributed realtime control.|Automotive|&amp;amp;mdash;|can|supported}}&lt;br /&gt;
{{pd|cfp|CFP|100 Gigabit C form-factor pluggable|100 Gigabit C form-factor pluggable (CFP) protocol.|Networking|mdio|&amp;amp;mdash;|supported}}&lt;br /&gt;
{{pd|counter|Counter|Edge counter|Count number of edges.|Misc|&amp;amp;mdash;|&amp;amp;mdash;|supported}}&lt;br /&gt;
{{pd|dali|DALI|Digital Addressable Lighting Interface|DALI lighting control protocol.|Lighting|&amp;amp;mdash;|dali|supported}}&lt;br /&gt;
{{pd|dcf77|DCF77|DCF77 time protocol|European longwave time signal (77.5kHz carrier signal).|Time signal|&amp;amp;mdash;|dcf77|supported}}&lt;br /&gt;
{{pd|dmx512|DMX512|Digital MultipleX 512|Professional lighting control protocol.|Lighting|&amp;amp;mdash;|dmx512|supported}}&lt;br /&gt;
{{pd|ds1307|DS1307|Dallas DS1307|Realtime clock module protocol.|RTC|i2c|ds1307|supported}}&lt;br /&gt;
{{pd|ds243x|DS243x|Maxim DS2432/DS2433|Maxim DS243x series 1-Wire EEPROM protocol.|Memory|onewire_network|ds243x|supported}}&lt;br /&gt;
{{pd|dsi|DSI|Digital Serial Interface|DSI lighting control protocol.|Lighting|&amp;amp;mdash;|dsi|supported}}&lt;br /&gt;
{{pd|edid|EDID|Extended Display Identification Data|Data structure describing display device capabilities.|PC|i2c|edid|supported}}&lt;br /&gt;
{{pd|eeprom24xx|24xx EEPROM|24xx I²C EEPROM|24xx series I²C EEPROM protocol.|Memory|i2c|eeprom24xx|supported}}&lt;br /&gt;
{{pd|eeprom93cxx|93Cxx EEPROM|93Cxx Microwire EEPROM|93Cxx series Microwire EEPROM protocol.|Memory|microwire|eeprom93cxx|supported}}&lt;br /&gt;
{{pd|em4100|EM4100|RFID EM4100|EM4100 100-150kHz RFID protocol.|RFID|&amp;amp;mdash;|em4100|supported}}&lt;br /&gt;
{{pd|em4305|EM4305|RFID EM4205/EM4305|EM4205/EM4305 100-150kHz RFID protocol.|RFID|&amp;amp;mdash;|em4305|supported}}&lt;br /&gt;
{{pd|gpib|GPIB|General Purpose Interface Bus|IEEE-488 GPIB / HPIB protocol.|Other|&amp;amp;mdash;|gpib|supported}}&lt;br /&gt;
{{pd|graycode|Gray code|Gray code and rotary encoder|Accumulate rotary encoder increments, provide timing statistics.|Misc|&amp;amp;mdash;|graycode|supported}}&lt;br /&gt;
{{pd|guess_bitrate|Guess bitrate|Guess bitrate/baudrate|Guess the bitrate/baudrate of a UART (or other) protocol.|Other|&amp;amp;mdash;|guess_bitrate|supported}}&lt;br /&gt;
{{pd|i2c|I2C|Inter-Integrated Circuit|Two-wire, multi-master, serial bus.|Embedded|&amp;amp;mdash;|i2c|supported}}&lt;br /&gt;
{{pd|i2cdemux|I2C demux|I2C demultiplexer|Demux I2C packets into per-slave-address streams.|Embedded|i2c|&amp;#039;&amp;#039;runtime decision&amp;#039;&amp;#039;|supported}}&lt;br /&gt;
{{pd|i2cfilter|I2C filter|I2C filter|Filter out addresses/directions in an I2C stream.|Embedded|i2c|i2c|supported}}&lt;br /&gt;
{{pd|i2s|I2S|Integrated Interchip Sound|Serial bus for connecting digital audio devices.|Audio|&amp;amp;mdash;|i2s|supported}}&lt;br /&gt;
{{pd|iec|IEC|Commodore bus|Commodore serial IEEE-488 (IEC) bus protocol.|Other|&amp;amp;mdash;|gpib|supported}}&lt;br /&gt;
{{pd|ir_nec|IR NEC|IR NEC|NEC infrared remote control protocol.|IR|&amp;amp;mdash;|ir_nec|supported}}&lt;br /&gt;
{{pd|ir_rc5|IR RC-5|IR RC-5|RC-5 infrared remote control protocol.|IR|&amp;amp;mdash;|ir_rc5|supported}}&lt;br /&gt;
{{pd|jitter|Jitter|Timing jitter calculation|Retrieves the timing jitter between two digital signals.|Misc|&amp;amp;mdash;|jitter|supported}}&lt;br /&gt;
{{pd|jtag|JTAG|Joint Test Action Group (IEEE 1149.1)|Protocol for testing, debugging, and flashing ICs.|Flash/debug|&amp;amp;mdash;|jtag|supported}}&lt;br /&gt;
{{pd|jtag_stm32|JTAG / STM32|Joint Test Action Group / ST STM32|ST STM32-specific JTAG protocol.|Flash/debug|jtag|jtag_stm32|supported}}&lt;br /&gt;
{{pd|lm75|LM75|National LM75|National LM75 (and compatibles) temperature sensor protocol.|Sensors|i2c|lm75|supported}}&lt;br /&gt;
{{pd|lpc|LPC|Low-Pin-Count|Protocol for low-bandwidth devices on PC mainboards.|PC|&amp;amp;mdash;|lpc|supported}}&lt;br /&gt;
{{pd|maple_bus|Maple bus|SEGA Maple bus|Maple bus peripheral protocol for SEGA Dreamcast.|Misc|&amp;amp;mdash;|maple_bus|supported}}&lt;br /&gt;
{{pd|max7219|MAX7219|Maxim MAX7219/MAX7221|8-digit LED display driver.|Display|spi|max7219|supported}}&lt;br /&gt;
{{pd|maxim_ds28ea00|DS28EA00|Maxim DS28EA00 1-Wire digital thermometer|1-Wire digital thermometer with Sequence Detect and PIO.|Sensors|onewire_network|maxim_ds28ea00|supported}}&lt;br /&gt;
{{pd|mcs48|MCS-48|Intel MCS-48|Intel MCS-48 external memory protocol.|CPU|&amp;amp;mdash;|mcs48|supported}}&lt;br /&gt;
{{pd|mdio|MDIO|Management Data Input/Output|Half-duplex sync serial bus for MII management between MAC and PHY.|Networking|&amp;amp;mdash;|mdio|supported}}&lt;br /&gt;
{{pd|microwire|Microwire|Microwire|3-wire, half-duplex, synchronous serial bus.|Embedded|&amp;amp;mdash;|microwire|supported}}&lt;br /&gt;
{{pd|midi|MIDI|Musical Instrument Digital Interface|Musical Instrument Digital Interface (MIDI) protocol.|Music|uart|midi|supported}}&lt;br /&gt;
{{pd|mlx90614|MLX90614|Melexis MLX90614|Infrared Thermometer protocol.|Sensors|i2c|mlx90614|supported}}&lt;br /&gt;
{{pd|modbus|Modbus|Modbus RTU over RS232/RS485|Modbus RTU protocol for industrial applications.|Misc|uart|modbus|supported}}&lt;br /&gt;
{{pd|morse|Morse|Morse code|Demodulated morse code protocol.|Misc|&amp;amp;mdash;|morse|supported}}&lt;br /&gt;
{{pd|mrf24j40|MRF24J40|Microchip MRF24J40|IEEE 802.15.4 2.4 GHz RF tranceiver chip.|RF|spi|mf24j40|supported}}&lt;br /&gt;
{{pd|mxc6225xu|MXC6225XU|MEMSIC MXC6225XU|Digital Thermal Orientation Sensor (DTOS) protocol.|Sensors|i2c|mxc6225xu|supported}}&lt;br /&gt;
{{pd|nrf24l01|nRF24L01(+)|Nordic Semiconductor nRF24L01/nRF24L01+|2.4GHz transceiver chip.|Wireless|spi|nrf24l01|supported}}&lt;br /&gt;
{{pd|nunchuk|Nunchuk|Nintendo Wii Nunchuk|Nintendo Wii Nunchuk controller protocol.|Other|i2c|nunchuk|supported}}&lt;br /&gt;
{{pd|onewire_link|1-Wire link layer|1-Wire serial communication bus (link layer)|Bidirectional, half-duplex, asynchronous serial bus.|Embedded|&amp;amp;mdash;|onewire_link|supported}}&lt;br /&gt;
{{pd|onewire_network|1-Wire network layer|1-Wire serial communication bus (network layer)|Bidirectional, half-duplex, asynchronous serial bus.|Embedded|onewire_link|onewire_network|supported}}&lt;br /&gt;
{{pd|pan1321|PAN1321|Panasonic PAN1321|Bluetooth RF module with Serial Port Profile (SPP).|Bluetooth|uart|pan1321|supported}}&lt;br /&gt;
{{pd|parallel|Parallel|Parallel sync bus|Generic parallel synchronous bus.|Misc|&amp;amp;mdash;|parallel|supported}}&lt;br /&gt;
{{pd|ps2|PS/2|PS/2|PS/2 keyboard/mouse interface.|PC|&amp;amp;mdash;|ps2|supported}}&lt;br /&gt;
{{pd|pwm|PWM|Pulse-width modulation|Analog level encoded in duty cycle percentage.|Misc|&amp;amp;mdash;|pwm|supported}}&lt;br /&gt;
{{pd|qi|Qi|Qi charger protocol|Async serial protocol for Qi charger receivers.|Misc|&amp;amp;mdash;|qi|supported}}&lt;br /&gt;
{{pd|rc_encode|RC encode|Remote control encoder|PT2262/HX2262/SC5262 remote control encoder protocol.|Wireless|&amp;amp;mdash;|&amp;amp;mdash;|supported}}&lt;br /&gt;
{{pd|rfm12|RFM12|RFM12 control protocol|HopeRF RFM12 wireless transceivers control protocol.|Wireless|spi|rfm12|supported}}&lt;br /&gt;
{{pd|rgb_led_spi|RGB LED (SPI)|RGB LED string decoder (SPI)|RGB LED string protocol (RGB values clocked over SPI).|LED|spi|rgb_led_spi|supported}}&lt;br /&gt;
{{pd|rgb_led_ws281x|RGB LED (WS281x)|RGB LED string decoder (WS281x)|RGB LED string protocol (WS281x).|LED|&amp;amp;mdash;|rgb_led_ws281x|supported}}&lt;br /&gt;
{{pd|rtc8564|RTC-8564|Epson RTC-8564 JE/NB|Realtime clock module protocol.|RTC|i2c|rtc8564|supported}}&lt;br /&gt;
{{pd|sda2506|SDA2506|Siemens SDA 2506-5|Serial nonvolatile 1-Kbit EEPROM.|Memory|&amp;amp;mdash;|sda2506|supported}}&lt;br /&gt;
{{pd|sdcard_sd|SD card (SD mode)|Secure Digital card (SD mode)|Secure Digital card (SD mode) low-level protocol.|Memory|&amp;amp;mdash;|sdcard_sd|supported}}&lt;br /&gt;
{{pd|sdcard_spi|SD card (SPI mode)|Secure Digital card (SPI mode)|Secure Digital card (SPI mode) low-level protocol.|Memory|spi|sdcard_spi|supported}}&lt;br /&gt;
{{pd|spdif|S/PDIF|Sony/Philips Digital Interface Format|Serial bus for connecting digital audio devices.|Audio|&amp;amp;mdash;|spdif|supported}}&lt;br /&gt;
{{pd|spi|SPI|Serial Peripheral Interface|Full-duplex, synchronous, serial bus.|Embedded|&amp;amp;mdash;|spi|supported}}&lt;br /&gt;
{{pd|spiflash|SPI flash|SPI flash chips|xx25 series SPI (NOR) flash chip protocol.|SPI flash|spi|spiflash|supported}}&lt;br /&gt;
{{pd|ssi32|SSI32|Synchronous Serial Interface (32bit)|Synchronous Serial Interface (32bit) protocol.|Misc|spi|ssi32|supported}}&lt;br /&gt;
{{pd|st7735|ST7735|Sitronix ST7735|Sitronix ST7735 TFT controller protocol.|Display|&amp;amp;mdash;|st7735|supported}}&lt;br /&gt;
{{pd|stepper_motor|Stepper motor|Stepper motor position / speed|Absolute position and movement speed from step/dir.|Motors|&amp;amp;mdash;|stepper_motor|supported}}&lt;br /&gt;
{{pd|swd|SWD|Serial Wire Debug|Two-wire protocol for debug access to ARM CPUs.|Flash/debug|&amp;amp;mdash;|swd|supported}}&lt;br /&gt;
{{pd|t55xx|T55xx|RFID T5xx|T55xx 100-150kHz RFID protocol.|RFID|&amp;amp;mdash;|t55xx|supported}}&lt;br /&gt;
{{pd|tca6408a|TI TCA6408A|Texas Instruments TCA6408A|Texas Instruments TCA6408A 8-bit I²C I/O expander.|I/O expander|i2c|tca6408a|supported}}&lt;br /&gt;
{{pd|timing|Timing|Timing calculation|Calculate time between edges.|Misc|&amp;amp;mdash;|timing|supported}}&lt;br /&gt;
{{pd|tlc5620|TI TLC5620|Texas Instruments TLC5620|Texas Instruments TLC5620 8-bit quad DAC.|DAC|&amp;amp;mdash;|tlc5620|supported}}&lt;br /&gt;
{{pd|uart|UART|Universal Asynchronous Receiver/Transmitter|Asynchronous, serial bus.|Embedded|&amp;amp;mdash;|uart|supported}}&lt;br /&gt;
{{pd|usb_packet|USB packet|Universal Serial Bus (LS/FS) packet|USB (low-speed and full-speed) packet protocol.|USB|usb_signalling|usb_packet|supported}}&lt;br /&gt;
{{pd|usb_power_delivery|USB PD|USB Power Delivery|USB Power Delivery protocol.|USB|&amp;amp;mdash;|usb_pd|supported}}&lt;br /&gt;
{{pd|usb_request|USB request|Universal Serial Bus (LS/FS) transaction/request|USB (low-speed and full-speed) transaction/request protocol.|USB|usb_packet|usb_request|supported}}&lt;br /&gt;
{{pd|usb_signalling|USB signalling|Universal Serial Bus (LS/FS) signalling|USB (low-speed and full-speed) signalling protocol.|USB|&amp;amp;mdash;|usb_signalling|supported}}&lt;br /&gt;
{{pd|wiegand|Wiegand|Wiegand interface|Wiegand interface for electronic entry systems.|RFID|&amp;amp;mdash;|wiegand|supported}}&lt;br /&gt;
{{pd|xfp|XFP|10 Gigabit Small Form Factor Pluggable Module (XFP)|Data structure describing device capabilities.|Networking|i2c|xfp|supported}}&lt;br /&gt;
{{pd|z80|Z80|Zilog Z80 CPU|Zilog Z80 microprocessor disassembly.|CPU|&amp;amp;mdash;|z80|supported}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible candidates for future protocol decoders ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot; class=&amp;quot;alternategrey sortable sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Protocol&lt;br /&gt;
!Category&lt;br /&gt;
!Input ID(s)&lt;br /&gt;
!Output ID(s)&lt;br /&gt;
!Status&lt;br /&gt;
!Description&lt;br /&gt;
!Comments&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SA8807A&lt;br /&gt;
| Displays&lt;br /&gt;
| spi&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| SPI-attached LCD. Datasheet: [http://pdf1.alldatasheet.com/datasheet-pdf/view/36922/SAMES/SA8807A.html Sames SA8807A].&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EA eDIPTFT43-A&lt;br /&gt;
| Displays&lt;br /&gt;
| i2c&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| I2C-attached LCD. Datasheet: [http://www.lcd-module.de/pdf/grafik/ediptft43-a.pdf EA eDIPTFT43-A].&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Analog Devices AD7291&lt;br /&gt;
| ADC&lt;br /&gt;
| i2c&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| I2C-attached ADC. Datasheet: [http://pdf1.alldatasheet.com/datasheet-pdf/view/318172/AD/AD7291.html Analog Devices AD7291].&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Analog Devices ADS1258&lt;br /&gt;
| ADC&lt;br /&gt;
| spi&lt;br /&gt;
| ads1258&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 0%&lt;br /&gt;
| SPI-attached ADC.&lt;br /&gt;
| Planned (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Microchip MCP3901&lt;br /&gt;
| ADC&lt;br /&gt;
| spi&lt;br /&gt;
| mcp3901&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 0%&lt;br /&gt;
| Can be controlled via a parallel protocol, or SPI, or I2C.&lt;br /&gt;
| Planned (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| JTAG / TMPA9xx&lt;br /&gt;
| Flash/debug&lt;br /&gt;
| jtag&lt;br /&gt;
| jtag_tmpa9xx&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Toshiba TMPA9xx specific JTAG protocol details.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB transfer&lt;br /&gt;
| USB&lt;br /&gt;
| usb_request&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB / HID&lt;br /&gt;
| USB&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| usb_hid&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB / CDC&lt;br /&gt;
| USB&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| usb_cdc&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| USB / USBTMC&lt;br /&gt;
| USB&lt;br /&gt;
| usb_transfer&lt;br /&gt;
| usb_usbtmc&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Dallas DS1985&lt;br /&gt;
| Other&lt;br /&gt;
| onewire_network&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 0%&lt;br /&gt;
| Dallas DS1985 iButton (1-Wire) device.&lt;br /&gt;
| Planned (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| UNI/O&lt;br /&gt;
| Embedded&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Synchronous_Serial_Interface SSI]&lt;br /&gt;
| Embedded&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Synchronous Serial Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| CompactFlash&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MMC&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Memory Stick&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SmartMedia&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| xD-Picture Card&lt;br /&gt;
| Memory&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/ISO/IEC_7816 ISO 7816]&lt;br /&gt;
| Smartcards&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FlexRay&lt;br /&gt;
| Automotive&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Flexray FlexRay] is an automotive network communications protocol.&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| LIN&lt;br /&gt;
| Automotive&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Local_Interconnect_Network LIN] (Local Interconnect Network) is an automotive bus standard.&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| AVR TPI&lt;br /&gt;
| Flash/debug&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Atmel Tiny Programming Interface (TPI) protocol.&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FWH&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISA&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| PCI&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SMBus&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| IDE&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SCSI&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Platform_Environment_Control_Interface PECI]&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Platform Environment Control Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/SVID SVID]&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Serial Voltage Identification&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:mfm|MFM]]&lt;br /&gt;
| PC&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 90%&lt;br /&gt;
| Floppy disk FM and [https://en.wikipedia.org/wiki/Modified_Frequency_Modulation MFM].&lt;br /&gt;
| Work in progress (David Wiens).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| HD Audio&lt;br /&gt;
| Audio&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Nokia NRC17&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Sony SIRC&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Philips RC-6&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Philips RC-MM&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Philips RECS80&lt;br /&gt;
| IR&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Infrared_Data_Association IrDA]&lt;br /&gt;
| Misc&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| HD44780&lt;br /&gt;
| Displays&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [http://en.wikipedia.org/wiki/HD44780_Character_LCD HD44780 character LCD] protocol&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 7-segment display&lt;br /&gt;
| Displays&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:Pcf8814|PCF8814]]&lt;br /&gt;
| Displays&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| pcf8814&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 50%&lt;br /&gt;
| Philips PCF8814 65 x 96 pixels matrix LCD driver&lt;br /&gt;
| Work in progress (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:Pcf8814_lcd|PCF8814 LCD]]&lt;br /&gt;
| Displays&lt;br /&gt;
| pcf8814&lt;br /&gt;
| pcf8814_lcd&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 50%&lt;br /&gt;
| Philips PCF8814 65 x 96 pixels matrix LCD driver&lt;br /&gt;
| Work in progress (Uwe Hermann).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/RDM_%28lighting%29 RDM]&lt;br /&gt;
| Industrial Lighting&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| rdm&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/NMEA_0183 NMEA 0183]&lt;br /&gt;
| GPS&lt;br /&gt;
| uart&lt;br /&gt;
| nmea0183&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:Nmea2000|NMEA2000]]&lt;br /&gt;
| Marine&lt;br /&gt;
| can&lt;br /&gt;
| nmea2000&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| [https://en.wikipedia.org/wiki/NMEA_2000 NMEA 2000 Wikipedia page]&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Digital_Command_Control DCC]&lt;br /&gt;
| Trains&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| dcc&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Train_Communication_Network MVB]&lt;br /&gt;
| Trains&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mvb&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Multifunction Vehicle Bus&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Train_Communication_Network WTB]&lt;br /&gt;
| Trains&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| wtb&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Wire Train Bus&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/C-Bus_%28protocol%29 C-Bus]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| cbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/X10_%28industry_standard%29 X10]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| x10&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/LonWorks LonWorks]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| lonworks&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/S-Bus S-Bus]&lt;br /&gt;
| Home automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| sbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Meter-Bus M-Bus]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Modbus Modbus ASCII]&lt;br /&gt;
| Automation&lt;br /&gt;
| uart&lt;br /&gt;
| modbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Modbus Modbus TCP]&lt;br /&gt;
| Automation&lt;br /&gt;
| ip&lt;br /&gt;
| modbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Highway_Addressable_Remote_Transducer_Protocol HART protocol]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| hart&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/INTERBUS INTERBUS]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| interbus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/DirectNET_Protocol DirectNET]&lt;br /&gt;
| Automation&lt;br /&gt;
| uart&lt;br /&gt;
| directnet&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/KNX_%28standard%29 KNX]&lt;br /&gt;
| Automation&lt;br /&gt;
| various&lt;br /&gt;
| knx&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Bacnet BACnet]&lt;br /&gt;
| Automation&lt;br /&gt;
| &lt;br /&gt;
| bacnet&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/OpenTherm OpenTherm]&lt;br /&gt;
| Automation&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| opentherm&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/EBUS_%28serial_buses%29 EBUS]&lt;br /&gt;
| Automation&lt;br /&gt;
| uart&lt;br /&gt;
| ebus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Attachment_Unit_Interface AUI]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| aui&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Attachment Unit Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Medium_Dependent_Interface MDI]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mdi&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Medium Dependent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Media_Independent_Interface MII]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| mii&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Media Independent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Gigabit_Media_Independent_Interface#Gigabit_Media_Independent_Interface GMII]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| gmii&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Gigabit Media Independent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/10_Gigabit_Media_Independent_Interface#10_Gigabit_Media_Independent_Interface XGMII]&lt;br /&gt;
| Networking&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| xgmii&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| 10 Gigabit Media Independent Interface&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol_decoder:esp8266|ESP8266]]&lt;br /&gt;
| Wireless&lt;br /&gt;
| uart&lt;br /&gt;
| esp8266&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| WiFi Serial Transceiver&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:cc1101|TI CC1101]]&lt;br /&gt;
| Wireless&lt;br /&gt;
| spi&lt;br /&gt;
| cc1101&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 1%&lt;br /&gt;
| SPI-attached wireless controller for 315/433/868/915 MHz ISM bands. [http://www.ti.com/lit/ds/symlink/cc1101.pdf Datasheet]&lt;br /&gt;
| Work in progress ([[User:Rohieb|rohieb]])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:tmds|TMDS (HDMI / DVI Pixel Data)]]&lt;br /&gt;
| Display&lt;br /&gt;
| tmds&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | 1%&lt;br /&gt;
| https://github.com/mithro/tmds_encoding&lt;br /&gt;
| Work in progress ([[User:Mithro|mithro]])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:Easymatic|Easymatic]]&lt;br /&gt;
| Home automation&lt;br /&gt;
| uart&lt;br /&gt;
| easymatic&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 10%&lt;br /&gt;
| &lt;br /&gt;
| Work in progress (Platypus)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:DDC/CI|DDC/CI]]&lt;br /&gt;
| PC&lt;br /&gt;
| i2c&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[Protocol Decoder:CEC|CEC]]&lt;br /&gt;
| Misc&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Kenwood VH&lt;br /&gt;
| Misc&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 50%&lt;br /&gt;
| SYSTEM CONTROL protocol used by Kenwood&amp;#039;s VH HiFi-system&lt;br /&gt;
| In progress: https://github.com/kripton/libsigrokdecode/compare/kenwood_vh&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| IEC 61131-9&lt;br /&gt;
| Industrial&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| &amp;quot;Single-drop digital communication interface for small sensors and actuators (SDCI, marketed as IO-Link)&amp;quot; https://en.wikipedia.org/wiki/IEC_61131&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| On Off Keying&lt;br /&gt;
| Wireless&lt;br /&gt;
| &amp;amp;mdash;&lt;br /&gt;
| ook&lt;br /&gt;
| bgcolor=&amp;quot;yellow&amp;quot; | 90%&lt;br /&gt;
| Decodes On Off Keying waveforms which are frequently used for remote control protocols &lt;br /&gt;
| In progress: https://sigrok.org/wiki/Protocol_decoder:Ook&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_gen&amp;diff=13545</id>
		<title>Protocol decoder:Ook gen</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_gen&amp;diff=13545"/>
		<updated>2018-06-17T18:57:29Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_gen&lt;br /&gt;
| name            = OOK Generator&lt;br /&gt;
| description     = On Off Keying Generator&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_gen&lt;br /&gt;
| image           = [[File:ook_gen.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = unknown&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_gen&amp;#039;&amp;#039;&amp;#039; protocol decoder takes data from one or more lines from lists.py file and generates ook signal(s) from it.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
It is provided to help test decoders that use the output generated by the ook decoder without having the capture files and supplies ook in the same way to stacked decoders.&lt;br /&gt;
&lt;br /&gt;
It will also allow you to test the Oregon hex codes posted in various places online. The format that Oregon capturing programs use varies, some of them re-order the Nibbles. There are examples of a number of these in the lists.py file&lt;br /&gt;
&lt;br /&gt;
At the moment it only works with Pulseview and Linux sigrok-cli.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; decoder has one option&lt;br /&gt;
&lt;br /&gt;
{ &amp;#039;id&amp;#039;: &amp;#039;type&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;OOK Type&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Oregon&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;None&amp;#039;,&amp;#039;Oregon&amp;#039;,) }&lt;br /&gt;
&lt;br /&gt;
If the &amp;#039;&amp;#039;&amp;#039;Oregon&amp;#039;&amp;#039;&amp;#039; option is selected (only one available for now) then it will generate ook for the ook_oregon Oregon decoder.&lt;br /&gt;
&lt;br /&gt;
The Oregon generator option produces two lines of decode. The first line displays the Hex that came from the lists.py file while the second displays the ook bits.&lt;br /&gt;
&lt;br /&gt;
if you uncomment the following line from the lists.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&amp;#039;198408E000C70040034&amp;#039;,&amp;#039;WGR800 Av Speed 0.4m/s Gusts 0.7m/s  Direction: N &amp;#039;,&amp;#039;v3&amp;#039;],&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then it will generate the ook to simulate a WGR800 wind sensor&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_gen --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
To decode the example WGR800 uncomment the line in lists.py and then run. The trace belongs to a real Oregon v3 rain sensor model PCR800 and is needed to run the ook_gen although the contents of the sr file are pretty much ignored.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook_gen,ook_oregon -i oregon_pcr800.sr -A ook_oregon&lt;br /&gt;
198408E000C70040034 - v3&lt;br /&gt;
WGR800 Av Speed 0.4m/s Gusts 0.7m/s  Direction: N &lt;br /&gt;
ook_oregon-1: Oregon v3 Preamble&lt;br /&gt;
ook_oregon-1: Sync&lt;br /&gt;
ook_oregon-1: SensorID: 1984&lt;br /&gt;
ook_oregon-1: Ch: 0&lt;br /&gt;
ook_oregon-1: RollingCode: 8e&lt;br /&gt;
ook_oregon-1: Flags1: 0&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: c&lt;br /&gt;
ook_oregon-1: 7&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: 4&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: 3&lt;br /&gt;
ook_oregon-1: 4&lt;br /&gt;
ook_oregon-1: WGR800 - Wind&lt;br /&gt;
ook_oregon-1: Ch 0&lt;br /&gt;
ook_oregon-1: Batt Ok&lt;br /&gt;
ook_oregon-1: N (0°)&lt;br /&gt;
ook_oregon-1: Gust 0.7 m/s&lt;br /&gt;
ook_oregon-1: Speed 0.4 m/s&lt;br /&gt;
ook_oregon-1: Checksum OK Calc 43 Rx 43 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_vis&amp;diff=13544</id>
		<title>Protocol decoder:Ook vis</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_vis&amp;diff=13544"/>
		<updated>2018-06-17T18:57:03Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_vis&lt;br /&gt;
| name            = OOK Visualiser&lt;br /&gt;
| description     = On Off Keying Visualiser&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_vis&lt;br /&gt;
| image           = [[File:ook_vis.png|250px]]&lt;br /&gt;
| input           = ook&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = unknown&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; protocol decoder takes &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; input from the ook decoder and displays it in a variety of formats.&lt;br /&gt;
&lt;br /&gt;
It is provided to help analyse unknown format waveforms. Using the ook decoder with this one allows you to try &amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Manchester&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;Differential Manchester&amp;#039;&amp;#039;&amp;#039; and their possible settings to see what produces the lowest errors. Then use ook_vis to format the results in a suitable fashion for what you are decoding, make some structure assumptions and see what that does to the results.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; protocol decoder provides two lines of decode. The first line does a basic decode (with formatting) while the second attempts to work out where the preamble and sync might be and then displays the data with a posible structure. The sync position is worked out from the preamble and detects when it switches from &amp;#039;1111 ...&amp;#039; or &amp;#039;1010 ...&amp;#039; to something else.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; decoder has three options&lt;br /&gt;
&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;displayas&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Display as&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Nibble - Hex&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;Byte - Hex&amp;#039;,&amp;#039;Byte - Hex rev&amp;#039;, &amp;#039;Byte - BCD&amp;#039;,&amp;#039;Byte - BCD rev&amp;#039;,&amp;#039;Nibble - Hex&amp;#039;,&amp;#039;Nibble - Hex rev&amp;#039;,&amp;#039;Nibble - BCD&amp;#039;,&amp;#039;Nibble - BCD rev&amp;#039;,)},&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;synclen&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Sync length&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;4&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;0&amp;#039;,&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;,&amp;#039;5&amp;#039;,&amp;#039;6&amp;#039;,&amp;#039;7&amp;#039;,&amp;#039;8&amp;#039;,&amp;#039;9&amp;#039;,&amp;#039;10&amp;#039;)},&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;syncoffset&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Sync offseth&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;0&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;-4&amp;#039;,&amp;#039;-3&amp;#039;,&amp;#039;-2&amp;#039;,&amp;#039;-1&amp;#039;,&amp;#039;0&amp;#039;,&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;)}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;displayas&amp;#039;&amp;#039;&amp;#039; option allows the user to pick how the data is presented. It supportes two lengths 4 bits (Nibble) and 8 bits (Byte). It also allows numbers to be displayed as Hexadecimal or Binary Coded Decimal (BCD) and also supports bit reversal.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;synclen&amp;#039;&amp;#039;&amp;#039; option allows the user to set the length of the Sync and vary it to see what that does to the data after it.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;syncoffset&amp;#039;&amp;#039;&amp;#039; option allows the user to move the start of sync backwards and forwards to see what that does to the data after it.&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_vis --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; decoder concentrates on the protocol and not how it is transmitted so it needs the ook decoder to deal with the encoding before it can do its work. It stacks on top of the &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder.&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default) (Oregon V3 sensor) and then pass the result to the ook_vis decoder and only display the ook_vis output. The trace belongs to a real Oregon v3 rain sensor model PCR800.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_vis -i oregon_pcr800.sr -A ook_vis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13543</id>
		<title>Protocol decoder:Ook oregon</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13543"/>
		<updated>2018-06-17T18:56:41Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_oregon&lt;br /&gt;
| name            = Oregon Scientific&lt;br /&gt;
| description     = Decodes Oregon Scientific signals for weather sensors&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_oregon&lt;br /&gt;
| image           = [[File:ook_oregon.png|250px]]&lt;br /&gt;
| input           = ook&lt;br /&gt;
| output          = none&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = unknown&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder takes &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; input from the ook decoder and turns that into what the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] sensor is reporting.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Oregon weather sensors use Manchester encoding to transmit their data. The v2.1 sensors use a &amp;#039;1010 ...&amp;#039; preamble while the v3 sensors use a &amp;#039;1111 ...&amp;#039; preamble. The v2.1 sensors send two copies of all the bits which means the packets are longer.&lt;br /&gt;
&lt;br /&gt;
The decoder should decode Oregon v1, v2.1 and v3 sensors but has only been tested on virtual v2.1 and real v3. v1 and v2.1 traces from real hardware would be welcomed by the author and/or the sigrok developers (on IRC or mailing list) to allow some additional testing (&amp;gt;= 50Khz sample rate please).&lt;br /&gt;
&lt;br /&gt;
The vast majority of the information that allowed this decoders creation came from [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015] Fields names follow its naming conventions and the list of model numbers and SensorID codes has been used to allow model number lookup. The additional information on what fields are used for what provides the information to carry out the rest of the level2 decode.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder provides two lines of decode, the first one does a basic decode and identification of the version while the second looks at the decoded SensorID and then picks out particular nibbles and turns them into a human readable results.&lt;br /&gt;
&lt;br /&gt;
The first line identifies which version is being received by looking for a particular sync pattern. Once the Sync pattern is found the Preamble and Sync bits are marked and stripped off. All the remaining data is then interpreted as sets of 4 bit Nibbles with all bits reversed (except SensorID). There are then some common fields for v2.1 and v3 sensors which are RollingCode, Channel, RollingCode and Flags1. Finally it prints out the remaining nibbles which are the sensor payload as hex digits without interpreting them.&lt;br /&gt;
&lt;br /&gt;
The level2 decode takes things a bit further by using the SensorID and a lookup table in ook_oregon/lists.py to display the model numbers that use that SensorID. It then looks up the type of sensor from the same list and then adds in fields for Temperature, Humidity, UV level, Rainfall, Wind speed and Barometric pressure. Results depends on what the sensor produces and whether it is recognised.&lt;br /&gt;
&lt;br /&gt;
Unknown sensors will be identified as &amp;#039;&amp;#039;&amp;#039;Unknown&amp;#039;&amp;#039;&amp;#039; and as such cannot be level2 decoded without human help.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder has one option&lt;br /&gt;
&lt;br /&gt;
    &amp;#039;id&amp;#039;: &amp;#039;unknown&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Unknown type is&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Unknown&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;Unknown&amp;#039;,&amp;#039;Temp_Hum&amp;#039;,&amp;#039;Temp_Hum1&amp;#039;,&amp;#039;Temp&amp;#039;,&amp;#039;Temp_Baro&amp;#039;,&amp;#039;UV&amp;#039;,&amp;#039;UV1&amp;#039;,&amp;#039;Wind&amp;#039;,&amp;#039;Rain&amp;#039;,&amp;#039;Baro&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
This option allows the user to pick what type of sensor that they think the Unknown one is and see the level2 decode for that choice. This is designed to allow them to try the options and see if they can get a meaningful decode out.&lt;br /&gt;
&lt;br /&gt;
If it does work then the ook_oregon/lists.py can be edited to include the sensorID, model number and decoding type. Please make sure that you are extremely confident that the trace belongs to the right sensor. The format is documented in the file. Please be very careful with the syntax and take a backup before editing it. Restarting Sigrok after this should convert the sensorID into a model number and do the decoding. &lt;br /&gt;
&lt;br /&gt;
Sending the author a copy of the extra or edited line in ook_oregon/lists.py might allow the list to grow over time, email address is at the top of the file. Response time will vary dramatically, no guarantees of inclusion. Alternatively a patch to the ook_oregon decoder could also get your device more universally recognised.&lt;br /&gt;
&lt;br /&gt;
New decoding types can be added if needed, example trace + model info plus reading at the time (from a weather base station) required. Or submit a code patch + trace for the sigrok dumps, model info plus reading at the time in the readme. &lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_oregon --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder concentrates on the protocol and not how it is transmitted so it needs the ook decoder to deal with the Manchester encoding before it can do its work. It stacks on top of the &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder.&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a virtual Oregon v2.1 Temperature sensor model THGR228N.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,ook_oregon -i thgr228n.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default) (Oregon V3 sensor) and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a real Oregon v3 rain sensor model PCR800.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -i oregon_pcr800.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook_oregon decoder can optionally display the data part of the signal in hex by using the Binary output switch with an option called &amp;quot;data-hex&amp;quot;. The hex can then be compared to other information on the web or saved in the lists.py file from ook_gen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
igrok-cli -P ook:data=D0,ook_oregon -B ook_oregon=data-hex -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Protocol Information&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific]&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015]&lt;br /&gt;
* [http://wmrx00.sourceforge.net/Arduino/OregonScientific-RF-Protocols.pdf Oregon Scientific RF Protocol Descriptions -June 2011] Older version&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/OregonScientific-RF-Protocols-II.pdf Oregon Scientific RF Protocol Description (Versions 1.0, 2.1, 3.0)]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Base Station Compatability with sensors + Oregon protocol versions and what sensors use them&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [https://weerhuisje.nl/en/e/oregon_sensoren Oregon weerstations met compatibele sensoren 2017] (Oregon weather stations with compatible sensors 2017). Also look at bottom of the page for &amp;quot;Lijst met oude modellen stations en sensoren&amp;quot; (List of old models stations and sensors) which lists Oregon protocol versions and what sensors use them&lt;br /&gt;
* [https://www.weathershack.com/static/osi-sensor-compatibility-chart.html Oregon Scientific Sensor Compatibility Chart] with base stations&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Virtual Sensors&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.connectingstuff.net/blog/encodage-protocoles-oregon-scientific-sur-arduino/ Virtual v2.1 sensor using an Arduino]  by Olivier Lebrun&lt;br /&gt;
* [https://github.com/deberman/OS_V2.1_temp-hum_sensor os_v2_1_temp_hum_sensor library] written by deberman 2016-02-24, derived from Virtual v2.1 sensor by Olivier Lebrun&lt;br /&gt;
* [https://wiki.pilight.org/oregon PiLight]&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13542</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13542"/>
		<updated>2018-06-17T18:56:04Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = possible candidate&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanvar&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on sample lengths rather than on sampling rate or inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;quot;Save Selected Range As&amp;quot; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode As - default Manchester&lt;br /&gt;
    preamble - &amp;#039;1010 ...&amp;#039;/&amp;#039;1111 ...&amp;#039; - Preamble pattern - default &amp;#039;1111 ...&amp;#039; &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Preamble filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - transition at start is a - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
This can send a 50:50 mark/space square wave to transmit a signal that is &amp;#039;1111 ...&amp;#039; or &amp;#039;1010 ...&amp;#039;. In one case the pulse samples represent the clock period in the other only half. Which one was intended cannot be easily detected by the receiver, so there is an option for the user to make the choice. Making the right choice should remove most of the decoding errors.&lt;br /&gt;
&lt;br /&gt;
There are also two variants, as per G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and comply with G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;#039;0&amp;#039;   zero or low&lt;br /&gt;
&amp;#039;1&amp;#039;   one or high&lt;br /&gt;
&amp;#039;E&amp;#039;   Error or invalid. This can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
usage with sigrok-cli is:&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with a preamble starting 1010.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039; -i thgr228n.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,oregon -i thgr228n.sr -A oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can optionally display the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying On Off Keying wiki]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html  Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ Manchester and Diff Manchester encoding] good unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Rc_encode.png&amp;diff=13541</id>
		<title>File:Rc encode.png</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Rc_encode.png&amp;diff=13541"/>
		<updated>2018-06-17T18:53:32Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Ook_vis.png&amp;diff=13540</id>
		<title>File:Ook vis.png</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Ook_vis.png&amp;diff=13540"/>
		<updated>2018-06-17T18:52:53Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Ook_oregon.png&amp;diff=13539</id>
		<title>File:Ook oregon.png</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Ook_oregon.png&amp;diff=13539"/>
		<updated>2018-06-17T18:52:34Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Ook.png&amp;diff=13538</id>
		<title>File:Ook.png</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Ook.png&amp;diff=13538"/>
		<updated>2018-06-17T18:52:09Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Ook_gen.png&amp;diff=13537</id>
		<title>File:Ook gen.png</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Ook_gen.png&amp;diff=13537"/>
		<updated>2018-06-17T18:47:47Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_gen&amp;diff=13536</id>
		<title>Protocol decoder:Ook gen</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_gen&amp;diff=13536"/>
		<updated>2018-06-17T18:47:19Z</updated>

		<summary type="html">&lt;p&gt;SteveR: Created page with &amp;quot;{{Infobox protocol decoder | id              = ook_gen | name            = OOK Generator | description     = On Off Keying Generator | status          = supported | license...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_gen&lt;br /&gt;
| name            = OOK Generator&lt;br /&gt;
| description     = On Off Keying Generator&lt;br /&gt;
| status          = supported&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_gen&lt;br /&gt;
| image           = [[File:ook_gen.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = unknown&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_gen&amp;#039;&amp;#039;&amp;#039; protocol decoder takes data from one or more lines from lists.py file and generates ook signal(s) from it.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
It is provided to help test decoders that use the output generated by the ook decoder without having the capture files and supplies ook in the same way to stacked decoders.&lt;br /&gt;
&lt;br /&gt;
It will also allow you to test the Oregon hex codes posted in various places online. The format that Oregon capturing programs use varies, some of them re-order the Nibbles. There are examples of a number of these in the lists.py file&lt;br /&gt;
&lt;br /&gt;
At the moment it only works with Pulseview and Linux sigrok-cli.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; decoder has one option&lt;br /&gt;
&lt;br /&gt;
{ &amp;#039;id&amp;#039;: &amp;#039;type&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;OOK Type&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Oregon&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;None&amp;#039;,&amp;#039;Oregon&amp;#039;,) }&lt;br /&gt;
&lt;br /&gt;
If the &amp;#039;&amp;#039;&amp;#039;Oregon&amp;#039;&amp;#039;&amp;#039; option is selected (only one available for now) then it will generate ook for the ook_oregon Oregon decoder.&lt;br /&gt;
&lt;br /&gt;
The Oregon generator option produces two lines of decode. The first line displays the Hex that came from the lists.py file while the second displays the ook bits.&lt;br /&gt;
&lt;br /&gt;
if you uncomment the following line from the lists.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&amp;#039;198408E000C70040034&amp;#039;,&amp;#039;WGR800 Av Speed 0.4m/s Gusts 0.7m/s  Direction: N &amp;#039;,&amp;#039;v3&amp;#039;],&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then it will generate the ook to simulate a WGR800 wind sensor&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_gen --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
To decode the example WGR800 uncomment the line in lists.py and then run. The trace belongs to a real Oregon v3 rain sensor model PCR800 and is needed to run the ook_gen although the contents of the sr file are pretty much ignored.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook_gen,ook_oregon -i oregon_pcr800.sr -A ook_oregon&lt;br /&gt;
198408E000C70040034 - v3&lt;br /&gt;
WGR800 Av Speed 0.4m/s Gusts 0.7m/s  Direction: N &lt;br /&gt;
ook_oregon-1: Oregon v3 Preamble&lt;br /&gt;
ook_oregon-1: Sync&lt;br /&gt;
ook_oregon-1: SensorID: 1984&lt;br /&gt;
ook_oregon-1: Ch: 0&lt;br /&gt;
ook_oregon-1: RollingCode: 8e&lt;br /&gt;
ook_oregon-1: Flags1: 0&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: c&lt;br /&gt;
ook_oregon-1: 7&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: 4&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: 0&lt;br /&gt;
ook_oregon-1: 3&lt;br /&gt;
ook_oregon-1: 4&lt;br /&gt;
ook_oregon-1: WGR800 - Wind&lt;br /&gt;
ook_oregon-1: Ch 0&lt;br /&gt;
ook_oregon-1: Batt Ok&lt;br /&gt;
ook_oregon-1: N (0°)&lt;br /&gt;
ook_oregon-1: Gust 0.7 m/s&lt;br /&gt;
ook_oregon-1: Speed 0.4 m/s&lt;br /&gt;
ook_oregon-1: Checksum OK Calc 43 Rx 43 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13535</id>
		<title>Protocol decoder:Ook oregon</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13535"/>
		<updated>2018-06-17T18:45:54Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_oregon&lt;br /&gt;
| name            = Oregon Scientific&lt;br /&gt;
| description     = Decodes Oregon Scientific signals for weather sensors&lt;br /&gt;
| status          = supported&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_oregon&lt;br /&gt;
| image           = [[File:ook_oregon.png|250px]]&lt;br /&gt;
| input           = ook&lt;br /&gt;
| output          = none&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = unknown&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder takes &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; input from the ook decoder and turns that into what the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] sensor is reporting.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Oregon weather sensors use Manchester encoding to transmit their data. The v2.1 sensors use a &amp;#039;1010 ...&amp;#039; preamble while the v3 sensors use a &amp;#039;1111 ...&amp;#039; preamble. The v2.1 sensors send two copies of all the bits which means the packets are longer.&lt;br /&gt;
&lt;br /&gt;
The decoder should decode Oregon v1, v2.1 and v3 sensors but has only been tested on virtual v2.1 and real v3. v1 and v2.1 traces from real hardware would be welcomed by the author and/or the sigrok developers (on IRC or mailing list) to allow some additional testing (&amp;gt;= 50Khz sample rate please).&lt;br /&gt;
&lt;br /&gt;
The vast majority of the information that allowed this decoders creation came from [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015] Fields names follow its naming conventions and the list of model numbers and SensorID codes has been used to allow model number lookup. The additional information on what fields are used for what provides the information to carry out the rest of the level2 decode.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder provides two lines of decode, the first one does a basic decode and identification of the version while the second looks at the decoded SensorID and then picks out particular nibbles and turns them into a human readable results.&lt;br /&gt;
&lt;br /&gt;
The first line identifies which version is being received by looking for a particular sync pattern. Once the Sync pattern is found the Preamble and Sync bits are marked and stripped off. All the remaining data is then interpreted as sets of 4 bit Nibbles with all bits reversed (except SensorID). There are then some common fields for v2.1 and v3 sensors which are RollingCode, Channel, RollingCode and Flags1. Finally it prints out the remaining nibbles which are the sensor payload as hex digits without interpreting them.&lt;br /&gt;
&lt;br /&gt;
The level2 decode takes things a bit further by using the SensorID and a lookup table in ook_oregon/lists.py to display the model numbers that use that SensorID. It then looks up the type of sensor from the same list and then adds in fields for Temperature, Humidity, UV level, Rainfall, Wind speed and Barometric pressure. Results depends on what the sensor produces and whether it is recognised.&lt;br /&gt;
&lt;br /&gt;
Unknown sensors will be identified as &amp;#039;&amp;#039;&amp;#039;Unknown&amp;#039;&amp;#039;&amp;#039; and as such cannot be level2 decoded without human help.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder has one option&lt;br /&gt;
&lt;br /&gt;
    &amp;#039;id&amp;#039;: &amp;#039;unknown&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Unknown type is&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Unknown&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;Unknown&amp;#039;,&amp;#039;Temp_Hum&amp;#039;,&amp;#039;Temp_Hum1&amp;#039;,&amp;#039;Temp&amp;#039;,&amp;#039;Temp_Baro&amp;#039;,&amp;#039;UV&amp;#039;,&amp;#039;UV1&amp;#039;,&amp;#039;Wind&amp;#039;,&amp;#039;Rain&amp;#039;,&amp;#039;Baro&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
This option allows the user to pick what type of sensor that they think the Unknown one is and see the level2 decode for that choice. This is designed to allow them to try the options and see if they can get a meaningful decode out.&lt;br /&gt;
&lt;br /&gt;
If it does work then the ook_oregon/lists.py can be edited to include the sensorID, model number and decoding type. Please make sure that you are extremely confident that the trace belongs to the right sensor. The format is documented in the file. Please be very careful with the syntax and take a backup before editing it. Restarting Sigrok after this should convert the sensorID into a model number and do the decoding. &lt;br /&gt;
&lt;br /&gt;
Sending the author a copy of the extra or edited line in ook_oregon/lists.py might allow the list to grow over time, email address is at the top of the file. Response time will vary dramatically, no guarantees of inclusion. Alternatively a patch to the ook_oregon decoder could also get your device more universally recognised.&lt;br /&gt;
&lt;br /&gt;
New decoding types can be added if needed, example trace + model info plus reading at the time (from a weather base station) required. Or submit a code patch + trace for the sigrok dumps, model info plus reading at the time in the readme. &lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_oregon --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder concentrates on the protocol and not how it is transmitted so it needs the ook decoder to deal with the Manchester encoding before it can do its work. It stacks on top of the &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder.&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a virtual Oregon v2.1 Temperature sensor model THGR228N.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,ook_oregon -i thgr228n.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default) (Oregon V3 sensor) and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a real Oregon v3 rain sensor model PCR800.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -i oregon_pcr800.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook_oregon decoder can optionally display the data part of the signal in hex by using the Binary output switch with an option called &amp;quot;data-hex&amp;quot;. The hex can then be compared to other information on the web or saved in the lists.py file from ook_gen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
igrok-cli -P ook:data=D0,ook_oregon -B ook_oregon=data-hex -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Protocol Information&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific]&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015]&lt;br /&gt;
* [http://wmrx00.sourceforge.net/Arduino/OregonScientific-RF-Protocols.pdf Oregon Scientific RF Protocol Descriptions -June 2011] Older version&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/OregonScientific-RF-Protocols-II.pdf Oregon Scientific RF Protocol Description (Versions 1.0, 2.1, 3.0)]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Base Station Compatability with sensors + Oregon protocol versions and what sensors use them&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [https://weerhuisje.nl/en/e/oregon_sensoren Oregon weerstations met compatibele sensoren 2017] (Oregon weather stations with compatible sensors 2017). Also look at bottom of the page for &amp;quot;Lijst met oude modellen stations en sensoren&amp;quot; (List of old models stations and sensors) which lists Oregon protocol versions and what sensors use them&lt;br /&gt;
* [https://www.weathershack.com/static/osi-sensor-compatibility-chart.html Oregon Scientific Sensor Compatibility Chart] with base stations&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Virtual Sensors&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.connectingstuff.net/blog/encodage-protocoles-oregon-scientific-sur-arduino/ Virtual v2.1 sensor using an Arduino]  by Olivier Lebrun&lt;br /&gt;
* [https://github.com/deberman/OS_V2.1_temp-hum_sensor os_v2_1_temp_hum_sensor library] written by deberman 2016-02-24, derived from Virtual v2.1 sensor by Olivier Lebrun&lt;br /&gt;
* [https://wiki.pilight.org/oregon PiLight]&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Rc_encode.png&amp;diff=13534</id>
		<title>File:Rc encode.png</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Rc_encode.png&amp;diff=13534"/>
		<updated>2018-06-17T18:40:29Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Rc_encode&amp;diff=13533</id>
		<title>Protocol decoder:Rc encode</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Rc_encode&amp;diff=13533"/>
		<updated>2018-06-17T18:40:08Z</updated>

		<summary type="html">&lt;p&gt;SteveR: Created page with &amp;quot;{{Infobox protocol decoder | id              = rc_encode | name            = RC Encode | description     = Remote Control Encode. | status          = supported | license...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = rc_encode&lt;br /&gt;
| name            = RC Encode&lt;br /&gt;
| description     = Remote Control Encode.&lt;br /&gt;
| status          = supported&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = rc_encode&lt;br /&gt;
| image           = [[File:rc_encode.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = none&lt;br /&gt;
| probes          = data&lt;br /&gt;
| optional_probes = none&lt;br /&gt;
| options         = remote;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;rc_encode&amp;#039;&amp;#039;&amp;#039; protocol decoder can decode the remote control protocol which is frequently used within key fobs and power socket remotes.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
They contain encoding chips like the [http://www.princeton.com.tw Princeton Technology Corp] PT2262 which converts the button pressed and address settings into a series of pulses which is then transmitted over whatever frequency and modulation that the designer chooses. These devices operate at a number of frequencies including 433MHz.&lt;br /&gt;
&lt;br /&gt;
This PD should also decode the HX2262 and SC5262 which are equivalents.&lt;br /&gt;
&lt;br /&gt;
The decoder also contains some optional additional decoding for a Maplin L95AR remote control and will turn the received signal into which button was pressed and what the address code DIP switches are set to.&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.princeton.com.tw/Portals/0/Product/PT2260_s.pdf PT2260]&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;br /&gt;
[[Category:Wireless]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Ook_vis.png&amp;diff=13532</id>
		<title>File:Ook vis.png</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Ook_vis.png&amp;diff=13532"/>
		<updated>2018-06-17T18:37:59Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_vis&amp;diff=13531</id>
		<title>Protocol decoder:Ook vis</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_vis&amp;diff=13531"/>
		<updated>2018-06-17T18:37:40Z</updated>

		<summary type="html">&lt;p&gt;SteveR: Created page with &amp;quot;{{Infobox protocol decoder | id              = ook_vis | name            = OOK Visualiser | description     = On Off Keying Visualiser | status          = supported | license...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_vis&lt;br /&gt;
| name            = OOK Visualiser&lt;br /&gt;
| description     = On Off Keying Visualiser&lt;br /&gt;
| status          = supported&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_vis&lt;br /&gt;
| image           = [[File:ook_vis.png|250px]]&lt;br /&gt;
| input           = ook&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = unknown&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; protocol decoder takes &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; input from the ook decoder and displays it in a variety of formats.&lt;br /&gt;
&lt;br /&gt;
It is provided to help analyse unknown format waveforms. Using the ook decoder with this one allows you to try &amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Manchester&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;Differential Manchester&amp;#039;&amp;#039;&amp;#039; and their possible settings to see what produces the lowest errors. Then use ook_vis to format the results in a suitable fashion for what you are decoding, make some structure assumptions and see what that does to the results.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; protocol decoder provides two lines of decode. The first line does a basic decode (with formatting) while the second attempts to work out where the preamble and sync might be and then displays the data with a posible structure. The sync position is worked out from the preamble and detects when it switches from &amp;#039;1111 ...&amp;#039; or &amp;#039;1010 ...&amp;#039; to something else.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; decoder has three options&lt;br /&gt;
&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;displayas&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Display as&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Nibble - Hex&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;Byte - Hex&amp;#039;,&amp;#039;Byte - Hex rev&amp;#039;, &amp;#039;Byte - BCD&amp;#039;,&amp;#039;Byte - BCD rev&amp;#039;,&amp;#039;Nibble - Hex&amp;#039;,&amp;#039;Nibble - Hex rev&amp;#039;,&amp;#039;Nibble - BCD&amp;#039;,&amp;#039;Nibble - BCD rev&amp;#039;,)},&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;synclen&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Sync length&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;4&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;0&amp;#039;,&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;,&amp;#039;5&amp;#039;,&amp;#039;6&amp;#039;,&amp;#039;7&amp;#039;,&amp;#039;8&amp;#039;,&amp;#039;9&amp;#039;,&amp;#039;10&amp;#039;)},&lt;br /&gt;
    {&amp;#039;id&amp;#039;: &amp;#039;syncoffset&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Sync offseth&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;0&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;-4&amp;#039;,&amp;#039;-3&amp;#039;,&amp;#039;-2&amp;#039;,&amp;#039;-1&amp;#039;,&amp;#039;0&amp;#039;,&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;)}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;displayas&amp;#039;&amp;#039;&amp;#039; option allows the user to pick how the data is presented. It supportes two lengths 4 bits (Nibble) and 8 bits (Byte). It also allows numbers to be displayed as Hexadecimal or Binary Coded Decimal (BCD) and also supports bit reversal.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;synclen&amp;#039;&amp;#039;&amp;#039; option allows the user to set the length of the Sync and vary it to see what that does to the data after it.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;syncoffset&amp;#039;&amp;#039;&amp;#039; option allows the user to move the start of sync backwards and forwards to see what that does to the data after it.&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_vis --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_vis&amp;#039;&amp;#039;&amp;#039; decoder concentrates on the protocol and not how it is transmitted so it needs the ook decoder to deal with the encoding before it can do its work. It stacks on top of the &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder.&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default) (Oregon V3 sensor) and then pass the result to the ook_vis decoder and only display the ook_vis output. The trace belongs to a real Oregon v3 rain sensor model PCR800.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_vis -i oregon_pcr800.sr -A ook_vis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Ook_oregon.png&amp;diff=13530</id>
		<title>File:Ook oregon.png</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Ook_oregon.png&amp;diff=13530"/>
		<updated>2018-06-17T18:35:29Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13529</id>
		<title>Protocol decoder:Ook oregon</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook_oregon&amp;diff=13529"/>
		<updated>2018-06-17T18:35:03Z</updated>

		<summary type="html">&lt;p&gt;SteveR: Created page with &amp;quot;{{Infobox protocol decoder | id              = ook_oregon | name            = Oregon Scientific | description     = Decodes Oregon Scientific signals for weather sensors | sta...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook_oregon&lt;br /&gt;
| name            = Oregon Scientific&lt;br /&gt;
| description     = Decodes Oregon Scientific signals for weather sensors&lt;br /&gt;
| status          = supported&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook_oregon&lt;br /&gt;
| image           = [[File:ook_oregon.png|250px]]&lt;br /&gt;
| input           = ook&lt;br /&gt;
| output          = none&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = unknown&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder takes &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; input from the ook decoder and turns that into what the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] sensor is reporting.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Oregon weather sensors use Manchester encoding to transmit their data. The v2.1 sensors use a &amp;#039;1010 ...&amp;#039; preamble while the v3 sensors use a &amp;#039;1111 ...&amp;#039; preamble. The v2.1 sensors send two copies of all the bits which means the packets are longer.&lt;br /&gt;
&lt;br /&gt;
The decoder should decode Oregon v1, v2.1 and v3 sensors but has only been tested on virtual v2.1 and real v3. v1 and v2.1 traces from real hardware would be welcomed by the author to allow some additional testing (&amp;gt;= 50Khz sample rate please).&lt;br /&gt;
&lt;br /&gt;
The vast majority of the information that allowed this decoders creation came from [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015] Fields names follow its naming conventions and the list of model numbers and SensorID codes has been used to allow model number lookup. The additional information on what fields are used for what provides the information to carry out the rest of the level2 decode.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; protocol decoder provides two lines of decode, the first one does a basic decode and identification of the version while the second looks at the decoded SensorID and then picks out particular nibbles and turns them into a human readable results.&lt;br /&gt;
&lt;br /&gt;
The first line identifies which version is being received by looking for a particular sync pattern. Once the Sync pattern is found the Preamble and Sync bits are marked and stripped off. All the remaining data is then interpreted as sets of 4 bit Nibbles with all bits reversed (except SensorID). There are then some common fields for v2.1 and v3 sensors which are RollingCode, Channel, RollingCode and Flags1. Finally it prints out the remaining nibbles which are the sensor payload as hex digits without interpreting them.&lt;br /&gt;
&lt;br /&gt;
The level2 decode takes things a bit further by using the SensorID and a lookup table in ook_oregon/lists.py to display the model numbers that use that SensorID. It then looks up the type of sensor from the same list and then adds in fields for Temperature, Humidity, UV level, Rainfall, Wind speed and Barometric pressure. Results depends on what the sensor produces and whether it is recognised.&lt;br /&gt;
&lt;br /&gt;
Unknown sensors will be identified as &amp;#039;&amp;#039;&amp;#039;Unknown&amp;#039;&amp;#039;&amp;#039; and as such cannot be level2 decoded without human help.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder has one option&lt;br /&gt;
&lt;br /&gt;
    &amp;#039;id&amp;#039;: &amp;#039;unknown&amp;#039;, &amp;#039;desc&amp;#039;: &amp;#039;Unknown type is&amp;#039;, &amp;#039;default&amp;#039;: &amp;#039;Unknown&amp;#039;, &amp;#039;values&amp;#039;: (&amp;#039;Unknown&amp;#039;,&amp;#039;Temp_Hum&amp;#039;,&amp;#039;Temp_Hum1&amp;#039;,&amp;#039;Temp&amp;#039;,&amp;#039;Temp_Baro&amp;#039;,&amp;#039;UV&amp;#039;,&amp;#039;UV1&amp;#039;,&amp;#039;Wind&amp;#039;,&amp;#039;Rain&amp;#039;,&amp;#039;Baro&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
This option allows the user to pick what type of sensor that they think the Unknown one is and see the level2 decode for that choice. This is designed to allow them to try the options and see if they can get a meaningful decode out.&lt;br /&gt;
&lt;br /&gt;
If it does work then the ook_oregon/lists.py can be edited to include the sensorID, model number and decoding type. Please make sure that you are extremely confident that the trace belongs to the right sensor. The format is documented in the file. Please be very careful with the syntax and take a backup before editing it. Restarting Sigrok after this should convert the sensorID into a model number and do the decoding. &lt;br /&gt;
&lt;br /&gt;
Sending the author a copy of the extra or edited line in ook_oregon/lists.py might allow the list to grow over time, email address is at the top of the file. Response time will vary dramatically, no guarantees of inclusion. Alternatively a patch to the ook_oregon decoder could also get your device more universally recognised.&lt;br /&gt;
&lt;br /&gt;
New decoding types can be added if needed, example trace + model info plus reading at the time (from a weather base station) required. Or submit a code patch + trace for the sigrok dumps, model info plus reading at the time in the readme. &lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook_oregon --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook_oregon&amp;#039;&amp;#039;&amp;#039; decoder concentrates on the protocol and not how it is transmitted so it needs the ook decoder to deal with the Manchester encoding before it can do its work. It stacks on top of the &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder.&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a virtual Oregon v2.1 Temperature sensor model THGR228N.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,ook_oregon -i thgr228n.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default) (Oregon V3 sensor) and then pass the result to the ook_oregon decoder and only display the ook_oregon output. The trace belongs to a real Oregon v3 rain sensor model PCR800.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -i oregon_pcr800.sr -A ook_oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook_oregon decoder can optionally display the data part of the signal in hex by using the Binary output switch with an option called &amp;quot;data-hex&amp;quot;. The hex can then be compared to other information on the web or saved in the lists.py file from ook_gen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
igrok-cli -P ook:data=D0,ook_oregon -B ook_oregon=data-hex -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Protocol Information&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific]&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/Weather-Sensor-RF-Protocols.pdf 434MHz RF Protocol Descriptions for Wireless Weather Sensors - October 2015]&lt;br /&gt;
* [http://wmrx00.sourceforge.net/Arduino/OregonScientific-RF-Protocols.pdf Oregon Scientific RF Protocol Descriptions -June 2011] Older version&lt;br /&gt;
* [http://www.osengr.org/WxShield/Downloads/OregonScientific-RF-Protocols-II.pdf Oregon Scientific RF Protocol Description (Versions 1.0, 2.1, 3.0)]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Base Station Compatability with sensors + Oregon protocol versions and what sensors use them&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [https://weerhuisje.nl/en/e/oregon_sensoren Oregon weerstations met compatibele sensoren 2017] (Oregon weather stations with compatible sensors 2017). Also look at bottom of the page for &amp;quot;Lijst met oude modellen stations en sensoren&amp;quot; (List of old models stations and sensors) which lists Oregon protocol versions and what sensors use them&lt;br /&gt;
* [https://www.weathershack.com/static/osi-sensor-compatibility-chart.html Oregon Scientific Sensor Compatibility Chart] with base stations&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Virtual Sensors&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.connectingstuff.net/blog/encodage-protocoles-oregon-scientific-sur-arduino/ Virtual v2.1 sensor using an Arduino]  by Olivier Lebrun&lt;br /&gt;
* [https://github.com/deberman/OS_V2.1_temp-hum_sensor os_v2_1_temp_hum_sensor library] written by deberman 2016-02-24, derived from Virtual v2.1 sensor by Olivier Lebrun&lt;br /&gt;
* [https://wiki.pilight.org/oregon PiLight]&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Ook.png&amp;diff=13528</id>
		<title>File:Ook.png</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Ook.png&amp;diff=13528"/>
		<updated>2018-06-17T18:29:45Z</updated>

		<summary type="html">&lt;p&gt;SteveR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13526</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13526"/>
		<updated>2018-06-17T18:26:23Z</updated>

		<summary type="html">&lt;p&gt;SteveR: SteveR moved page Protocol decoder API:Ook to Protocol decoder:Ook: put it under the api by mistake&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = supported&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanvar&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on sample lengths rather than on sampling rate or inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;quot;Save Selected Range As&amp;quot; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode As - default Manchester&lt;br /&gt;
    preamble - &amp;#039;1010 ...&amp;#039;/&amp;#039;1111 ...&amp;#039; - Preamble pattern - default &amp;#039;1111 ...&amp;#039; &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Preamble filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - transition at start is a - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
This can send a 50:50 mark/space square wave to transmit a signal that is &amp;#039;1111 ...&amp;#039; or &amp;#039;1010 ...&amp;#039;. In one case the pulse samples represent the clock period in the other only half. Which one was intended cannot be easily detected by the receiver, so there is an option for the user to make the choice. Making the right choice should remove most of the decoding errors.&lt;br /&gt;
&lt;br /&gt;
There are also two variants, as per G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and comply with G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;#039;0&amp;#039;   zero or low&lt;br /&gt;
&amp;#039;1&amp;#039;   one or high&lt;br /&gt;
&amp;#039;E&amp;#039;   Error or invalid. This can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
usage with sigrok-cli is:&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with a preamble starting 1010.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039; -i thgr228n.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,oregon -i thgr228n.sr -A oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can optionally display the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying On Off Keying wiki]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html  Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ Manchester and Diff Manchester encoding] good unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13525</id>
		<title>Protocol decoder:Ook</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoder:Ook&amp;diff=13525"/>
		<updated>2018-06-17T18:24:17Z</updated>

		<summary type="html">&lt;p&gt;SteveR: Created page with &amp;quot;{{Infobox protocol decoder | id              = ook | name            = On Off Keying | description     = Decodes On Off Keying waveforms which are frequently used for remote c...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox protocol decoder&lt;br /&gt;
| id              = ook&lt;br /&gt;
| name            = On Off Keying&lt;br /&gt;
| description     = Decodes On Off Keying waveforms which are frequently used for remote control protocols&lt;br /&gt;
| status          = supported&lt;br /&gt;
| license         = GPLv2+&lt;br /&gt;
| source_code_dir = ook&lt;br /&gt;
| image           = [[File:ook.png|250px]]&lt;br /&gt;
| input           = logic&lt;br /&gt;
| output          = ook&lt;br /&gt;
| probes          = none&lt;br /&gt;
| optional_probes = &amp;amp;mdash;&lt;br /&gt;
| options         = invert, decodeas, preamble, preamlen, diffmanvar&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; protocol decoder takes a logic level input and decodes NRZ, Manchester and Differential Manchester encoding.&lt;br /&gt;
&lt;br /&gt;
It decodes based on sample lengths rather than on sampling rate or inter pulse delays, so should be capable of decoding a variety of signals.&lt;br /&gt;
&lt;br /&gt;
== Getting a signal to Analyse ==&lt;br /&gt;
&lt;br /&gt;
There are two main ways of getting a signal to decode. Opening up the device and attaching the probes from a logic analyser directly to the logic level signal (if you can find and safely connect to it) or using a receiver to demodulate the Radio Frequency (RF) signal to recover the logic level signal. &lt;br /&gt;
&lt;br /&gt;
Opening up the device is going to get you the cleanest signal but carries the risk of breaking the device and any warranty.&lt;br /&gt;
&lt;br /&gt;
Using a demodulator is much lower risk but comes with its own challenges which mainly resolve around the extra noise and other signals that the RF receiver picks up that are nothing to do with the signal that you are interested in. If another device transmits at the same time as the wanted signal then the two will interfere with each other and add up to a mangled mess. Similarly if something creates noise at the same time as the wanted signal then there are going to be some holes in it. One coping strategy is to take a decent number of samples and hopefully get one that is clean.&lt;br /&gt;
&lt;br /&gt;
Sigrok has a very useful feature that allows the cursors in PulseView to be used to highlight part of the waveform and &amp;quot;Save Selected Range As&amp;quot; to manually cut out a useful signal from the noise and other signals around it. &amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039; when using this feature make sure that you leave at least five times the preamble period on the end of the signal or the stacked decoders will not get triggered.&lt;br /&gt;
&lt;br /&gt;
In an ideal world the decoder would be able to do the manual identification for you and chop the garbage out too. There are a couple of extra things that have been built into this decoder that will try and improve your chances of getting a good result from a less than ideal waveform. Good electrical design and layout of the receiver are major factors too.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder assumes that the signal that it needs to decode will have a square wave preamble which can be analysed to work out the original clock period (in samples) which it needs to recover the sending clock and decode the signal. &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039; that it does not look for specific inter pulse times which would limit what it could decode.&lt;br /&gt;
&lt;br /&gt;
It is important to make sure that the preamble is correctly identified and that the decoder doesn&amp;#039;t try and use random noise or other garbage as the preamble.&lt;br /&gt;
&lt;br /&gt;
To give the demodulator option a better chance of working from the output of an RF receiver, this decoder contains some garbage removal code. The code requires 7 pulses (adjustable from 3 to 10) in a row that have lengths within a factor of 5 of each other before it will start decoding. This is designed to reject random background noise and noise which is created by the way that RF receivers work. &lt;br /&gt;
&lt;br /&gt;
If garbage removal and Advanced clock recovery (see below) are not needed then these features can be totally disabled by selecting a preamlen of &amp;#039;0&amp;#039;. Don&amp;#039;t disable this feature unless you are opening up the device and attaching the probes from a logic analyser directly to the logic level signal.&lt;br /&gt;
&lt;br /&gt;
A genuine preamble will pass intact through the garbage filter.&lt;br /&gt;
&lt;br /&gt;
Only decoding from a genuine preamble does several good things, it reduces the work that the higher levels have to do and it frames the wanted signals.&lt;br /&gt;
&lt;br /&gt;
At the end of receiving a good signal the super regenerative RF receivers go low for a few hundred milliseconds. This is a useful marker to spot when looking at captured waveforms. Find the blanks and go backwards to the signal and its preamble.&lt;br /&gt;
&lt;br /&gt;
The decoder imitates this behaviour to detects the end of each set of pulses by looking for a low for five times the preamble period. Once the decode has timed out the resulting OOK pattern is sent up the stack to the higher level decoders and the decoder is reset ready for the next set of pulses which may be from a completely different device.&lt;br /&gt;
&lt;br /&gt;
== Advanced Clock Recovery ==&lt;br /&gt;
&lt;br /&gt;
The example waveforms in the articles in the Resources section below all use a clock that is a pure square wave (50:50 mark/space) which have equal high and low times. It makes it much easier to understand what is going on and also makes it easier to decode at the other end.&lt;br /&gt;
&lt;br /&gt;
Decoding is based upon spotting long and short pulses, so its essential to recover the clock accurately to work out what is a long and short pulse.&lt;br /&gt;
&lt;br /&gt;
In real life the ideal square wave preamble doesn&amp;#039;t always happen and the signal can frequently end up skewed with significantly longer on than off periods or vice versa. This makes some devices much harder to see and decode than others. The RF decoder chosen will have a significant effect too.&lt;br /&gt;
&lt;br /&gt;
This decoder copes with the problem by treating the clock high and low reference lengths independently. It looks at the preamble and if the preamble is skewed then it assumes that the signal will be too and compensates by comparing high pulses with the high reference and low pulses with the low reference.&lt;br /&gt;
&lt;br /&gt;
== Decoder ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; decoder has the following options and defaults&lt;br /&gt;
    invert - Yes/No - default No&lt;br /&gt;
    decodeas - Manchester/Differential Manchester/NRZ - Decode As - default Manchester&lt;br /&gt;
    preamble - &amp;#039;1010 ...&amp;#039;/&amp;#039;1111 ...&amp;#039; - Preamble pattern - default &amp;#039;1111 ...&amp;#039; &lt;br /&gt;
    preamlen - 0/3/4/5/6/7/8/9/10 - Preamble filter length - default 7 - 0 turns it off&lt;br /&gt;
    diffmanver - 1/0 Differential Manchester - transition at start is a - default 1 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
This can send a 50:50 mark/space square wave to transmit a signal that is &amp;#039;1111 ...&amp;#039; or &amp;#039;1010 ...&amp;#039;. In one case the pulse samples represent the clock period in the other only half. Which one was intended cannot be easily detected by the receiver, so there is an option for the user to make the choice. Making the right choice should remove most of the decoding errors.&lt;br /&gt;
&lt;br /&gt;
There are also two variants, as per G.E Thomas and IEEE 802.3 These are the opposite way up to each other. The default here is IEEE 802.3 but the option is there to &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; the result and comply with G.E Thomas.&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; option will be ignored as it only applies to Differential Manchester decoding.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Differential Manchester encoding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Again there are two options, to treat a transition at the start of the clock cycle as a 1 or 0 and no transition as a 0 or 1. The default is to treat a transition as a 1 and no transition as a 0.&lt;br /&gt;
Note. Inverting  a Differential Manchester signals does nothing, so although the &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039; option does work here, it won&amp;#039;t effect the result. The &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; pattern only applies to Manchester encoding and is ignored inside this decoder.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NRZ&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or &amp;#039;&amp;#039;&amp;#039;Binary Encoding&amp;#039;&amp;#039;&amp;#039; as it is called in Computer Networks 2nd Edition - Andrew S. Tannenbaum only has one option which is &amp;#039;&amp;#039;&amp;#039;invert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;decodeas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;preamble&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;diffmanver&amp;#039;&amp;#039;&amp;#039; options are ignored.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
The results of decoding each bit can be&lt;br /&gt;
&amp;#039;0&amp;#039;   zero or low&lt;br /&gt;
&amp;#039;1&amp;#039;   one or high&lt;br /&gt;
&amp;#039;E&amp;#039;   Error or invalid. This can be caused by missing transitions or the wrong pulse lengths according to the rules for the particular encoding. In some cases this is intentional (Oregon v1 preamble) and is part of the sync pattern. In other cases the signal could simply be broken.&lt;br /&gt;
&lt;br /&gt;
If you get large numbers of &amp;#039;E&amp;#039;s then you are probably using the wrong decoder, using the wrong options with the right decoder, there is simply too much noise or more rarely the sample rate is too low for the decoder to work properly. The ideal sample rate is 50 to 100 times higher than the preamble clock and becomes more of an issue with badly skewed signals.&lt;br /&gt;
&lt;br /&gt;
You can show the available options with the --show command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigrok-cli -P ook --show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
== sigrok-cli examples ==&lt;br /&gt;
&lt;br /&gt;
usage with sigrok-cli is:&lt;br /&gt;
&lt;br /&gt;
To use &amp;#039;&amp;#039;&amp;#039;ook&amp;#039;&amp;#039;&amp;#039; to decode a Manchester (default) encoded  trace with a preamble starting 1010.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039; -i thgr228n.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1111 (default)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0 -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook output from the ook decoder can also be stacked with another decoder that accepts ook input such as the [http://store.oregonscientific.com/us/weather-stations.html Oregon Scientific] decoder&lt;br /&gt;
To decode a Manchester (default) encoded trace with a preamble starting 1010 (Oregon V2.1 sensor) and then pass the result to the oregon decoder and only display the oregon output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D1:preamble=&amp;#039;1010 ...&amp;#039;,oregon -i thgr228n.sr -A oregon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ook decoder can optionally display the pulse lengths in micro seconds by using the Binary output switch with an option called &amp;quot;pulse-lengths&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigrok-cli -P ook:data=D0,ook_oregon -B ook=pulse-lengths -i oregon_pcr800.sr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/On-off_keying On Off Keying wiki]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Unipolar_encoding Unipolar Encoding includes NRZ]&lt;br /&gt;
* Computer Networks 2nd Edition - Andrew S. Tannenbaum P60 Fig 2.3 &amp;quot;Three different encoding techniques&amp;quot; has an excellent picture of logic level waveforms that were used to create the Manchester and Differential Manchester decoders&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Manchester_code Wikipedia: Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Differential_Manchester_encoding Wikipedia: Differential Manchester code] Pictures are analog waveforms not logic&lt;br /&gt;
&lt;br /&gt;
* [https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Differential_Manchester_encoding.html  Differential Manchester encoding]&lt;br /&gt;
&lt;br /&gt;
Other interesting articles&lt;br /&gt;
&lt;br /&gt;
* [http://www.nesweb.ch/downloads/doc9164.pdf Atmel (Arduino) Manchester coding basics]&lt;br /&gt;
* [http://www.pcbheaven.com/wikipages/manchester_coding/ Manchester and Diff Manchester encoding] good unipolar pictures plus some good flow charts for decoding with a microcontroller.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocol decoder]]&lt;/div&gt;</summary>
		<author><name>SteveR</name></author>
	</entry>
</feed>