<?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=Biot</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=Biot"/>
	<link rel="alternate" type="text/html" href="https://sigrok.org/wiki/Special:Contributions/Biot"/>
	<updated>2026-04-08T09:44:47Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Envox_EEZ_H24005&amp;diff=16705</id>
		<title>Envox EEZ H24005</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Envox_EEZ_H24005&amp;diff=16705"/>
		<updated>2024-10-11T10:00:23Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* Sigrok Support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox power supply&lt;br /&gt;
| image               = [[File:Envox_eez_h24005_front_panel.jpg|300px]]&lt;br /&gt;
| name                = Envox EEZ H24005&lt;br /&gt;
| status              = supported&lt;br /&gt;
| source_code_dir     = scpi-pps&lt;br /&gt;
| channels            = 2&lt;br /&gt;
| connectivity        = SCPI over USB serial or TCP&lt;br /&gt;
| features            = values, output, over-(voltage,current,power) thresholds. &lt;br /&gt;
| website             = [https://www.envox.eu/bench-power-supply/introduction/ www.envox.eu]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;Envox EEZ H24005&amp;#039;&amp;#039;&amp;#039; is an open hardware and open source firmware bench DC power supply with two channels and a remote control interface based on SCPI 1999.0.&lt;br /&gt;
&lt;br /&gt;
EEZ H24005 is [https://www.crowdsupply.com/envox/eez-h24005/updates/the-h24005-is-dead-long-live-the-bb3 no longer under active development] and the official kits are no longer available for puchase; its successor is the [[Envox EEZ Bench Box 3|EEZ Bench Box 3]]. (The hardware designs are still available if you want to build one yourself from raw parts.)&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Due to being an open hardware design, there is comprehensive documentation of all of the hardware on [https://www.envox.eu/bench-power-supply/introduction/ the project website], including a [https://www.envox.eu/bench-power-supply/technology-overview/ Technology overview].&lt;br /&gt;
&lt;br /&gt;
The system is designed to be modular, so it can in principle have different power supply implementations and other custom modifications. A driver for this device should thus ideally be implemented in a dynamic way that can, as far as possible, respond to a particular system&amp;#039;s different capabilities.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The EEZ H24005 has a SCPI-based protocol available either over USB Serial or over TCP/IP on the device&amp;#039;s Ethernet port. The project website has [https://www.envox.eu/bench-power-supply/psu-scpi-reference-manual/ a comprehensive guide to the SCPI implementation].&lt;br /&gt;
&lt;br /&gt;
The SCPI self-identification strings (from &amp;lt;code&amp;gt;*IDN?&amp;lt;/code&amp;gt;) changed in firmware v1.02:&lt;br /&gt;
&lt;br /&gt;
* Before v1.02: &amp;lt;code&amp;gt;EEZ,PSU 2/40/5&amp;lt;/code&amp;gt; followed by the platform name&lt;br /&gt;
* v1.02 and later: &amp;lt;code&amp;gt;Envox,EEZ H24005&amp;lt;/code&amp;gt; followed by the platform name&lt;br /&gt;
&lt;br /&gt;
Only the newer form is shown in the documentation.&lt;br /&gt;
&lt;br /&gt;
There is [https://www.envox.hr/eez-psu-simulator/ an online simulator] which allows exercising both the touch user interface and the SCPI port. The simulator is an emscripten build of a variant of the real system firmware, so its behavior is pretty realistic aside from (of course) having just a software model of the power supply module behavior.&lt;br /&gt;
&lt;br /&gt;
== Sigrok Support ==&lt;br /&gt;
&lt;br /&gt;
The sigrok &amp;lt;code&amp;gt;scpi-pps&amp;lt;/code&amp;gt; driver supports the EEZ H24005, [[User:Apparentlymart]] provided the implementation.&lt;br /&gt;
&lt;br /&gt;
Only the USB port can be used to commnicate with the device. The firmware&amp;#039;s implementation of TCP over the ethernet port is broken.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Programmable power supply]]&lt;br /&gt;
* [[Power supply comparison]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Power supply]]&lt;br /&gt;
[[Category:Supported]]&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=APPA_Multimeters&amp;diff=16703</id>
		<title>APPA Multimeters</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=APPA_Multimeters&amp;diff=16703"/>
		<updated>2024-09-30T11:59:16Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* Device detection and identification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| name            = APPA Multimeters&lt;br /&gt;
| status          = in progress&lt;br /&gt;
| source_code_dir = appa-dmm&lt;br /&gt;
| connectivity    = Infrared (USB), Bluetooth LE&lt;br /&gt;
| website         = [http://www.appatech.com/en/product.html appatech.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Hand multimeters, bench versameters, current clamps and lcr meters with optical serial (USB) and BLE interface supported by the &amp;quot;&amp;#039;&amp;#039;&amp;#039;appa-dmm&amp;#039;&amp;#039;&amp;#039;&amp;quot; driver.&lt;br /&gt;
&lt;br /&gt;
The driver supporting these APPA-based devices (&amp;quot;appa-dmm&amp;quot; in sigrok) has been created and will be included in mainline sigrok once it passes acception (see developement repository [https://github.com/Cymaphore/libsigrok github.com/Cymaphore/libsigrok branch appa-dmm]).&lt;br /&gt;
&lt;br /&gt;
= Supported Series =&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;
! Series&lt;br /&gt;
! Type&lt;br /&gt;
! Optical RS232/USB&lt;br /&gt;
! Bluetooth LE&lt;br /&gt;
! Comments&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[APPA 100 Series]]&lt;br /&gt;
| Handheld Multimeter&lt;br /&gt;
| X&lt;br /&gt;
| &lt;br /&gt;
| experimental&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[APPA 150B Series]]&lt;br /&gt;
| Clamp Multimeter&lt;br /&gt;
| &lt;br /&gt;
| X&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[APPA 170 Series]]&lt;br /&gt;
| Clamp Multimeter&lt;br /&gt;
| &lt;br /&gt;
| X&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[APPA 200 Series]]&lt;br /&gt;
| Bench Multimeter&lt;br /&gt;
| X&lt;br /&gt;
| X*&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[APPA 300 Series]]&lt;br /&gt;
| Handheld Multimeter&lt;br /&gt;
| X&lt;br /&gt;
| &lt;br /&gt;
| experimental&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[APPA 500 Series]]&lt;br /&gt;
| Handheld Multimeter&lt;br /&gt;
| X&lt;br /&gt;
| X*&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[APPA 700 Series]]&lt;br /&gt;
| Handheld LCR Meters&lt;br /&gt;
| X&lt;br /&gt;
| &lt;br /&gt;
| maybe limited support, unknown&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[APPA A Series]]&lt;br /&gt;
| Clamp Multimeter&lt;br /&gt;
| &lt;br /&gt;
| X&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[APPA S Series]]&lt;br /&gt;
| Handheld Multimeter&lt;br /&gt;
| &lt;br /&gt;
| X&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[APPA sFlex Series]]&lt;br /&gt;
| Clamp Multimeter&lt;br /&gt;
| &lt;br /&gt;
| X&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: * BLE-Support on individual models&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
== Device detection and identification ==&lt;br /&gt;
&lt;br /&gt;
The driver automatically detects the device and its capabilities on connection. If a specific feature, for example data logging, is not supported by a specific device, it is for compatibility reasons visible in the driver but will return an empty result. Data acquisition can happen continuous or limited by time, sample count or frame count.&lt;br /&gt;
&lt;br /&gt;
If the model supports it, vendor and model information as well as the serial number are read from the device and can be accessed in sigrok. In case this fails, sigrok will report the device under its OEM designation.&lt;br /&gt;
&lt;br /&gt;
== Data sources ==&lt;br /&gt;
&lt;br /&gt;
=== Live (display readings) ===&lt;br /&gt;
&lt;br /&gt;
This data source provides the display readings of a device. If a reading is currently unavailable or disabled, inf or OL are reported. This is also the case for the Secondary Display for devices that don&amp;#039;t have this feature.&lt;br /&gt;
&lt;br /&gt;
Live readings usually contain all the information available via the APPA protocol that can be mapped to corresponding sigrok-values. If a meaning can not be mapped, it is ignored. Display text is decoded and will result in a warning-message containing the text. Menu operations are decoded as well and will also result in warning-messages. The driver is prepared to incorporate these message into sigrok-readings, in case sigrok ever supports this.&lt;br /&gt;
&lt;br /&gt;
Error messages from the device (Probe-Errors, Fuse-Errors, etc.) are reported using error messages.&lt;br /&gt;
&lt;br /&gt;
The sample rate of the readings depends on the connectivity used. By default, data as acquired from the device at 10 Hz and the polling is aligned with the clock of the host machine. If the connection method (for example BLE on some devices) doesn&amp;#039;t permit that rate, it is lowered and the polling timer will not be aligned with the host to still allow the highest possible data rate. The actual sample rate of the acquired readings depends on the capabilities of the device and the function in question.&lt;br /&gt;
&lt;br /&gt;
=== MEM (hold / auto-hold memory) ===&lt;br /&gt;
&lt;br /&gt;
Some of the models have an internal memory for single display readings based on auto hold or manual save features. These are individual records not related to each other without any sample rate. This data can be acquired / downloaded from the device using sigrok.&lt;br /&gt;
&lt;br /&gt;
The primary channel holds the reading, the secondary channel holds the ID of the record as stored in the device. The data can be exported as CSV-File using sigrok-cli.&lt;br /&gt;
&lt;br /&gt;
=== LOG (data logging memory) ===&lt;br /&gt;
&lt;br /&gt;
Many of the models have an internal memory to perform standalone data logging at a configurable sample rate. This data can be acquired / downloaded from the device using sigrok.&lt;br /&gt;
&lt;br /&gt;
The primary channel holds the reading, the secondary channel holds the ID of the record as stored in the device. The sample interval is obtained from the device, but it depends upon the sigrok-client to actually interpret it. The data can be exported as CSV-File using sigrok-cli.&lt;br /&gt;
&lt;br /&gt;
== Connectivity ==&lt;br /&gt;
&lt;br /&gt;
* Optical serial (USB cable, for example [[Device cables#APPA IC-300U|IC-300U]])&lt;br /&gt;
* Optical serial (RS232 cable, for example [[Device cables#APPA IC-300|IC-300]])&lt;br /&gt;
* Bluetooth LE&lt;br /&gt;
&lt;br /&gt;
The available connection method depends on the individual model.&lt;br /&gt;
&lt;br /&gt;
= Examples: Establish data connection between sigrok and MM 12 (APPA 506B) =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Important:&amp;#039;&amp;#039;&amp;#039; Driver is not (yet) part of mainline sigrok - see [https://github.com/Cymaphore/libsigrok this repository in github] if you want to use it already.&lt;br /&gt;
&lt;br /&gt;
== Serial/USB ==&lt;br /&gt;
&lt;br /&gt;
Assuming the meter is turned on, plugged in and the usb-serial driver is loadad and up (should happen automatically). /dev/ttyUSB0 is used as an example.&lt;br /&gt;
&lt;br /&gt;
List devices, if unsure what the serial port is:&lt;br /&gt;
&lt;br /&gt;
  # sigrok-cli --list-serial&lt;br /&gt;
  /dev/ttyUSB0  CP2102 USB to UART Bridge Controller - 2020y000231&lt;br /&gt;
&lt;br /&gt;
Scan for MM 12 with USB/Serial connection:&lt;br /&gt;
&lt;br /&gt;
  $ sigrok-cli -d benning-dmm:conn=/dev/ttyUSB0 --scan&lt;br /&gt;
&lt;br /&gt;
Show readings from connected meter:&lt;br /&gt;
&lt;br /&gt;
  $ sigrok-cli -d benning-dmm:conn=/dev/ttyUSB0 --continuous&lt;br /&gt;
&lt;br /&gt;
Open in SmuView:&lt;br /&gt;
&lt;br /&gt;
  $ smuview --driver benning-dmm:conn=/dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
== Bluetooth LE ==&lt;br /&gt;
&lt;br /&gt;
Assuming the meter is turned on and bluetooth activated on the meter and the PC. Important: Your Bluetooth-Controller must support BLE.&lt;br /&gt;
&lt;br /&gt;
Scan for BLE devices:&lt;br /&gt;
&lt;br /&gt;
  # sudo sigrok-cli --list-serial&lt;br /&gt;
  bt/appa-dmm/18-7A-93-BF-47-62   BENNING MM12 (BLE)&lt;br /&gt;
&lt;br /&gt;
If your OS / UI supports it, you can also use the Bluetooth scanning capability from the system tray and pick the MAC address from the details there.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;18:7A:93:BF:47:62&amp;quot; acts as an example for the device address you will find. For sigrok the &amp;quot;:&amp;quot; must be replaced by &amp;quot;-&amp;quot; for now. That device address is used for the following examples, just replace it by the address of your own meter.&lt;br /&gt;
&lt;br /&gt;
The full connection string then would look like this, as seen in the scanning result: bt/appa-dmm/18-7A-93-BF-47-62&lt;br /&gt;
&lt;br /&gt;
Scan for MM 12 with BLE connection:&lt;br /&gt;
&lt;br /&gt;
  $ sigrok-cli -d benning-dmm:conn=bt/appa-dmm/18-7A-93-BF-47-62 --scan&lt;br /&gt;
&lt;br /&gt;
Show readings from connected meter:&lt;br /&gt;
&lt;br /&gt;
  $ sigrok-cli -d benning-dmm:conn=bt/appa-dmm/18-7A-93-BF-47-62 --continuous&lt;br /&gt;
&lt;br /&gt;
Open in SmuView:&lt;br /&gt;
&lt;br /&gt;
  $ smuview --driver benning-dmm:conn=bt/appa-dmm/18-7A-93-BF-47-62&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Multimeter]]&lt;br /&gt;
[[Category:Bluetooth]]&lt;br /&gt;
[[Category:In progress]]&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Multimeter_ICs&amp;diff=14162</id>
		<title>Multimeter ICs</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Multimeter_ICs&amp;diff=14162"/>
		<updated>2019-03-29T08:03:19Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* Protocol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists some information about ICs commonly used in various multimeters (DMMs).&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Many multimeters use a special-purpose multimeter IC internally. This table lists those chips, as they&amp;#039;re often directly responsible for the protocol and data format of the PC logging functionality of a multimeter.&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;
! Vendor&lt;br /&gt;
! Device&lt;br /&gt;
! Builtin PC interface&lt;br /&gt;
! Comments&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cyrustek.com.tw Cyrustek]&lt;br /&gt;
| [http://www.cyrustek.com.tw/spec/ES51978.pdf ES51978]&lt;br /&gt;
| RS232, TX only, 2400 baud, 7o1&lt;br /&gt;
| Data is sent via the &amp;#039;&amp;#039;&amp;#039;SDO&amp;#039;&amp;#039;&amp;#039; pin. Data logging can be en/disabled via &amp;#039;&amp;#039;&amp;#039;RS232&amp;#039;&amp;#039;&amp;#039; pin.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cyrustek.com.tw Cyrustek]&lt;br /&gt;
| [http://www.cyrustek.com.tw/spec/ES51922.pdf ES51922]&lt;br /&gt;
| RS232, TX only, 19230 baud, 7o1&lt;br /&gt;
| Data is sent via the &amp;#039;&amp;#039;&amp;#039;SDO&amp;#039;&amp;#039;&amp;#039; pin. Data logging can be en/disabled via &amp;#039;&amp;#039;&amp;#039;RS232&amp;#039;&amp;#039;&amp;#039; pin. Some 3rd-party parsing utilities are listed [[#Cyrustek_ES51922|below]].&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.dreamtechintl.com.hk/aboutus.html Dream Tech International Ltd]&lt;br /&gt;
| [http://doc.wendoc.com/sfff2f1781c5f878a6cdadf2c.html DTM0660]&lt;br /&gt;
| RS232, TX only, 2400 baud, 8n1&lt;br /&gt;
| Some people think this chip is a copy of the [http://www.hycontek.com/e-page2-3.html HY12P65]. Protocol looks closely to the FS9721_LP3.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.ic-fortune.com/eng/new_product3_3.asp Fortune Semiconductor]&lt;br /&gt;
| [http://www.ic-fortune.com/upload/Download/FS9721_LP3-DS-20_EN.pdf FS9721_LP3]&lt;br /&gt;
| RS232, TX only, 2400 baud, 8n1&lt;br /&gt;
| Data is sent via the &amp;#039;&amp;#039;&amp;#039;TXD&amp;#039;&amp;#039;&amp;#039; pin. Data logging can be en/disabled via &amp;#039;&amp;#039;&amp;#039;ENTX&amp;#039;&amp;#039;&amp;#039; pin.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.ic-fortune.com/eng/new_product3_3.asp Fortune Semiconductor]&lt;br /&gt;
| [http://www.ic-fortune.com/upload/Download/FS9922-DMM4-DS-11_EN.pdf FS9922_DMM4]&lt;br /&gt;
| RS232, TX only, 2400 baud, 8n1 (?)&lt;br /&gt;
| Data is sent via the &amp;#039;&amp;#039;&amp;#039;TXD&amp;#039;&amp;#039;&amp;#039; pin. Data logging can be en/disabled via &amp;#039;&amp;#039;&amp;#039;TXEN&amp;#039;&amp;#039;&amp;#039; pin (?) and the &amp;#039;&amp;#039;&amp;#039;REL/RS232&amp;#039;&amp;#039;&amp;#039; pin (?).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Intersil&lt;br /&gt;
| ICL7106&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Intersil&lt;br /&gt;
| ICL7136&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Intersil&lt;br /&gt;
| ICL7139/ICL7149&lt;br /&gt;
| none (?)&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MASTECH&lt;br /&gt;
| M343-01&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Maxim&lt;br /&gt;
| MAX130/131&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Maxim&lt;br /&gt;
| MAX133/134&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Metex&lt;br /&gt;
| KS57C2016&lt;br /&gt;
| ?&lt;br /&gt;
| Possibly a relabel&amp;#039;d Samsung KS57C2016 4-bit microcontroller.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://semicon.njr.co.jp/eng/ New Japan Radio]&lt;br /&gt;
| [http://www.datasheetcatalog.com/datasheets_pdf/N/J/U/9/NJU9207.shtml NJU9207]&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| WENS&lt;br /&gt;
| WENS98A&lt;br /&gt;
| RS232, TX only, 9600 baud, 8n1&lt;br /&gt;
| used in Conrad Electronic / Voltcraft GDM 704&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Cyrustek ES51978 =&lt;br /&gt;
&lt;br /&gt;
The [http://www.cyrustek.com.tw Cyrustek] ES51978 is an all-in-one multimeter chip. The data protocol is well described in the datasheet.&lt;br /&gt;
&lt;br /&gt;
It is used in many multimeters, e.g. the [[ISO-TECH IDM103N]] or the ISO-TECH IDM 98II.&lt;br /&gt;
&lt;br /&gt;
See [[Multimeter ICs/Cyrustek ES519xx]] for a detailed comparison of the Cyrustek ES519xx IC series protocols.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.cyrustek.com.tw/spec/ES51978.pdf Datasheet]&lt;br /&gt;
* [http://www.flashingleds.net/rs232/rs232.html &amp;#039;Unlocking&amp;#039; multimeter RS232 output] (info on hooking up a Cyrustek based multimeter to a computer)&lt;br /&gt;
&lt;br /&gt;
= Cyrustek ES51922 =&lt;br /&gt;
&lt;br /&gt;
The [http://www.cyrustek.com.tw Cyrustek] ES51922 is an all-in-one multimeter chip. The data protocol is mostly described in the datasheet.&lt;br /&gt;
&lt;br /&gt;
It is used in many multimeters, e.g. the [[UNI-T UT61E]] or the [http://shaddack.twibright.com/projects/reveng_TD2200/ Wintex TD2200].&lt;br /&gt;
&lt;br /&gt;
See [[Multimeter ICs/Cyrustek ES519xx]] for a detailed comparison of the Cyrustek ES519xx IC series protocols.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.cyrustek.com.tw/spec/ES51922.pdf Datasheet]&lt;br /&gt;
* [https://bitbucket.org/kuzavas/dmm_es51922 Multimeter data parsing utility] complete implementation written in Python&lt;br /&gt;
* [http://diyftw.de/wiki/doku.php?id=projekte:ut61e diyftw.de: Uni-Trend UT61E (UT-D04 linux treiber)] (device info, Linux software using HIDAPI: [http://diyftw.de/wiki/lib/exe/fetch.php?media=projekte:ut61e-linux-sw-0.02.tar.gz ut61e-linux-sw-0.02.tar.gz])&lt;br /&gt;
* [http://www.steffenvogel.de/2009/11/29/uni-trend-ut61e-digital-multimeter/ Steffen Vogel: UNI-TREND UT61E Digital Multimeter] (device info, Linux software for serial port: [http://static.steffenvogel.de/wp-content/uploads/2009/11/dmmut61e-0.01.tar.gz dmmut61e-0.01.tar.gz])&lt;br /&gt;
&lt;br /&gt;
= Dream Tech International DTM0660 =&lt;br /&gt;
&lt;br /&gt;
Very little information is available about this chip, even though it was put on the market in 2013. Most of the information found on the web is in Chinese. Searches suggest that some PeakTech, UNI-T, RadioShack, and Velleman DMMs use that chip.&lt;br /&gt;
&lt;br /&gt;
[[File:DTM0660.jpg|thumbnail|right|DTM0660 in QFP package]]&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The protocol used by the DTM0660 looks similar to the one used by the FS9721_LP3 IC (see protocol description below), except that it adds one more byte to the packets (probably to accommodate supplemental symbols displayed on the LCD) and that the nibble order is reversed.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Protocol options&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Interestingly the datasheet indicates that the chip is able to send 14-bytes packets and that the nibble order can be inverted by programming a special register in EEPROM, potentially allowing a full FS9721_LP3 compatibility. This also means that devices using the DTM0660 could have different protocol versions.&lt;br /&gt;
&lt;br /&gt;
[[File:DTM0660 protocol options.png|thumbnail|right|DTM0660 protocol options]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Packet structure (can be affected by EEPROM registers)&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 sigroktable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Bits 7-4&lt;br /&gt;
! Bit 3&lt;br /&gt;
! Bit 2&lt;br /&gt;
! Bit 1&lt;br /&gt;
! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
| 0||0x1||RS232||Auto||DC||AC&lt;br /&gt;
|-&lt;br /&gt;
| 1||0x2||1A||1F||1E||- (minus)&lt;br /&gt;
|-&lt;br /&gt;
| 2||0x3||1B||1G||1C||1D&lt;br /&gt;
|-&lt;br /&gt;
| 3||0x4||2A||2F||2E||DP1&lt;br /&gt;
|-&lt;br /&gt;
| 4||0x5||2B||2G||2C||2D&lt;br /&gt;
|-&lt;br /&gt;
| 5||0x6||3A||3F||3E||DP2&lt;br /&gt;
|-&lt;br /&gt;
| 6||0x7||3B||3G||3C||3D&lt;br /&gt;
|-&lt;br /&gt;
| 7||0x8||4A||4F||4E||DP3&lt;br /&gt;
|-&lt;br /&gt;
| 8||0x9||4B||4G||4C||4D&lt;br /&gt;
|-&lt;br /&gt;
| 9||0xa||Diode||k||n||u&lt;br /&gt;
|-&lt;br /&gt;
| 10||0xb||Beep||M|| %||m&lt;br /&gt;
|-&lt;br /&gt;
| 11||0xc||Hold||Rel||Ohms||Farads&lt;br /&gt;
|-&lt;br /&gt;
| 12||0xd||Low battery||Hz||V||A&lt;br /&gt;
|-&lt;br /&gt;
| 13||0xe||User Def. 1||User Def. 2||Celsius||Fahrenheit&lt;br /&gt;
|-&lt;br /&gt;
| 14||0xf||Max||Min-Max||Min||Auto Power-Off&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the segment lettering used here follows the [https://en.wikipedia.org/wiki/Seven-segment_display#Concept_and_visual_structure standardised 7-digit notation]:&lt;br /&gt;
{{7seg|A|F|B|G|E|C|D}}&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [http://doc.wendoc.com/sfff2f1781c5f878a6cdadf2c.html Datasheet (Chinese)]&lt;br /&gt;
* [http://www.kerrywong.com/blog/wp-content/uploads/2016/04/DTM0660DataSheet.pdf Datasheet translation] courtesy of [http://www.kerrywong.com Kerry D. Wong] who hacked his ennoLogic eM860T True RMS Multimeter to enable RS232.&lt;br /&gt;
* [http://www.peaktech.de/productdetail/kategorie/digital---handmultimeter/produkt/peaktech-3415-usb.815.html?file=tl_files/Software/PeakTech_DMM%20Tool_ISO_complete_18082015.rar Peaktech 3415 software package], contains a file named &amp;quot;PeakTech device communication protocols 2015-07-20.pdf&amp;quot; documenting the protocol corresponding to this chip (among other protocols used by PeakTech).&lt;br /&gt;
&lt;br /&gt;
= Fortune Semiconductor FS9721_LP3 =&lt;br /&gt;
&lt;br /&gt;
[[File:Voltcraft vc820 fs9721 lp3.jpg|thumb|right|FS9721_LP3 on [[Voltcraft VC-820]].]]&lt;br /&gt;
[[File:Tp4000zc_chip.jpg|thumb|right|FS9721_LP3 (?) on [[TekPower TP4000ZC]].]]&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The chip periodically sends 14-byte packets at 2400 baud, 8n1.&lt;br /&gt;
The upper nibble of each byte indicates the byte number. The payload is composed of the lower nibbles, and is a 1-1 mapping of the LCD segments. The downside to this protocol structure is that transmission errors in the LSB nibbles cannot be detected. There is no checksum or CRC in the packet. The 4 user-defined bits can have different meaning on different multimeters using this IC.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Example Packet&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
17 27 3D 4F 5D 67 7D 87 9D A0 B0 C0 D4 E0 -&amp;gt; reads: DC 0.000V&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Packet structure:&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 sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Byte&lt;br /&gt;
! Bits 7-4&lt;br /&gt;
! Bit 3&lt;br /&gt;
! Bit 2&lt;br /&gt;
! Bit 1&lt;br /&gt;
! Bit 0&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; | 0x1&lt;br /&gt;
| AC&lt;br /&gt;
| DC&lt;br /&gt;
| Auto&lt;br /&gt;
| RS232&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; | 0x2&lt;br /&gt;
| Negative&lt;br /&gt;
| 1A&lt;br /&gt;
| 1B&lt;br /&gt;
| 1C&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; | 0x3&lt;br /&gt;
| 1D&lt;br /&gt;
| 1E&lt;br /&gt;
| 1F&lt;br /&gt;
| 1G&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; | 0x4&lt;br /&gt;
| DP1&lt;br /&gt;
| 2A&lt;br /&gt;
| 2B&lt;br /&gt;
| 2C&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; | 0x5&lt;br /&gt;
| 2D&lt;br /&gt;
| 2E&lt;br /&gt;
| 2F&lt;br /&gt;
| 2G&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; | 0x6&lt;br /&gt;
| DP2&lt;br /&gt;
| 3A&lt;br /&gt;
| 3B&lt;br /&gt;
| 3C&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; | 0x7&lt;br /&gt;
| 3D&lt;br /&gt;
| 3E&lt;br /&gt;
| 3F&lt;br /&gt;
| 3G&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; | 0x8&lt;br /&gt;
| DP3&lt;br /&gt;
| 4A&lt;br /&gt;
| 4B&lt;br /&gt;
| 4C&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; | 0x9&lt;br /&gt;
| 4D&lt;br /&gt;
| 4E&lt;br /&gt;
| 4F&lt;br /&gt;
| 4G&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; | 0xa&lt;br /&gt;
| u&lt;br /&gt;
| n&lt;br /&gt;
| k&lt;br /&gt;
| Diode&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; | 0xb&lt;br /&gt;
| m&lt;br /&gt;
| %&lt;br /&gt;
| M&lt;br /&gt;
| Beep&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; | 0xc&lt;br /&gt;
| Farads&lt;br /&gt;
| Ohms&lt;br /&gt;
| Rel&lt;br /&gt;
| Hold&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; | 0xd&lt;br /&gt;
| A&lt;br /&gt;
| V&lt;br /&gt;
| Hz&lt;br /&gt;
| Low battery&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; | 0xe&lt;br /&gt;
| User bit 3&lt;br /&gt;
| User bit 2&lt;br /&gt;
| User bit 1&lt;br /&gt;
| User bit 0&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Segment lettering:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{{7seg|C|B|G|F|A|E|D}}&lt;br /&gt;
&lt;br /&gt;
= Fortune Semiconductor FS9721B =&lt;br /&gt;
&lt;br /&gt;
TODO.&lt;br /&gt;
&lt;br /&gt;
= Fortune Semiconductor FS9922-DMM3 =&lt;br /&gt;
&lt;br /&gt;
TODO.&lt;br /&gt;
&lt;br /&gt;
= Fortune Semiconductor FS9922-DMM4 =&lt;br /&gt;
&lt;br /&gt;
[[File:Uni-t ut61d fs9922-dmm4.jpg|thumb|right|FS9922-DMM4 in a [[UNI-T UT61D]].]]&lt;br /&gt;
&lt;br /&gt;
The [http://www.ic-fortune.com/eng/ Fortune Semiconductor] FS9922-DMM4 ([http://www.ic-fortune.com/upload/Download/FS9922-DMM4-DS-11_EN.pdf datasheet]) is a widely used 6000-count auto-ranging DMM chip: it takes input from the various controls on the front panel, drives the LCD display, and can communicate its readings via a serial port.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
= Metex 14-byte ASCII =&lt;br /&gt;
&lt;br /&gt;
[[File:Mastech mas345 mastech m343-01.jpg|thumb|right|MASTECH M343-01 in a [[MASTECH MAS345]].]]&lt;br /&gt;
[[File:Rs_22_168_ics5.jpg|thumb|right|Metex KS57C2016 in a [[RadioShack 22-168]].]]&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
Various multimeters from Metex (and rebadged ones) use this common 14-byte packet based ASCII protocol. The actual multimeter ICs in the devices have different names (e.g. &amp;quot;MASTECH M343-01&amp;quot; or &amp;quot;Metex KS57C2016&amp;quot;) but they all use the same common protocol format.&lt;br /&gt;
&lt;br /&gt;
The serial port settings can vary from device to device, e.g. &amp;#039;&amp;#039;&amp;#039;600&amp;#039;&amp;#039;&amp;#039;/&amp;#039;&amp;#039;&amp;#039;1200&amp;#039;&amp;#039;&amp;#039; baud, &amp;#039;&amp;#039;&amp;#039;7n2&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;RTS low&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;DTR high&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Every time the host sends a (any?) character to the DMM (most software packages send a &amp;#039;&amp;#039;&amp;#039;D&amp;#039;&amp;#039;&amp;#039;/&amp;#039;&amp;#039;&amp;#039;0x44&amp;#039;&amp;#039;&amp;#039;), it returns &amp;#039;&amp;#039;&amp;#039;14 ASCII bytes&amp;#039;&amp;#039;&amp;#039; containing the measurement mode, value, and units. Even with continuous packet requests, the IC will only send a packet when a new measurement is available.&lt;br /&gt;
&lt;br /&gt;
There is no additional other information about the multimeter status returned in the packets (e.g. no low-battery bit, no relative/min/max/hold bits, and so on).&lt;br /&gt;
&lt;br /&gt;
=== Packet structure ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot; class=&amp;quot;alternategrey sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Byte(s)&lt;br /&gt;
!Description&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1-2&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Measuring mode&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;DC&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;AC&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;OH&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;CA&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;TE&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;DI&amp;#039;&amp;#039;&amp;#039;, ...)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Always a space&amp;#039;&amp;#039;&amp;#039; (?)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Sign&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;&amp;#039;-&amp;#039;&amp;#039;&amp;#039;&amp;#039; or &amp;#039; &amp;#039;, i.e. a minus or a space)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Decimal point and current measurement value&amp;#039;&amp;#039;&amp;#039; (Examples: &amp;#039;&amp;#039;&amp;#039;10.00&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;0L&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;3.999&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 10-13&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Unit&amp;#039;&amp;#039;&amp;#039; (Examples: &amp;#039;&amp;#039;&amp;#039;V&amp;#039;&amp;#039;&amp;#039;, mV, &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;mA&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;kOhm&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;MOhm&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;nF&amp;#039;&amp;#039;&amp;#039;, ...)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Carriage return&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;13&amp;#039;&amp;#039;&amp;#039;/&amp;#039;&amp;#039;&amp;#039;0x0d&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Example packets ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot; class=&amp;quot;alternategrey sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!01&lt;br /&gt;
!02&lt;br /&gt;
!03&lt;br /&gt;
!04&lt;br /&gt;
!05&lt;br /&gt;
!06&lt;br /&gt;
!07&lt;br /&gt;
!08&lt;br /&gt;
!09&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| D&lt;br /&gt;
| C&lt;br /&gt;
| &lt;br /&gt;
| -&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| .&lt;br /&gt;
| 0&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| V&lt;br /&gt;
| \r&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| A&lt;br /&gt;
| C&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| .&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| A&lt;br /&gt;
| \r&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| C&lt;br /&gt;
| A&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0&lt;br /&gt;
| .&lt;br /&gt;
| 0&lt;br /&gt;
| 7&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| n&lt;br /&gt;
| F&lt;br /&gt;
| \r&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| O&lt;br /&gt;
| H&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| O&lt;br /&gt;
| .&lt;br /&gt;
| L&lt;br /&gt;
| &lt;br /&gt;
| M&lt;br /&gt;
| O&lt;br /&gt;
| h&lt;br /&gt;
| m&lt;br /&gt;
| \r&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Alternative Protocol ==&lt;br /&gt;
&lt;br /&gt;
Some older devices like the [[Voltcraft M-3650CR]] use a slightly different protocol:&lt;br /&gt;
&lt;br /&gt;
=== Packets ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot; class=&amp;quot;alternategrey sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Range !! 00 !! 01 !! 02 !! 03 !! 04 !! 05 !! 06 !! 07 !! 08 !! 09 !! 10 !! 11 !! 12 !! 13 !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
| All || || || || || || || || || Sp || || || || || \r ||&lt;br /&gt;
|-&lt;br /&gt;
| D/Beep ||  ||  || || || || O || L || || || m || V || || || || No contact&lt;br /&gt;
|-&lt;br /&gt;
|  || || || || 1 || 2 || 3 || 4 || || || m || V || || || || Contact/forward voltage&lt;br /&gt;
|-&lt;br /&gt;
| 200 Ω || || || || || || O || . || L || || || O || h || m || || No contact/overload (invalid value)&lt;br /&gt;
|-&lt;br /&gt;
|            || || || || 1 || 2 || 3 || . || 4 || || || O || h || m || || Value&lt;br /&gt;
|-&lt;br /&gt;
| 2 kΩ    || || || ||  || . || || O || L || || k || O || h || m || || No contact/overload (invalid value)&lt;br /&gt;
|-&lt;br /&gt;
|           || || || || 1 || . ||2 || 3 || 4 || || k || O || h || m || || &lt;br /&gt;
|-&lt;br /&gt;
| 20 kΩ || || || ||  || || . || O || L || || k || O || h || m || || No contact/overload (invalid value)&lt;br /&gt;
|-&lt;br /&gt;
|           || || || || 1 || 2 || . || 3 || 4 || || k || O || h || m || || &lt;br /&gt;
|-&lt;br /&gt;
| 200 kΩ || || || ||  || || O || . || L || || k || O || h || m || || No contact/overload (invalid value)&lt;br /&gt;
|-&lt;br /&gt;
|           || || || || 1 || 2 || 3 || . || 4 || || k || O || h || m || || &lt;br /&gt;
|-&lt;br /&gt;
| 2 MΩ   || || || ||  || . || || O || L || || M || O || h || m || || No contact/overload (invalid value)&lt;br /&gt;
|-&lt;br /&gt;
|           || || || || 1 || . ||2 || 3 || 4 || || M || O || h || m || || &lt;br /&gt;
|-&lt;br /&gt;
| 20 MΩ   || || || ||  || || . || O || L || || M || O || h || m || || No contact/overload (invalid value)&lt;br /&gt;
|-&lt;br /&gt;
|           || || || || 1 || 2 || . || 3 || 4 || || M || O || h || m || || &lt;br /&gt;
|-&lt;br /&gt;
| 200 mV = || D || C || || || || O || . || L || || m || V || || || || Overload&lt;br /&gt;
|-&lt;br /&gt;
|           || D || C || - || 1 || 2 || 3 || . || 4 || || m || V || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 2 V = || D || C || || || . || || O || L || || || V || || || || Overload&lt;br /&gt;
|-&lt;br /&gt;
|           || D|| C || - || 1 || . ||2 || 3 || 4 || || || V || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 20 V = || D || C || ||  || || . || O || L || ||  || V || || || || Overload&lt;br /&gt;
|-&lt;br /&gt;
|           || D || C || || 1 || 2 || . || 3 || 4 || || || V || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 200 V = || D || C || ||  || || O || . || L || || || V || || || || Overload (guessed, not tried ;-))&lt;br /&gt;
|-&lt;br /&gt;
|           || D || C || - || 1 || 2 || 3 || . || 4 || || || V || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 1000 V = || D || C || ||  || || O || L || || || || V || || || || Overload (guessed...)&lt;br /&gt;
|-&lt;br /&gt;
|           || D|| C || - || 1 || 2 || 3 || 4 || || || || V || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 200 mV ≈ || A || C || || || || O || . || L || || m || V || || || || Overload&lt;br /&gt;
|-&lt;br /&gt;
|           || A || C || || 1 || 2 || 3 || . || 4 || || m || V || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 2 V ≈ || A || C || || || . || || O || L || || || V || || || || Overload&lt;br /&gt;
|-&lt;br /&gt;
|           || A|| C || || 1 || . ||2 || 3 || 4 || || || V || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 V ≈ || A || C || ||  || || . || O || L || ||  || V || || || || Overload&lt;br /&gt;
|-&lt;br /&gt;
|           || A || C || || 1 || 2 || . || 3 || 4 || || || V || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 200 V ≈ || A || C || ||  || || O || . || L || || || V || || || || Overload&lt;br /&gt;
|-&lt;br /&gt;
|           || A || C ||  || 1 || 2 || 3 || . || 4 || || || V || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 750 V ≈ || A || C || ||  || || O || L || || || || V || || || || Overload (guessed, not tried ;-))&lt;br /&gt;
|-&lt;br /&gt;
|           || A|| C || || 1 || 2 || 3 || 4 || || || || V || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 2 mA = || D || C ||  ||  || . || O || L || || || m || A || || || || Overload, over measurement range&lt;br /&gt;
|-&lt;br /&gt;
| || D || C || - || 1 || . || 2 || 3 || 4 || || m || A || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 200 mA = || D || C ||  || || || O || . || L || || m || A || || || || Overload, over measurement range&lt;br /&gt;
|-&lt;br /&gt;
| || D || C || - || 1 || 2 || 3 || . || 4 || || m || A || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 20 A = || D || C ||  || || O || . || L || || ||  || A || || || || Overload, over measurement range (guessed, not tried)&lt;br /&gt;
|-&lt;br /&gt;
| || D || C || - || 1 || 2 || . || 3 || 4 || || || A || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 2 mA ≈ || A || C || ||  || . || O || L || || || m || A || || || || Overload, over measurement range&lt;br /&gt;
|-&lt;br /&gt;
| || A || C || || 1 || . || 2 || 3 || 4 || || m || A || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 200 mA ≈ || A || C ||  || || || O || . || L || || m || A || || || || Overload, over measurement range&lt;br /&gt;
|-&lt;br /&gt;
| || A || C || || 1 || 2 || 3 || . || 4 || || m || A || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 20 A ≈ || A || C || || || O || . || L || || ||  || A || || || || Overload, over measurement range (guessed, not tried)&lt;br /&gt;
|-&lt;br /&gt;
| || A || C || || 1 || 2 || . || 3 || 4 || || || A || || || || &lt;br /&gt;
|-&lt;br /&gt;
| hFE || || || || 1 || 2 || 3 || 4 || || || || || || || || &lt;br /&gt;
|-&lt;br /&gt;
| Logics || || || || R || E || A || D || Y || || || || || || || Start status&lt;br /&gt;
|-&lt;br /&gt;
|  || || || || H || i || || || || || || || || || || High.&lt;br /&gt;
|-&lt;br /&gt;
|  || || || || L || o || || || || || || || || || || Low.&lt;br /&gt;
|-&lt;br /&gt;
|  || || || || F || L || O || A || T || || || || || || || Undefined state.&lt;br /&gt;
|-&lt;br /&gt;
| 2000 pF || || || ||  ||  || O || L || || || p || F || || || || Overload (capacity larger than measurement range)&lt;br /&gt;
|-&lt;br /&gt;
|| || || ||  || 1 || 2 || 3 || 4 || || || p || F || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 200 nF || || || || ||  || O || . || L || || n || F || || || || Overload (capacity larger than measurement range)&lt;br /&gt;
|-&lt;br /&gt;
|| || || || || 1 || 2 || 3 || . || 4 || || n || F || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 20 μF || || || || || || . || O || L || || u || F || || || || Overload (capacity larger than measurement range)&lt;br /&gt;
|-&lt;br /&gt;
|| || || || || 1 || 2 || . || 2 || 4 || || u || F || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 20 kHz || || || || 0 || 1 || . || 2 || 3 || || k || H || z || || || &lt;br /&gt;
|-&lt;br /&gt;
| 200 kHz || || || || 0 || 1 || 2 || . || 3 || || k || H || z || || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;-&amp;quot; means &amp;quot;-&amp;quot; for negative value, space for positive value.&lt;br /&gt;
&lt;br /&gt;
=== Commands ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot; class=&amp;quot;alternategrey sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command !! &lt;br /&gt;
|-&lt;br /&gt;
| D || Send data currently displayed&lt;br /&gt;
|-f&lt;br /&gt;
| M || Send data stored in memory (up to 5 data sets)&lt;br /&gt;
|-&lt;br /&gt;
| C || Clear data memory&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= WENS98A / Voltcraft GDM 704 = &lt;br /&gt;
&lt;br /&gt;
== Protocol == &lt;br /&gt;
&lt;br /&gt;
The WENS98A supports two transmission modes, data mode (also &amp;quot;basic mode&amp;quot;), and screenshot mode (also &amp;quot;bit map mode&amp;quot;). Only data mode will be described below. &lt;br /&gt;
&lt;br /&gt;
In data mode, the GDM 704 continuously sends 26 Byte data packets of the following form: &lt;br /&gt;
&lt;br /&gt;
: &amp;lt;code&amp;gt;b M . S VVVVV UUUU .. s vvvvv uuuu e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot; class=&amp;quot;alternategrey sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Segment !! Position !! Length !! Description !! Example !! &lt;br /&gt;
|-&lt;br /&gt;
| b || 0 || 1 || beginning of packet (constant 0x02) || &amp;lt;0x02&amp;gt; || Packets can be detected in the data stream by looking for 24 &amp;quot;meaningful&amp;quot; bytes enclosed in an &amp;lt;0x02&amp;gt; / &amp;lt;0x03&amp;gt; pair. &lt;br /&gt;
|-&lt;br /&gt;
| M || 1 || 1 || mode indicator || A || single letter, A..R&lt;br /&gt;
|- &lt;br /&gt;
| . || 2 || 1 || &amp;#039;&amp;#039;ignore&amp;#039;&amp;#039; ||  || &lt;br /&gt;
|- &lt;br /&gt;
| S || 3 || 1 || main value sign ||  || &amp;lt;space&amp;gt; when positive, &amp;#039;-&amp;#039; when negative&lt;br /&gt;
|- &lt;br /&gt;
| VVVVV || 4 || 5 || main value || 0.025 || four digits plus (floating) decimal point, zero-padded&lt;br /&gt;
|- &lt;br /&gt;
| UUUU || 9 || 4 || main value unit || Vac || left-aligned&lt;br /&gt;
|- &lt;br /&gt;
| .. || 13 || 2 || &amp;#039;&amp;#039;ignore&amp;#039;&amp;#039; ||  || &lt;br /&gt;
|-&lt;br /&gt;
| s || 15 || 1 || secondary value sign ||  || &amp;lt;space&amp;gt; when positive, &amp;#039;-&amp;#039; when negative&lt;br /&gt;
|- &lt;br /&gt;
| vvvvv || 16 || 5 || secondary value ||   50 || up to five digits, or four digits plus (floating) decimal point, zero-padded or right-alined&lt;br /&gt;
|- &lt;br /&gt;
| uuuu || 21 || 4 || secondary value unit || Hz || &lt;br /&gt;
|- &lt;br /&gt;
| e || 25 || 1 || end of packet (constant 0x03) || &amp;lt;0x03&amp;gt; ||  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The mode indicator can take the following values: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot; class=&amp;quot;alternategrey sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mode Indicator !! Mode Name !! Primary Value !! Secondary Value !! Example !! &lt;br /&gt;
|-&lt;br /&gt;
| A || Voltage AC || Voltage || Frequency || &amp;lt;code&amp;gt;AB&amp;amp;nbsp;0.025Vac&amp;amp;nbsp;&amp;amp;nbsp;B&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;50&amp;amp;nbsp;Hz&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| B || Voltage DC || Voltage || Frequency || &amp;lt;code&amp;gt;BB&amp;amp;nbsp;0.020Vdc&amp;amp;nbsp;&amp;amp;nbsp;B&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0&amp;amp;nbsp;Hz&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| C || Voltage AC (mV / high input impedance) || Voltage || Frequency || &amp;lt;code&amp;gt;CB&amp;amp;nbsp;000.0mVac&amp;amp;nbsp;B&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0&amp;amp;nbsp;Hz&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| D || Voltage DC (mV / high input impedance) || Voltage || Frequency || &amp;lt;code&amp;gt;DB&amp;amp;nbsp;000.0mVdc&amp;amp;nbsp;B&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0&amp;amp;nbsp;Hz&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| E || Resistance || Resistance || (Frequency) || &amp;lt;code&amp;gt;EB&amp;amp;nbsp;14.02MOHM&amp;amp;nbsp;B&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 Hz&amp;lt;/code&amp;gt; || Frequency is somewhat meaningless and, in my experience, always zero&lt;br /&gt;
|-&lt;br /&gt;
| G || Diode Test || Voltage || (Voltage) || &amp;lt;code&amp;gt;GB&amp;amp;nbsp;4.000Vdc&amp;amp;nbsp;&amp;amp;nbsp;B&amp;amp;nbsp;4.000Vdc&amp;lt;/code&amp;gt; || both voltages are identical&lt;br /&gt;
|-&lt;br /&gt;
| H || Capacitance || Capacitance || (Frequency) || &amp;lt;code&amp;gt;HB&amp;amp;nbsp;0.000nF&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;B&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0&amp;amp;nbsp;Hz&amp;lt;/code&amp;gt; || Frequency is somewhat meaningless and, in my experience, always zero&lt;br /&gt;
|-&lt;br /&gt;
| I || Current AC (mA/µA) || Current || Frequency || &amp;lt;code&amp;gt;IB&amp;amp;nbsp;003.4mAac&amp;amp;nbsp;B&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0&amp;amp;nbsp;Hz&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| J || Current DC (mA/µA) || Current || Frequency || &amp;lt;code&amp;gt;JB&amp;amp;nbsp;000.8mAdc&amp;amp;nbsp;B&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0&amp;amp;nbsp;Hz&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| K || Current AC (20A) || Current || Frequency || &amp;lt;code&amp;gt;KB&amp;amp;nbsp;00.10Aac&amp;amp;nbsp;&amp;amp;nbsp;B&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0&amp;amp;nbsp;Hz&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| L || Current DC (20A) || Current || Frequency || &amp;lt;code&amp;gt;LB&amp;amp;nbsp;00.00Adc&amp;amp;nbsp;&amp;amp;nbsp;B&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0&amp;amp;nbsp;Hz&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| M || Logic || Voltage? || (Frequency) || &amp;lt;code&amp;gt;MB&amp;amp;nbsp;04.45&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;B&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0&amp;amp;nbsp;Hz&amp;lt;/code&amp;gt; || Voltage is given without units; Frequency is meaningless&lt;br /&gt;
|- &lt;br /&gt;
| O || Temperature || Temperature (°C) || Temperature (°F) || &amp;lt;code&amp;gt;OB&amp;amp;nbsp;000.0@C&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;B&amp;amp;nbsp;&amp;amp;nbsp;0032@F&amp;lt;/code&amp;gt; || with external adapter&lt;br /&gt;
|-&lt;br /&gt;
| P || relative Humidity || rel. Humidity || (Voltage) || &amp;lt;code&amp;gt;PB-000.0%RH&amp;amp;nbsp;&amp;amp;nbsp;B&amp;amp;nbsp;&amp;amp;nbsp;5.00Vdc&amp;lt;/code&amp;gt; || with external adapter; Voltage is meaningless&lt;br /&gt;
|-&lt;br /&gt;
| Q || Pressure || Pressure (psi) || Pressure (kPA) || &amp;lt;code&amp;gt;QB-000.0psi&amp;amp;nbsp;&amp;amp;nbsp;B&amp;amp;nbsp;&amp;amp;nbsp;0000kPa&amp;lt;/code&amp;gt; || with external adapter&lt;br /&gt;
|-&lt;br /&gt;
| R || Current (High Current) || Current || Frequency || &amp;lt;code&amp;gt;RB&amp;amp;nbsp;023.3Aac&amp;amp;nbsp;&amp;amp;nbsp;B&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0&amp;amp;nbsp;Hz&amp;lt;/code&amp;gt; || with external adapter&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Modes F, N, S, T are described in the documentation, but not produced by my GDM 704. Instead, the multimeter does not transmit anything in those modes. &lt;br /&gt;
&lt;br /&gt;
Mode Z indicates screenshot mode. &lt;br /&gt;
&lt;br /&gt;
The same protocol is &amp;#039;&amp;#039;probably&amp;#039;&amp;#039; also used by the GDM 703 and the GDM 705.&lt;br /&gt;
&lt;br /&gt;
== Resources == &lt;br /&gt;
&lt;br /&gt;
* [http://www.produktinfo.conrad.com/datenblaetter/100000-124999/120700-an-01-de-Grafisches_Display_Multimeter_GDM_704.pdf GDM 704 User Manual (German)]&lt;br /&gt;
* [http://www.produktinfo.conrad.com/datenblaetter/100000-124999/120700-an-01-en-Kalibrieranleitung_GDM_704.pdf GDM 704 Calibration Procedure / Circuit Diagram / Parts List ]&lt;br /&gt;
* [http://www.produktinfo.conrad.com/datenblaetter/100000-124999/120700-da-01-en-Schnittstellenbeschreibung_GDM704.pdf GDM 704 Interface Description]&lt;br /&gt;
* [http://www.mtoussaint.de/cdmm/doc/html/classGDM703.html earlier implementation (as part of the QtDMM project)]&lt;br /&gt;
* [http://www.mtoussaint.de/qtdmm.html the QtDMM project]&lt;br /&gt;
* [https://www.elektroda.pl/rtvforum/topic1678487.html some pictures of the insides of the GDM 704]&lt;br /&gt;
&lt;br /&gt;
[[Category:Multimeter IC]]&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Main_Page&amp;diff=355</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Main_Page&amp;diff=355"/>
		<updated>2010-04-11T09:33:40Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;td width=&amp;quot;80%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:0.5em; margin-bottom:0.5em; padding:0.5em 0.5em 0.5em 0.5em; background-color:#cfdfff; align:right; border:1px solid #aabbcc;&amp;quot;&amp;gt;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;sigrok&amp;#039;&amp;#039;&amp;#039; project aims at creating a portable, cross-platform, Free/Libre/Open-Source logic analyzer software that supports various (usually USB-based) logic analyzer hardware products. The code is licensed under the terms of the &amp;#039;&amp;#039;&amp;#039;GNU GPL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;Design goals&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Broad hardware support&amp;#039;&amp;#039;&amp;#039;. Supports a wide variety of logic analyzers from various vendors with different capabilities.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cross-platform&amp;#039;&amp;#039;&amp;#039;. Works on [[Linux]], [[Mac OS X]] and [[Windows]], and on many architectures including x86, ARM, Sparc and PowerPC.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Scriptable protocol decoding&amp;#039;&amp;#039;&amp;#039;. Extendable with [[protocol decoders]] and analyzers written in Python.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Format support&amp;#039;&amp;#039;&amp;#039;. Supports various [[Input output formats|input and output formats]] (raw, ASCII, hex, CSV, gnuplot, [http://en.wikipedia.org/wiki/Value_change_dump VCD], others).&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;Supported hardware&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;120px&amp;quot; heights=&amp;quot;70px&amp;quot;&amp;gt;&lt;br /&gt;
File:Saleae Logic.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Saleae Logic]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(supported)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Open workbench logic sniffer.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Openbench Logic Sniffer]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(work in progress)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus Logic Cube.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[ZEROPLUS Logic Cube LAP-C]]&amp;#039;&amp;#039;&amp;#039; (work in progress)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Cwav usbee sx.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[CWAV USBee SX]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(coming up)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology usb lps.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Braintechnology USB-LPS]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Buspirate v3.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Buspirate]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Intronix Logicport.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Intronix Logicport]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot; width=&amp;quot;30%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[File:Sigrok_stone.png]] &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;Documentation&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
* [[Downloads]]&lt;br /&gt;
* [[Supported hardware]]&lt;br /&gt;
* [[Command-line]]&lt;br /&gt;
* [[GUI|Cross-platform GUI]]&lt;br /&gt;
* [[Input output formats]]&lt;br /&gt;
* [[Status]]&lt;br /&gt;
* [[FAQ]]&lt;br /&gt;
* [[News]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot; width=&amp;quot;30%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[File:Sigrok_stone.png]] &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;Development&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
* [[TODO]]&lt;br /&gt;
* [[Design Ideas]]&lt;br /&gt;
* [[Protocol decoders]]&lt;br /&gt;
* Build info: [[Linux]], [[Mac OS X]], [[Windows]]&lt;br /&gt;
* [[Formats and structures]]&lt;br /&gt;
* [[Hardware plugin API]]&lt;br /&gt;
* [[Output API]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot; width=&amp;quot;40%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[File:Sigrok_stone.png]] &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;Getting in touch&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
* Mailing lists: [https://lists.sourceforge.net/lists/listinfo/sigrok-devel sigrok-devel] (archived on [http://news.gmane.org/gmane.comp.debugging.sigrok.devel gmane]),  [https://lists.sourceforge.net/lists/listinfo/sigrok-commits sigrok-commits].&lt;br /&gt;
* IRC: &amp;#039;&amp;#039;&amp;#039;[irc://chat.freenode.net/sigrok #sigrok]&amp;#039;&amp;#039;&amp;#039; on [http://www.freenode.net Freenode]&lt;br /&gt;
* identi.ca: [http://www.identi.ca/group/sigrok sigrok group]&lt;br /&gt;
* Sites: [http://sourceforge.net/projects/sigrok/ SF], [http://freshmeat.net/projects/sigrok Fm], [https://www.ohloh.net/p/sigrok ohloh], [http://delicious.com/url/d8996d567839064c799ac217b263b2c8 del.icio.us]&lt;br /&gt;
* [[Press]]&lt;br /&gt;
* [[Logo]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;20%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Sigrok linux.png|center|thumb|sigrok-gui on Linux]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;span style=&amp;quot;font-variant:small-caps; font-size:120%&amp;quot;&amp;gt;[[File:Sigrok_stone.png]] [[News]]&amp;lt;/span&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;!-- Please always make this list 7 items long (7 most recent news items). --&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2010/04/06:&amp;#039;&amp;#039;&amp;#039; VCD and Gnuplot output&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2010/04/01:&amp;#039;&amp;#039;&amp;#039; [[ZEROPLUS Logic Cube LAP-C]] support&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2010/03/30:&amp;#039;&amp;#039;&amp;#039; libsigrokdecode started&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2010/03/19:&amp;#039;&amp;#039;&amp;#039; GUI: i18n support&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2010/03/17:&amp;#039;&amp;#039;&amp;#039; Session save support&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2010/03/16:&amp;#039;&amp;#039;&amp;#039; GUI started&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2010/03/14:&amp;#039;&amp;#039;&amp;#039; Official project start&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;IMPORTANT: Please note that (unless explicitly specified otherwise) all contents in this wiki (including text and images) are released to the &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;CC-BY-SA 3.0&amp;lt;/span&amp;gt;. If you don&amp;#039;t want that, please explicitly specify another free-ish license when adding pages or images to the wiki!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=TODO&amp;diff=354</id>
		<title>TODO</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=TODO&amp;diff=354"/>
		<updated>2010-04-11T01:21:40Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* General */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a random list of TODO items for the code and/or ideas for improvements.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* Remove dependency on glib and gmodule (various reasons), at least in libsigrok, probably also in sigrok-cli.&lt;br /&gt;
** A new linked list implementation must be found, or written, that duplicates the important parts of glib&amp;#039;s GSList (singly-linked list).&lt;br /&gt;
** sigrok uses uint64_t as an internal datatype to represent a sample, limiting the number of probes on supported hardware to 64. But high-end logic analyzers can have hundreds of probes. A solution would be to switch to either a roll-our-own byte array type, or use [http://gmplib.org/ GMP]. In any case, the overhead of switching over shouldn&amp;#039;t be too bad: the filter code and frontend datafeed callback functions will need to use it, but hardware drivers should have enough with a couple of lightweight wrappers.&lt;br /&gt;
&lt;br /&gt;
== libsigrok ==&lt;br /&gt;
&lt;br /&gt;
* Test whether the libusb 1.0 [[Windows]] port works (seems to build fine using MinGW).&lt;br /&gt;
* Session loading from file.&lt;br /&gt;
* sigrok_errno:&lt;br /&gt;
** Most backend functions return status as an integer, which is SIGROK_OK if all went well, or SIGROK_ERR_* and similar if an error occurred.&lt;br /&gt;
** However there is no way to pass any information back as to what went wrong &amp;amp;mdash; and this is important for user-friendliness.&lt;br /&gt;
** Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, &amp;quot;unsupported device&amp;quot;) is better.&lt;br /&gt;
** Both the cmdline and GUI interfaces need this, really, so it should be a backend library thing.&lt;br /&gt;
&lt;br /&gt;
== libsigrokdecode ==&lt;br /&gt;
&lt;br /&gt;
* Keep this independent of libsigrok and any logic analyzer hardware. It should work purely on streams / buffers of bytes to be usable by other projects.&lt;br /&gt;
&lt;br /&gt;
== Hardware drivers ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Bus/driver-independent device instance struct, to replace usb_device_instance and serial_device_instance. Once this is done, device instance-specific information can be cleanly separated and tacked on to the generic device instance:&amp;lt;/s&amp;gt;&lt;br /&gt;
** &amp;lt;s&amp;gt;Vendor/model/version scheme in hardware drivers.&amp;lt;/s&amp;gt;&lt;br /&gt;
** Clean up device-specific globals in hardware drivers, to properly permit multiple devices per driver.&lt;br /&gt;
&lt;br /&gt;
{{fontcolor|green|Bert is working on this.}}&lt;br /&gt;
&lt;br /&gt;
==== Demo driver ====&lt;br /&gt;
&lt;br /&gt;
It would be good if sigrok would ship with a built-in driver that always works, regardless of hardware connected. This driver would be configurable to provide a clock on a virtual pin, with configurable frequency. It could support multiple of these, at different frequencies.&lt;br /&gt;
&lt;br /&gt;
In addition to giving anyone something to do with sigrok to try it out, this may also have some use cases outside of this: perhaps as a reference clock, next to a live capture.&lt;br /&gt;
&lt;br /&gt;
Since this driver only needs to change to 0/1 at a configurable interval, and the interval is exactly the same as the count of the samples in the datafeed it outputs, the signal it generates would thus be 100% perfect, making it an interesting reference.&lt;br /&gt;
&lt;br /&gt;
==== Open-source firmware for the FX2 devices ====&lt;br /&gt;
&lt;br /&gt;
The Cypress FX2-based devices, such as the Saleae Logic and the USBee SX, use only a minimal vendor-provided firmware. The only thing it really does is set the sample rate and turn on the chip&amp;#039;s auto-mode. Nevertheless, the vendors provide the firmware as a binary blob, with no source.&lt;br /&gt;
&lt;br /&gt;
It would be great if sigrok could ship with an own firmware implementation for these devices. Some links:&lt;br /&gt;
&lt;br /&gt;
* [http://sdcc.sourceforge.net/ SDCC], the Small Devices C Compiler, is a compiler specifically suited to small MCUs, and has support for the 8051 core in the FX2.&lt;br /&gt;
* [http://allmybrain.com/2008/12/05/an-open-source-library-for-writing-firmware-on-the-cypress-fx2-with-sdcc/ fx2lib] is an open-source library for writing firmware on the FX2. It has a number of interesting functions, including implementing custom USB vendor commands.&lt;br /&gt;
* [http://gnuradio.org/ GNU Radio]&amp;#039;s USRP2 board has an FX2 on it, and GNU Radio has extensive custom firmware for it.&lt;br /&gt;
&lt;br /&gt;
[[User:Uwe Hermann|Uwe Hermann]] is working on an open-source FX2 firmware for use with various logic analyzers.&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli ==&lt;br /&gt;
&lt;br /&gt;
== sigrok-gui ==&lt;br /&gt;
&lt;br /&gt;
== Decoders ==&lt;br /&gt;
&lt;br /&gt;
== Code quality and build ==&lt;br /&gt;
&lt;br /&gt;
* Consistently use uint64_t for large data types such as samplerate, number of samples, etc.&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=TODO&amp;diff=353</id>
		<title>TODO</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=TODO&amp;diff=353"/>
		<updated>2010-04-11T01:20:50Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* General */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a random list of TODO items for the code and/or ideas for improvements.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* Remove dependency on glib and gmodule (various reasons), at least in libsigrok, probably also in sigrok-cli.&lt;br /&gt;
** A new linked list implementation must be found, or written, that duplicates the important parts of glib&amp;#039;s GSList (singly-linked list).&lt;br /&gt;
** sigrok uses uint64_t as an internal datatype to represent a sample, limiting the number of probes on supported hardware to 64. But high-end logic analyzers can have hundreds of probes. A solution would be to switch to either a roll-your-own byte array type, or use [http://gmplib.org/ GMP]. In any case, the overhead of switching over shouldn&amp;#039;t be too bad: the filter code and frontend datafeed callbacks functions will need to use it, but hardware drivers should have enough with a couple of lightweight wrappers.&lt;br /&gt;
&lt;br /&gt;
== libsigrok ==&lt;br /&gt;
&lt;br /&gt;
* Test whether the libusb 1.0 [[Windows]] port works (seems to build fine using MinGW).&lt;br /&gt;
* Session loading from file.&lt;br /&gt;
* sigrok_errno:&lt;br /&gt;
** Most backend functions return status as an integer, which is SIGROK_OK if all went well, or SIGROK_ERR_* and similar if an error occurred.&lt;br /&gt;
** However there is no way to pass any information back as to what went wrong &amp;amp;mdash; and this is important for user-friendliness.&lt;br /&gt;
** Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, &amp;quot;unsupported device&amp;quot;) is better.&lt;br /&gt;
** Both the cmdline and GUI interfaces need this, really, so it should be a backend library thing.&lt;br /&gt;
&lt;br /&gt;
== libsigrokdecode ==&lt;br /&gt;
&lt;br /&gt;
* Keep this independent of libsigrok and any logic analyzer hardware. It should work purely on streams / buffers of bytes to be usable by other projects.&lt;br /&gt;
&lt;br /&gt;
== Hardware drivers ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Bus/driver-independent device instance struct, to replace usb_device_instance and serial_device_instance. Once this is done, device instance-specific information can be cleanly separated and tacked on to the generic device instance:&amp;lt;/s&amp;gt;&lt;br /&gt;
** &amp;lt;s&amp;gt;Vendor/model/version scheme in hardware drivers.&amp;lt;/s&amp;gt;&lt;br /&gt;
** Clean up device-specific globals in hardware drivers, to properly permit multiple devices per driver.&lt;br /&gt;
&lt;br /&gt;
{{fontcolor|green|Bert is working on this.}}&lt;br /&gt;
&lt;br /&gt;
==== Demo driver ====&lt;br /&gt;
&lt;br /&gt;
It would be good if sigrok would ship with a built-in driver that always works, regardless of hardware connected. This driver would be configurable to provide a clock on a virtual pin, with configurable frequency. It could support multiple of these, at different frequencies.&lt;br /&gt;
&lt;br /&gt;
In addition to giving anyone something to do with sigrok to try it out, this may also have some use cases outside of this: perhaps as a reference clock, next to a live capture.&lt;br /&gt;
&lt;br /&gt;
Since this driver only needs to change to 0/1 at a configurable interval, and the interval is exactly the same as the count of the samples in the datafeed it outputs, the signal it generates would thus be 100% perfect, making it an interesting reference.&lt;br /&gt;
&lt;br /&gt;
==== Open-source firmware for the FX2 devices ====&lt;br /&gt;
&lt;br /&gt;
The Cypress FX2-based devices, such as the Saleae Logic and the USBee SX, use only a minimal vendor-provided firmware. The only thing it really does is set the sample rate and turn on the chip&amp;#039;s auto-mode. Nevertheless, the vendors provide the firmware as a binary blob, with no source.&lt;br /&gt;
&lt;br /&gt;
It would be great if sigrok could ship with an own firmware implementation for these devices. Some links:&lt;br /&gt;
&lt;br /&gt;
* [http://sdcc.sourceforge.net/ SDCC], the Small Devices C Compiler, is a compiler specifically suited to small MCUs, and has support for the 8051 core in the FX2.&lt;br /&gt;
* [http://allmybrain.com/2008/12/05/an-open-source-library-for-writing-firmware-on-the-cypress-fx2-with-sdcc/ fx2lib] is an open-source library for writing firmware on the FX2. It has a number of interesting functions, including implementing custom USB vendor commands.&lt;br /&gt;
* [http://gnuradio.org/ GNU Radio]&amp;#039;s USRP2 board has an FX2 on it, and GNU Radio has extensive custom firmware for it.&lt;br /&gt;
&lt;br /&gt;
[[User:Uwe Hermann|Uwe Hermann]] is working on an open-source FX2 firmware for use with various logic analyzers.&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli ==&lt;br /&gt;
&lt;br /&gt;
== sigrok-gui ==&lt;br /&gt;
&lt;br /&gt;
== Decoders ==&lt;br /&gt;
&lt;br /&gt;
== Code quality and build ==&lt;br /&gt;
&lt;br /&gt;
* Consistently use uint64_t for large data types such as samplerate, number of samples, etc.&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Main_Page&amp;diff=351</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Main_Page&amp;diff=351"/>
		<updated>2010-04-10T22:35:57Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;td width=&amp;quot;80%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:0.5em; margin-bottom:0.5em; padding:0.5em 0.5em 0.5em 0.5em; background-color:#cfdfff; align:right; border:1px solid #aabbcc;&amp;quot;&amp;gt;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;sigrok&amp;#039;&amp;#039;&amp;#039; project aims at creating a portable, cross-platform, Free/Libre/Open-Source logic analyzer software that supports various (usually USB-based) logic analyzer hardware products. The code is licensed under the terms of the &amp;#039;&amp;#039;&amp;#039;GNU GPL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;Design goals&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Broad hardware support&amp;#039;&amp;#039;&amp;#039;. Supports a wide variety of logic analyzers from various vendors with different capabilities.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cross-platform&amp;#039;&amp;#039;&amp;#039;. Works on [[Linux]], [[Mac OS X]] and [[Windows]], and on many architectures including x86, ARM, Sparc and PowerPC.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Scriptable protocol decoding&amp;#039;&amp;#039;&amp;#039;. Extendable with [[protocol decoders]] and analyzers written in Python.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Format support&amp;#039;&amp;#039;&amp;#039;. Supports various [[Input output formats|input and output formats]] (raw, ASCII, hex, CSV, gnuplot, [http://en.wikipedia.org/wiki/Value_change_dump VCD], others).&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;Supported hardware&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;120px&amp;quot; heights=&amp;quot;70px&amp;quot;&amp;gt;&lt;br /&gt;
File:Saleae Logic.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Saleae Logic]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(supported)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Open workbench logic sniffer.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Openbench Logic Sniffer]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(work in progress)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus Logic Cube.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[ZEROPLUS Logic Cube LAP-C]]&amp;#039;&amp;#039;&amp;#039; (work in progress)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Cwav usbee sx.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[CWAV USBee SX]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(coming up)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology usb lps.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Braintechnology USB-LPS]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Buspirate v3.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Buspirate]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Intronix Logicport.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Intronix Logicport]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[File:Sigrok_stone.png]] &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;Documentation&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
* [[Downloads]]&lt;br /&gt;
* [[Supported hardware]]&lt;br /&gt;
* [[Command-line]]&lt;br /&gt;
* [[GUI|Cross-platform GUI]]&lt;br /&gt;
* [[Input output formats]]&lt;br /&gt;
* [[Status]]&lt;br /&gt;
* [[FAQ]]&lt;br /&gt;
* [[News]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[File:Sigrok_stone.png]] &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;Development&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
* [[TODO]]&lt;br /&gt;
* [[Design Ideas]]&lt;br /&gt;
* [[Protocol decoders]]&lt;br /&gt;
* Build info: [[Linux]], [[Mac OS X]], [[Windows]]&lt;br /&gt;
* [[Formats and structures]]&lt;br /&gt;
* [[Hardware plugin API]]&lt;br /&gt;
* [[Output API]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[File:Sigrok_stone.png]] &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;Getting in touch&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
* Mailing lists: [https://lists.sourceforge.net/lists/listinfo/sigrok-devel sigrok-devel] (archived on [http://news.gmane.org/gmane.comp.debugging.sigrok.devel gmane]),  [https://lists.sourceforge.net/lists/listinfo/sigrok-commits sigrok-commits].&lt;br /&gt;
* IRC: &amp;#039;&amp;#039;&amp;#039;[irc://chat.freenode.net/sigrok #sigrok]&amp;#039;&amp;#039;&amp;#039; on [http://www.freenode.net Freenode]&lt;br /&gt;
* identi.ca: [http://www.identi.ca/group/sigrok sigrok group]&lt;br /&gt;
* Sites: [http://sourceforge.net/projects/sigrok/ SF], [http://freshmeat.net/projects/sigrok Fm], [https://www.ohloh.net/p/sigrok ohloh], [http://delicious.com/url/d8996d567839064c799ac217b263b2c8 del.icio.us]&lt;br /&gt;
* [[Press]]&lt;br /&gt;
* [[Logo]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;20%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Sigrok linux.png|center|thumb|sigrok-gui on Linux]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;span style=&amp;quot;font-variant:small-caps; font-size:120%&amp;quot;&amp;gt;[[File:Sigrok_stone.png]] [[News]]&amp;lt;/span&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;!-- Please always make this list 7 items long (7 most recent news items). --&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2010/04/06:&amp;#039;&amp;#039;&amp;#039; VCD and Gnuplot output&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2010/04/01:&amp;#039;&amp;#039;&amp;#039; [[ZEROPLUS Logic Cube LAP-C]] support&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2010/03/30:&amp;#039;&amp;#039;&amp;#039; libsigrokdecode started&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2010/03/19:&amp;#039;&amp;#039;&amp;#039; GUI: i18n support&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2010/03/17:&amp;#039;&amp;#039;&amp;#039; Session save support&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2010/03/16:&amp;#039;&amp;#039;&amp;#039; GUI started&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2010/03/14:&amp;#039;&amp;#039;&amp;#039; Official project start&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;IMPORTANT: Please note that (unless explicitly specified otherwise) all contents in this wiki (including text and images) are released to the &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;CC-BY-SA 3.0&amp;lt;/span&amp;gt;. If you don&amp;#039;t want that, please explicitly specify another free-ish license when adding pages or images to the wiki!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Openbench_Logic_Sniffer/Info&amp;diff=285</id>
		<title>Openbench Logic Sniffer/Info</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Openbench_Logic_Sniffer/Info&amp;diff=285"/>
		<updated>2010-04-03T19:11:51Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &amp;#039;&amp;#039;&amp;#039;$ lsusb -vvv -d 04d8:000a&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Bus 001 Device 069: ID 04d8:000a Microchip Technology, Inc. &lt;br /&gt;
 Device Descriptor:&lt;br /&gt;
  bLength                18&lt;br /&gt;
  bDescriptorType         1&lt;br /&gt;
  bcdUSB               2.00&lt;br /&gt;
  bDeviceClass            2 Communications&lt;br /&gt;
  bDeviceSubClass         0 &lt;br /&gt;
  bDeviceProtocol         0 &lt;br /&gt;
  bMaxPacketSize0         8&lt;br /&gt;
  idVendor           0x04d8 Microchip Technology, Inc.&lt;br /&gt;
  idProduct          0x000a &lt;br /&gt;
  bcdDevice            1.00&lt;br /&gt;
  iManufacturer           1 Microchip Technology Inc.&lt;br /&gt;
  iProduct                2 CDC RS-232 Emulation Demo&lt;br /&gt;
  iSerial                 0 &lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
  Configuration Descriptor:&lt;br /&gt;
    bLength                 9&lt;br /&gt;
    bDescriptorType         2&lt;br /&gt;
    wTotalLength           67&lt;br /&gt;
    bNumInterfaces          2&lt;br /&gt;
    bConfigurationValue     1&lt;br /&gt;
    iConfiguration          0 &lt;br /&gt;
    bmAttributes         0xc0&lt;br /&gt;
      Self Powered&lt;br /&gt;
    MaxPower              100mA&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        0&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           1&lt;br /&gt;
      bInterfaceClass         2 Communications&lt;br /&gt;
      bInterfaceSubClass      2 Abstract (modem)&lt;br /&gt;
      bInterfaceProtocol      1 AT-commands (v.25ter)&lt;br /&gt;
      iInterface              0 &lt;br /&gt;
      CDC Header:&lt;br /&gt;
        bcdCDC               1.10&lt;br /&gt;
      CDC ACM:&lt;br /&gt;
        bmCapabilities       0x02&lt;br /&gt;
          line coding and serial state&lt;br /&gt;
      CDC Union:&lt;br /&gt;
        bMasterInterface        0&lt;br /&gt;
        bSlaveInterface         1 &lt;br /&gt;
      CDC Call Management:&lt;br /&gt;
        bmCapabilities       0x00&lt;br /&gt;
        bDataInterface          1&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x82  EP 2 IN&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0008  1x 8 bytes&lt;br /&gt;
        bInterval               2&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        1&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           2&lt;br /&gt;
      bInterfaceClass        10 CDC Data&lt;br /&gt;
      bInterfaceSubClass      0 Unused&lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              0 &lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x03  EP 3 OUT&lt;br /&gt;
        bmAttributes            2&lt;br /&gt;
          Transfer Type            Bulk&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0040  1x 64 bytes&lt;br /&gt;
        bInterval               0&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x83  EP 3 IN&lt;br /&gt;
        bmAttributes            2&lt;br /&gt;
          Transfer Type            Bulk&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0040  1x 64 bytes&lt;br /&gt;
        bInterval               0&lt;br /&gt;
 Device Status:     0x0001&lt;br /&gt;
  Self Powered&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Openbench_Logic_Sniffer&amp;diff=284</id>
		<title>Openbench Logic Sniffer</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Openbench_Logic_Sniffer&amp;diff=284"/>
		<updated>2010-04-03T19:10:30Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Open workbench logic sniffer.jpg|thumb|right|Openbench Logic Sniffer]]&lt;br /&gt;
&lt;br /&gt;
The [http://www.gadgetfactory.net/gf/project/butterflylogic/ Openbench Logic Sniffer] (OLS) is an FPGA-based logic analyzer, supporting 32 probes for probing up to 100MHz signals and advanced trigger functionality. It is a fully open source device &amp;amp;mdash; the circuit design, VHDL code for the FPGA, firmware for the PIC microcontroller and Java-based client software are all freely available. The project is a collaboration between [http://www.gadgetfactory.net/ Gadget Factory] and [http://dangerousprototypes.com/ Dangerous Prototypes].&lt;br /&gt;
&lt;br /&gt;
The device started life as the [http://www.sump.org/projects/analyzer/ Sump Logic Analyzer], which was meant to be run on a Digilent FPGA development board. The Openbench Logic Analyzer unit is a custom-designed board with low cost in mind: it can be bought for $45 from [http://www.seeedstudio.com/depot/preorder-open-workbench-logic-sniffer-p-612.html?cPath=61_76 Seeed Studio].&lt;br /&gt;
&lt;br /&gt;
Communication between the board and the PC is done via a USB port connected to a PIC 18F24J50 microcontroller, which presents a standard USB ACM profile. The host handles this as a serial port, running at 115200 bps. An overview of the endpoint profile is [[Openbench Logic Sniffer/info|here]].&lt;br /&gt;
&lt;br /&gt;
The communications protocol between the board and the PC is below, taken from the original Sump documentation.&lt;br /&gt;
&lt;br /&gt;
== Communications Protocol ==&lt;br /&gt;
&lt;br /&gt;
All communication is done using a standard RS232 connection with 8 data bits, 1 stop bit and no parity. The transfer rate can be set to 115200, 57600, 38400 or 19200 bps. XON/XOFF software flow control is available.&lt;br /&gt;
&lt;br /&gt;
When sending captured data the analyzer will send blocks of four bytes, the first containing the lowest channels. No start or end sequence exists. The host can assume an end of transmission if no data has been received for the duration of one byte.&lt;br /&gt;
&lt;br /&gt;
The protocol used by hardware version 0.5 and older is not covered here. Hardware 0.6 uses protocol version 0, and hardware 0.7 uses protocol version 1. Unless otherwise stated, commands exist in both versions.&lt;br /&gt;
&lt;br /&gt;
The following list provides a short overview of commands understood by the analyzer.&lt;br /&gt;
&lt;br /&gt;
=== Short Commands ===&lt;br /&gt;
&lt;br /&gt;
These commands are exactly one byte long.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Reset (0x00)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Resets the device. Should be sent 5 times when the receiver status is unknown. (It could be waiting for up to four bytes of pending long command data.)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Run (0x01)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Arms the trigger.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ID (0x02)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Asks for device identification. The device will respond with four bytes. The first three (&amp;quot;SLA&amp;quot;) identify the device. The last one identifies the protocol version which is currently either &amp;quot;0&amp;quot; or &amp;quot;1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;XON (0x11)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Put transmitter out of pause mode. It will continue to transmit captured data if any is pending. This command is being used for xon/xoff flow control.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;XOFF (0x13)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Put transmitter in pause mode. It will stop transmitting captured data. This command is being used for xon/xoff flow control.&lt;br /&gt;
&lt;br /&gt;
=== Long Commands ===&lt;br /&gt;
&lt;br /&gt;
Are five bytes long. The first byte contains the opcode. The bytes are displayed in the order in which they are sent to the serial port starting left. The bits within one byte are displayed most significant first.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set Trigger Mask (0xc0, 0xc4, 0xc8, 0xcc)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Defines which trigger values must match. In parallel mode each bit represents one channel, in serial mode each bit represents one of the last 32 samples of the selected channel. The opcodes refer to stage 0-3 in the order given above. (Protocol version 0 only supports stage 0.)&lt;br /&gt;
: [[Image:1100xx00.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set Trigger Values (0xc1, 0xc5, 0xc9, 0xcd)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Defines which values individual bits must have. In parallel mode each bit represents one channel, in serial mode each bit represents one of the last 32 samples of the selected channel. The opcodes refer to stage 0-3 in the order given above. (Protocol version 0 only supports stage 0.)&lt;br /&gt;
: [[Image:1100xx01.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set Trigger Configuration (0xc2, 0xc6, 0xca, 0xce)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Configures the selected trigger stage. The opcodes refer to stage 0-3 in the order given above. The following parameters will be set:&lt;br /&gt;
&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;delay&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: If a match occures, the action of the stage is delayed by the given number of samples.&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;level&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: Trigger level at which the stage becomes active.&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;channel&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: Channel to be used in serial mode. (0-31 in normal operation; 0-15 when demux flag is set)&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;serial&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: When set to 1 the stage operates as serial trigger, otherwise it used as parallel trigger.&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;start&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: When set to 1 a match will start the capturing process. The trigger level will rise on match regardless of this flag. (Command available as of protocol version 1.)&lt;br /&gt;
&lt;br /&gt;
: [[Image:1100xx10.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set Divider (0x80)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: When x is written, the sampling frequency is set to f = clock / (x + 1).&lt;br /&gt;
&lt;br /&gt;
: [[Image:10000000.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set Read &amp;amp; Delay Count (0x81)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Read Count is the number of samples (divided by four) to read back from memory and sent to the host computer. Delay Count is the number of samples (divided by four) to capture after the trigger fired. A Read Count bigger than the Delay Count means that data from before the trigger match will be read back. This data will only be valid if the device was running long enough before the trigger matched.&lt;br /&gt;
: [[Image:10000001.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set Flags (0x82)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Sets the following flags:&lt;br /&gt;
&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;demux&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: Enables the demux input module. (Filter must be off.)&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;filter&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: Enables the filter input module. (Demux must be off.)&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;channel groups&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: Disable channel group. Disabled groups are excluded from data transmissions. This can be used to speed up transfers. There are four groups, each represented by one bit. Starting with the least significant bit of the channel group field channels are assigned as follows: 0-7, 8-15, 16-23, 24-31.&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;external&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: Selects the clock to be used for sampling. If set to 0, the internal clock divided by the configured divider is used, and if set to 1, the external clock will be used. Filter and demux are only available with internal clock.&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;inverted&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: When set to 1, the external clock will be inverted before being used. The inversion causes a delay that may cause problems at very high clock rates. This option only has an effect with external set to 1.&lt;br /&gt;
&lt;br /&gt;
: [[Image:10000010.png]]&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Openbench_Logic_Sniffer/Info&amp;diff=283</id>
		<title>Openbench Logic Sniffer/Info</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Openbench_Logic_Sniffer/Info&amp;diff=283"/>
		<updated>2010-04-03T19:10:22Z</updated>

		<summary type="html">&lt;p&gt;Biot: Created page with &amp;#039;&amp;#039;&amp;#039;&amp;#039;$ lsusb -vvv -d 04d8:000a&amp;#039;&amp;#039;&amp;#039;  Bus 001 Device 069: ID 04d8:000a Microchip Technology, Inc.   Device Descriptor:   bLength                18   bDescriptorType         1   bcdUSB…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;$ lsusb -vvv -d 04d8:000a&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Bus 001 Device 069: ID 04d8:000a Microchip Technology, Inc. &lt;br /&gt;
 Device Descriptor:&lt;br /&gt;
  bLength                18&lt;br /&gt;
  bDescriptorType         1&lt;br /&gt;
  bcdUSB               2.00&lt;br /&gt;
  bDeviceClass            2 Communications&lt;br /&gt;
  bDeviceSubClass         0 &lt;br /&gt;
  bDeviceProtocol         0 &lt;br /&gt;
  bMaxPacketSize0         8&lt;br /&gt;
  idVendor           0x04d8 Microchip Technology, Inc.&lt;br /&gt;
  idProduct          0x000a &lt;br /&gt;
  bcdDevice            1.00&lt;br /&gt;
  iManufacturer           1 Microchip Technology Inc.&lt;br /&gt;
  iProduct                2 CDC RS-232 Emulation Demo&lt;br /&gt;
  iSerial                 0 &lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
  Configuration Descriptor:&lt;br /&gt;
    bLength                 9&lt;br /&gt;
    bDescriptorType         2&lt;br /&gt;
    wTotalLength           67&lt;br /&gt;
    bNumInterfaces          2&lt;br /&gt;
    bConfigurationValue     1&lt;br /&gt;
    iConfiguration          0 &lt;br /&gt;
    bmAttributes         0xc0&lt;br /&gt;
      Self Powered&lt;br /&gt;
    MaxPower              100mA&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        0&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           1&lt;br /&gt;
      bInterfaceClass         2 Communications&lt;br /&gt;
      bInterfaceSubClass      2 Abstract (modem)&lt;br /&gt;
      bInterfaceProtocol      1 AT-commands (v.25ter)&lt;br /&gt;
      iInterface              0 &lt;br /&gt;
      CDC Header:&lt;br /&gt;
        bcdCDC               1.10&lt;br /&gt;
      CDC ACM:&lt;br /&gt;
        bmCapabilities       0x02&lt;br /&gt;
          line coding and serial state&lt;br /&gt;
      CDC Union:&lt;br /&gt;
        bMasterInterface        0&lt;br /&gt;
        bSlaveInterface         1 &lt;br /&gt;
      CDC Call Management:&lt;br /&gt;
        bmCapabilities       0x00&lt;br /&gt;
        bDataInterface          1&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x82  EP 2 IN&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0008  1x 8 bytes&lt;br /&gt;
        bInterval               2&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        1&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           2&lt;br /&gt;
      bInterfaceClass        10 CDC Data&lt;br /&gt;
      bInterfaceSubClass      0 Unused&lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              0 &lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x03  EP 3 OUT&lt;br /&gt;
        bmAttributes            2&lt;br /&gt;
          Transfer Type            Bulk&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0040  1x 64 bytes&lt;br /&gt;
        bInterval               0&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x83  EP 3 IN&lt;br /&gt;
        bmAttributes            2&lt;br /&gt;
          Transfer Type            Bulk&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0040  1x 64 bytes&lt;br /&gt;
        bInterval               0&lt;br /&gt;
 Device Status:     0x0001&lt;br /&gt;
  Self Powered&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Main_Page&amp;diff=241</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Main_Page&amp;diff=241"/>
		<updated>2010-03-31T18:15:11Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;margin-top:0.5em; margin-bottom:0.5em; padding:0.5em 0.5em 0.5em 0.5em; background-color:#cfdfff; align:right; border:1px solid #aabbcc;&amp;quot;&amp;gt;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;sigrok&amp;#039;&amp;#039;&amp;#039; project aims at creating a portable, cross-platform, Free/Libre/Open-Source logic analyzer software that supports various (usually USB-based) logic analyzer hardware products. The code is licensed under the terms of the &amp;#039;&amp;#039;&amp;#039;GNU GPL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Design goals ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Hardware support&amp;#039;&amp;#039;&amp;#039;. Supports a wide variety of logic analyzer hardware from various vendors with different capabilities.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cross-platform&amp;#039;&amp;#039;&amp;#039;. Works on Linux, Mac OS X and Windows, and on architectures including x86, ARM, Sparc and PowerPC.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Scriptable&amp;#039;&amp;#039;&amp;#039;. Extendable with protocol decoders and analyzers written in Python.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Format support&amp;#039;&amp;#039;&amp;#039;. Supports various input and output formats (raw, CSV, gnuplot, [http://en.wikipedia.org/wiki/Value_change_dump VCD], others).&lt;br /&gt;
&lt;br /&gt;
== Supported hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;120px&amp;quot; heights=&amp;quot;70px&amp;quot;&amp;gt;&lt;br /&gt;
File:Saleae Logic.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Saleae Logic]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(supported)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Open workbench logic sniffer.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Openbench Logic Sniffer]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(work in progress)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Cwav usbee sx.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[CWAV USBee SX]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(coming up)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology usb lps.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Braintechnology USB-LPS]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus Logic Cube.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Zeroplus Logic Cube]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Buspirate v3.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Buspirate]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok logo.png|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Intronix Logicport]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
* [[TODO]]&lt;br /&gt;
* [[Status]]&lt;br /&gt;
* [[Design Ideas]]&lt;br /&gt;
* [[Protocol Decoders]]&lt;br /&gt;
* Build information:&lt;br /&gt;
** [[Linux]]&lt;br /&gt;
** [[Mac OS X]]&lt;br /&gt;
** [[Windows]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Command-line]]&lt;br /&gt;
* [[GUI|Cross-platform GUI]]&lt;br /&gt;
* [[Formats and structures]]&lt;br /&gt;
* [[Hardware plugin API]]&lt;br /&gt;
* [[Output API]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting in touch ==&lt;br /&gt;
&lt;br /&gt;
* Mailing lists: [https://lists.sourceforge.net/lists/listinfo/sigrok-devel sigrok-devel], [https://lists.sourceforge.net/lists/listinfo/sigrok-commits sigrok-commits].&lt;br /&gt;
* IRC: &amp;#039;&amp;#039;&amp;#039;[irc://chat.freenode.net/sigrok #sigrok]&amp;#039;&amp;#039;&amp;#039; on [http://www.freenode.net Freenode].&lt;br /&gt;
* identi.ca: [http://www.identi.ca/group/sigrok sigrok group]&lt;br /&gt;
* [[Press]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;IMPORTANT: Please note that (unless explicitly specified otherwise) all contents in this wiki (including text and images) are released to the &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;CC-BY-SA 3.0&amp;lt;/span&amp;gt;. If you don&amp;#039;t want that, please explicitly specify another free-ish license when adding pages or images to the wiki!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoders&amp;diff=240</id>
		<title>Protocol decoders</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoders&amp;diff=240"/>
		<updated>2010-03-31T18:09:58Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes how Protocol Decoders (PDs) work in sigrok.&lt;br /&gt;
&lt;br /&gt;
== Basic principles ==&lt;br /&gt;
&lt;br /&gt;
* all PDs are written in python. Only source code will be used (i.e. no .pyc or .pyo files).&lt;br /&gt;
* PDs will be stacked together, so the user can construct a decoding pipline.&lt;br /&gt;
* the data feed into the PDs will be streamed, so they will run in real time as the data comes in from the hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
The frontend gets input from the user on which PDs to use in an acquisition session. It then configures these into the session with session_pd_add(). As the first PD is added, the session sets up an additional datafeed callback to itself, which it uses as input to the first PD in the stack. The output of that both sent to the frontend, along with its original datafeed, as well as fed into the next PD in the stack.&lt;br /&gt;
&lt;br /&gt;
The frontend thus gets the raw datafeed as well as a feed from every PD in the stack. Which of these different feeds is actually displayed to the user is a matter of configuration or selection by the user; it should be possible, for example, to have sigrok-cli print only the top of the PD stack&amp;#039;s output on stdout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Protocol decoders ==&lt;br /&gt;
&lt;br /&gt;
This is a list of ideas for specific protocol decoders we might want to write in the future (or users might want to contribute).&lt;br /&gt;
&lt;br /&gt;
=== Low-level decoders ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Standard protocols that have raw signals/samples as input:&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;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Protocol&lt;br /&gt;
!Status&lt;br /&gt;
!Comments&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Basic / microcontrollers / embedded&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| SPI&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| I2C&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| USART/RS232&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Automotive / industrial / embedded&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| CAN&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Embedded&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| JTAG&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;PC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| USB 1.1&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| USB 2.0&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| USB 3&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| LPC&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| FWH&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| ISA&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| PCI&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| SMBus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;[http://en.wikipedia.org/wiki/Consumer_IR Consumer IR]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Nokia NRC17&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Sony SIRC&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Philips RC-5&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Philips RC-6&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Philips RC-MM&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Philips RECS80&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Miscellaneous&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Infrared_Data_Association IrDA]&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;
... and many, many more.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Custom / application-specific protocols that have raw signals/samples as input:&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;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Protocol&lt;br /&gt;
!Status&lt;br /&gt;
!Comments&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Serial EEPROMs&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| AT93C46&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Atmel AT93C46 serial EEPROM protocol&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Displays&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| HD44780&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;
... and many, many more.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Non-protocol data analysis decoders / analyzers that have raw signals/samples as input:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Number of clock cycles / rising-edges / falling-edges / transitions / etc. (total or per-signal)&lt;br /&gt;
* Min/Max/Avg distance between two events (rising edge, falling edge, signal lenths, etc.)&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
... and many, many more.&lt;br /&gt;
&lt;br /&gt;
=== High-level decoders ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Protocols that do not have raw signals/samples as input, but rather an already-preprocessed bytestream generated by one of the low-level decoders:&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;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Protocol&lt;br /&gt;
!Input protocol&lt;br /&gt;
!Status&lt;br /&gt;
!Comments&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Serial EEPROMs&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| TODO&lt;br /&gt;
| SPI&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| SPI-attached serial EEPROM. Datasheet: TODO.&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Displays&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| SA8807A&lt;br /&gt;
| SPI&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;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| EA eDIPTFT43-A&lt;br /&gt;
| I2C&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;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| TODO&lt;br /&gt;
| USART/RS232&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| TODO&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | &amp;#039;&amp;#039;&amp;#039;ADC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| AD7291&lt;br /&gt;
| USART/RS232&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;
... and many, many more.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Non-protocol data analysis decoders / analyzers:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* How many data bytes are in the data stream?&lt;br /&gt;
* What&amp;#039;s the min/max/avg data value?&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Plugin system for protocol decoding:&lt;br /&gt;
** Should support SPI, I2C, RS232/UART and many many more protocols, see below.&lt;br /&gt;
** Should be easy to add support for additional/custom protocols, e.g. AT93C46:&lt;br /&gt;
*** CS (chip select)&lt;br /&gt;
*** SK (clock)&lt;br /&gt;
*** DI (data from chip to outside)&lt;br /&gt;
*** DO (data from outside into chip)&lt;br /&gt;
*** Has start bit, opcodes, data following transmission&lt;br /&gt;
** A protocol as simple as this should be doable to implement without code, only the description of the meaning of the various pins.&lt;br /&gt;
* PD plugins &amp;#039;&amp;#039;&amp;#039;must&amp;#039;&amp;#039;&amp;#039; be GUI-independent: they must always work on any GUI present in sigrok. The plugin interface must therefore provide hooks for:&lt;br /&gt;
** Providing data from core to plugin - stream or dump.&lt;br /&gt;
** Sending analysis results back from the plugin, e.g. timestamps or sample IDs with structured results:&lt;br /&gt;
*** Type:&lt;br /&gt;
**** Protocol overhead e.g. start bits&lt;br /&gt;
**** Commands e.g. opcodes&lt;br /&gt;
**** Command parameters e.g. address following a READ command&lt;br /&gt;
**** Extracted data&lt;br /&gt;
**** String to display over the data (&amp;quot;opcode READ&amp;quot;)&lt;br /&gt;
**** Data (e.g. 10) + length in bits (e.g. 2)&lt;br /&gt;
**** Results can overlap, as in e.g. &amp;quot;READ address 0x08&amp;quot; and &amp;quot;opcode 10&amp;quot;&lt;br /&gt;
* This also opens up the possibility of producing e.g. a protocol analysis report from the main code.&lt;br /&gt;
* All PD plugins are written in Python.&lt;br /&gt;
** We embed a scripting language (Python) for very simple transforms and/or additional display; e.g. 4-bit interface to HD44780 LCD, take two nibbles in sequence, based on clock line, and assemble them into a whole byte. Scripted plugin could do this, then pass the data back to the UI for display.&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoders&amp;diff=239</id>
		<title>Protocol decoders</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoders&amp;diff=239"/>
		<updated>2010-03-31T17:24:44Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes how Protocol Decoders (PDs) work in sigrok.&lt;br /&gt;
&lt;br /&gt;
== Basic principles ==&lt;br /&gt;
&lt;br /&gt;
* all PDs are written in python. Only source code will be used (i.e. no .pyc or .pyo files).&lt;br /&gt;
* PDs will be stacked together, so the user can construct a decoding pipline.&lt;br /&gt;
* the data feed into the PDs will be streamed, so they will run in real time as the data comes in from the hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
The frontend gets input from the user on which PDs to use in an acquisition session. It then configures these into the session with session_pd_add(). As the first PD is added, the session sets up an additional datafeed callback to itself, which it uses as input to the first PD in the stack. The output of that both sent to the frontend, along with its original datafeed, as well as fed into the next PD in the stack.&lt;br /&gt;
&lt;br /&gt;
The frontend thus gets the raw datafeed as well as a feed from every PD in the stack. Which of these different feeds is actually displayed to the user is a matter of configuration or selection by the user; it should be possible, for example, to have sigrok-cli print only the top of the PD stack&amp;#039;s output on stdout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Plugin system for protocol decoding:&lt;br /&gt;
** Should support SPI, I2C, RS232/UART and many many more protocols, see below.&lt;br /&gt;
** Should be easy to add support for additional/custom protocols, e.g. AT93C46:&lt;br /&gt;
*** CS (chip select)&lt;br /&gt;
*** SK (clock)&lt;br /&gt;
*** DI (data from chip to outside)&lt;br /&gt;
*** DO (data from outside into chip)&lt;br /&gt;
*** Has start bit, opcodes, data following transmission&lt;br /&gt;
** A protocol as simple as this should be doable to implement without code, only the description of the meaning of the various pins.&lt;br /&gt;
* PD plugins &amp;#039;&amp;#039;&amp;#039;must&amp;#039;&amp;#039;&amp;#039; be GUI-independent: they must always work on any GUI present in sigrok. The plugin interface must therefore provide hooks for:&lt;br /&gt;
** Providing data from core to plugin - stream or dump.&lt;br /&gt;
** Sending analysis results back from the plugin, e.g. timestamps or sample IDs with structured results:&lt;br /&gt;
*** Type:&lt;br /&gt;
**** Protocol overhead e.g. start bits&lt;br /&gt;
**** Commands e.g. opcodes&lt;br /&gt;
**** Command parameters e.g. address following a READ command&lt;br /&gt;
**** Extracted data&lt;br /&gt;
**** String to display over the data (&amp;quot;opcode READ&amp;quot;)&lt;br /&gt;
**** Data (e.g. 10) + length in bits (e.g. 2)&lt;br /&gt;
**** Results can overlap, as in e.g. &amp;quot;READ address 0x08&amp;quot; and &amp;quot;opcode 10&amp;quot;&lt;br /&gt;
* This also opens up the possibility of producing e.g. a protocol analysis report from the main code.&lt;br /&gt;
* All PD plugins are written in Python.&lt;br /&gt;
** We embed a scripting language (Python) for very simple transforms and/or additional display; e.g. 4-bit interface to HD44780 LCD, take two nibbles in sequence, based on clock line, and assemble them into a whole byte. Scripted plugin could do this, then pass the data back to the UI for display.&lt;br /&gt;
&lt;br /&gt;
== PD plugin infrastructure ==&lt;br /&gt;
&lt;br /&gt;
The core backend takes a streaming feed from a live aquisition source (or from a saved session). If any PA plugins are configured to act on this source, a pipe is set up to feed this raw data to the embedded Python plugin dispatcher. The dispatcher configures the PD plugins, in order, to write to/read from each other&amp;#039;s input and output queues. The dispatcher then starts feeding raw data into the bottom plugin&amp;#039;s input queue, and takes output from the top plugin&amp;#039;s output queue, which it feeds back to the backend.&lt;br /&gt;
&lt;br /&gt;
== Protocol decoders ==&lt;br /&gt;
&lt;br /&gt;
This is a list of ideas for specific protocol decoders we might want to write in the future (or users might want to contribute).&lt;br /&gt;
&lt;br /&gt;
=== Low-level decoders ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Standard protocols that have raw signals/samples as input:&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;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Protocol&lt;br /&gt;
!Status&lt;br /&gt;
!Comments&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Basic / microcontrollers / embedded&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| SPI&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| I2C&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| USART/RS232&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Automotive / industrial / embedded&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| CAN&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Embedded&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| JTAG&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;PC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| USB 1.1&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| USB 2.0&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| USB 3&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| LPC&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| FWH&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| ISA&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| PCI&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| SMBus&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;[http://en.wikipedia.org/wiki/Consumer_IR Consumer IR]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Nokia NRC17&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Sony SIRC&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Philips RC-5&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Philips RC-6&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Philips RC-MM&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Philips RECS80&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Miscellaneous&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Infrared_Data_Association IrDA]&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;
... and many, many more.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Custom / application-specific protocols that have raw signals/samples as input:&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;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Protocol&lt;br /&gt;
!Status&lt;br /&gt;
!Comments&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Serial EEPROMs&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| AT93C46&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| Atmel AT93C46 serial EEPROM protocol&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Displays&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| HD44780&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;
... and many, many more.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Non-protocol data analysis decoders / analyzers that have raw signals/samples as input:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Number of clock cycles / rising-edges / falling-edges / transitions / etc. (total or per-signal)&lt;br /&gt;
* Min/Max/Avg distance between two events (rising edge, falling edge, signal lenths, etc.)&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
... and many, many more.&lt;br /&gt;
&lt;br /&gt;
=== High-level decoders ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Protocols that do not have raw signals/samples as input, but rather an already-preprocessed bytestream generated by one of the low-level decoders:&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;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Protocol&lt;br /&gt;
!Input protocol&lt;br /&gt;
!Status&lt;br /&gt;
!Comments&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Serial EEPROMs&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| TODO&lt;br /&gt;
| SPI&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| SPI-attached serial EEPROM. Datasheet: TODO.&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Displays&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| SA8807A&lt;br /&gt;
| SPI&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;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| EA eDIPTFT43-A&lt;br /&gt;
| I2C&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;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| TODO&lt;br /&gt;
| USART/RS232&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | 0%&lt;br /&gt;
| TODO&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | &amp;#039;&amp;#039;&amp;#039;ADC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| AD7291&lt;br /&gt;
| USART/RS232&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;
... and many, many more.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Non-protocol data analysis decoders / analyzers:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* How many data bytes are in the data stream?&lt;br /&gt;
* What&amp;#039;s the min/max/avg data value?&lt;br /&gt;
* ...&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Public_relations&amp;diff=235</id>
		<title>Public relations</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Public_relations&amp;diff=235"/>
		<updated>2010-03-29T02:42:47Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* Places to announce sigrok */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page combines information about our PR work.&lt;br /&gt;
&lt;br /&gt;
== Places to announce sigrok ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackaday.com/contact-hack-a-day/ submit as a project to hackaday]&lt;br /&gt;
* [http://hackaday.com/2009/03/06/tools-saleae-logic-logic-analyzer/ comment on saleae logic analyzer post on hackaday]&lt;br /&gt;
* [http://www.adafruit.com/blog/ adafruit blog]&lt;br /&gt;
* [http://dangerousprototypes.com/2010/02/25/prototype-open-logic-sniffer-logic-analyzer-2/ dangerous prototypes blog]&lt;br /&gt;
* [http://spins.fedoraproject.org/fel/ Fedora Electronics Lab]&lt;br /&gt;
* [http://lwn.net/ LWN]&lt;br /&gt;
&lt;br /&gt;
== Projects to contact ==&lt;br /&gt;
* [http://scopegrab32.sourceforge.net/ scopegrab32] Fluke(TM) scope grabber software&lt;br /&gt;
* [http://users.on.net/~merrifield/fluke/scopegrab.html ScopeGrab] Fluke(TM) scope grabber software&lt;br /&gt;
* [http://optics.eee.nottingham.ac.uk/tek/ VXI-11 RPC Protocol over Ethernet Linux drivers] Protocol used for Tektronix Oscilloscopes and Function generators&lt;br /&gt;
* [http://www.febo.com/geekworks/data-capture/tds-2012.html Tektronix TDS-10xx/20xx Oscilloscope GPIB Software]&lt;br /&gt;
* [http://www.mtoussaint.de/qtdmm.html QtDMM] Multimeter DMM readout software&lt;br /&gt;
* [http://xoscope.sourceforge.net/ Xoscope]&lt;br /&gt;
* [http://www.eig.ch/fr/laboratoires/systemes-numeriques/projets/osqoop-l-oscilloscope-libre/index.html osqoop]&lt;br /&gt;
* [http://luke.no-ip.org/code/ glscope]&lt;br /&gt;
* [http://www.sump.org/projects/analyzer/ sump]&lt;br /&gt;
* [http://sourceforge.net/projects/minila/ minila]&lt;br /&gt;
&lt;br /&gt;
== People into hardware hacking (send personal mail) ==&lt;br /&gt;
&lt;br /&gt;
* Travis Goodspeed (open source hardware hacker)&lt;br /&gt;
* Harald Welte (open source hardware hacker)&lt;br /&gt;
* Peter Stuge (open source hardware hacker)&lt;br /&gt;
* Jack Gassett (OLS, [http://gadgetfactory.net/ Gadget Factory])&lt;br /&gt;
* Ian Lesnet (OLS, [http://dangerousprototypes.com Dangerous Prototypes])&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Public_relations&amp;diff=234</id>
		<title>Public relations</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Public_relations&amp;diff=234"/>
		<updated>2010-03-29T02:42:32Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* Places to announce sigrok */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page combines information about our PR work.&lt;br /&gt;
&lt;br /&gt;
== Places to announce sigrok ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackaday.com/contact-hack-a-day/ submit as a project to hackaday]&lt;br /&gt;
* [http://hackaday.com/2009/03/06/tools-saleae-logic-logic-analyzer/ comment on saleae logic analyzer post on hackaday]&lt;br /&gt;
* [http://www.adafruit.com/blog/ adafruit blog]&lt;br /&gt;
* [http://dangerousprototypes.com/2010/02/25/prototype-open-logic-sniffer-logic-analyzer-2/ dangerous prototypes blog]&lt;br /&gt;
* [http://spins.fedoraproject.org/fel/ Fedora Electronics Lab]&lt;br /&gt;
* [lwn.net LWN]&lt;br /&gt;
&lt;br /&gt;
== Projects to contact ==&lt;br /&gt;
* [http://scopegrab32.sourceforge.net/ scopegrab32] Fluke(TM) scope grabber software&lt;br /&gt;
* [http://users.on.net/~merrifield/fluke/scopegrab.html ScopeGrab] Fluke(TM) scope grabber software&lt;br /&gt;
* [http://optics.eee.nottingham.ac.uk/tek/ VXI-11 RPC Protocol over Ethernet Linux drivers] Protocol used for Tektronix Oscilloscopes and Function generators&lt;br /&gt;
* [http://www.febo.com/geekworks/data-capture/tds-2012.html Tektronix TDS-10xx/20xx Oscilloscope GPIB Software]&lt;br /&gt;
* [http://www.mtoussaint.de/qtdmm.html QtDMM] Multimeter DMM readout software&lt;br /&gt;
* [http://xoscope.sourceforge.net/ Xoscope]&lt;br /&gt;
* [http://www.eig.ch/fr/laboratoires/systemes-numeriques/projets/osqoop-l-oscilloscope-libre/index.html osqoop]&lt;br /&gt;
* [http://luke.no-ip.org/code/ glscope]&lt;br /&gt;
* [http://www.sump.org/projects/analyzer/ sump]&lt;br /&gt;
* [http://sourceforge.net/projects/minila/ minila]&lt;br /&gt;
&lt;br /&gt;
== People into hardware hacking (send personal mail) ==&lt;br /&gt;
&lt;br /&gt;
* Travis Goodspeed (open source hardware hacker)&lt;br /&gt;
* Harald Welte (open source hardware hacker)&lt;br /&gt;
* Peter Stuge (open source hardware hacker)&lt;br /&gt;
* Jack Gassett (OLS, [http://gadgetfactory.net/ Gadget Factory])&lt;br /&gt;
* Ian Lesnet (OLS, [http://dangerousprototypes.com Dangerous Prototypes])&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Protocol_decoders&amp;diff=232</id>
		<title>Protocol decoders</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Protocol_decoders&amp;diff=232"/>
		<updated>2010-03-28T21:28:31Z</updated>

		<summary type="html">&lt;p&gt;Biot: Created page with &amp;#039;* Plugin system for protocol decoding: ** Should support SPI, I2C, RS232/UART, CAN, USB, JTAG, LPC, FWH, various parallel protocols, and many many more. ** Should be easy to add …&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Plugin system for protocol decoding:&lt;br /&gt;
** Should support SPI, I2C, RS232/UART, CAN, USB, JTAG, LPC, FWH, various parallel protocols, and many many more.&lt;br /&gt;
** Should be easy to add support for additional/custom protocols, e.g. AT93C46:&lt;br /&gt;
*** CS (chip select)&lt;br /&gt;
*** SK (clock)&lt;br /&gt;
*** DI (data from chip to outside)&lt;br /&gt;
*** DO (data from outside into chip)&lt;br /&gt;
*** Has start bit, opcodes, data following transmission&lt;br /&gt;
** A protocol as simple as this should be doable to implement without code, only the description of the meaning of the various pins.&lt;br /&gt;
* PD plugins &amp;#039;&amp;#039;&amp;#039;must&amp;#039;&amp;#039;&amp;#039; be GUI-independent: they must always work on any GUI present in sigrok. The plugin interface must therefore provide hooks for:&lt;br /&gt;
** Providing data from core to plugin - stream or dump.&lt;br /&gt;
** Sending analysis results back from the plugin, e.g. timestamps or sample IDs with structured results:&lt;br /&gt;
*** Type:&lt;br /&gt;
**** Protocol overhead e.g. start bits&lt;br /&gt;
**** Commands e.g. opcodes&lt;br /&gt;
**** Command parameters e.g. address following a READ command&lt;br /&gt;
**** Extracted data&lt;br /&gt;
**** String to display over the data (&amp;quot;opcode READ&amp;quot;)&lt;br /&gt;
**** Data (e.g. 10) + length in bits (e.g. 2)&lt;br /&gt;
**** Results can overlap, as in e.g. &amp;quot;READ address 0x08&amp;quot; and &amp;quot;opcode 10&amp;quot;&lt;br /&gt;
* This also opens up the possibility of producing e.g. a protocol analysis report from the main code.&lt;br /&gt;
* All PD plugins written in Python.&lt;br /&gt;
** We embed a scripting language (Python) for very simple transforms and/or additional display; e.g. 4-bit interface to HD44780 LCD, take two nibbles in sequence, based on clock line, and assemble them into a whole byte. Scripted plugin could do this, then pass the data back to the UI for display.&lt;br /&gt;
&lt;br /&gt;
== PD plugin infrastructure ==&lt;br /&gt;
&lt;br /&gt;
The core backend takes a streaming feed from a live aquisition source (or from a saved session). If any PA plugins are configured to act on this source, a pipe is set up to feed this raw data to the embedded Python plugin dispatcher. The dispatcher configures the PD plugins, in order, to write to/read from each other&amp;#039;s input and output queues. The dispatcher then starts feeding raw data into the bottom plugin&amp;#039;s input queue, and takes output from the top plugin&amp;#039;s output queue, which it feeds back to the backend.&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Hardware_driver_API&amp;diff=230</id>
		<title>Hardware driver API</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Hardware_driver_API&amp;diff=230"/>
		<updated>2010-03-28T12:19:51Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Every plugin is built as a shared library, dynamically loaded by the backend at startup. The plugin must define a structure as follows:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;sigrok.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 struct device_plugin {&lt;br /&gt;
 	/* plugin-specific */&lt;br /&gt;
 	char *name;&lt;br /&gt;
 	int api_version;&lt;br /&gt;
 	int (*init) (char *deviceinfo);&lt;br /&gt;
 	void (*cleanup) (void);&lt;br /&gt;
 &lt;br /&gt;
 	/* device-specific */&lt;br /&gt;
 	int (*open) (int device_index);&lt;br /&gt;
 	void (*close) (int device_index);&lt;br /&gt;
 	char *(*get_device_info) (int device_index, int device_info_id);&lt;br /&gt;
 	int (*get_status) (int device_index);&lt;br /&gt;
 	int *(*get_capabilities) (void);&lt;br /&gt;
 	int (*set_configuration) (int device_index, int capability, char *value);&lt;br /&gt;
 	int (*start_acquisition) (int device_index, gpointer session_device_id);&lt;br /&gt;
 	void (*stop_acquisition) (int device_index, gpointer session_device_id);&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 #define SIGROK_HARDWARE_PLUGIN   struct device_plugin plugin_info&lt;br /&gt;
&lt;br /&gt;
This structure is the only symbol imported into the backend namespace. The plugin&amp;#039;s variables thus cannot conflict with the global sigrok namespace.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;name&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;A string describing this driver. It will be referenced in saved session files.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;api_version&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Currently defined as 1.&lt;br /&gt;
&lt;br /&gt;
The other members of the structure are pointers to plugin callbacks:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;init(char *device)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Called when the plugin is initially loading into sigrok, typically at program start. The parameter refers to a device name or special file, whichever is applicable for the plugin. Devices which don&amp;#039;t need a supplied device, such as USB devices, can simply ignore this parameter. The function returns the number of devices found, and 0 if no suitable device was found. If a device was found, any initialization it needs must be performed here; for example, uploading firmware should be done here.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;cleanup()&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Called before the plugin is unloaded. Release any resources the plugin might be holding.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;open(int device_index)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Open the specified device. The device index starts at 0.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;close(int device_index)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Close the specified device.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;get_device_info(int device_index, int device_info_id)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Returns information about the given device. The type of information is given as device_info_id, one of a set of defined constants. The return value is always a pointer, which points to information specific to the id.&lt;br /&gt;
** DI_INSTANCE: Returns a pointer to a [[Formats_and_structures#device_instances|struct sigrok_device_instance]].&lt;br /&gt;
** DI_NUM_PROBES: The number of probes connected to this device (integer).&lt;br /&gt;
** DI_SAMPLERATES: Returns a pointer to a [[Formats_and_structures#Sample_rates|struct samplerates]].&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;get_status(int device_index)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Returns an integer describing the status of the plugin&amp;#039;s connection to a device. This may be one of the following:&lt;br /&gt;
** ST_NOT_FOUND: The device was not found.&lt;br /&gt;
** ST_INITIALIZING: The device was found, but is still initializing.&lt;br /&gt;
** ST_INACTIVE: The device is live, but not in use.&lt;br /&gt;
** ST_ACTIVE: The device is currently in use.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;get_capabilities()&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;This function returns a zero-terminated integer array with the plugin&amp;#039;s capabilities, in the form of a set of defined constants. Some of these are informative, and some can be used to configure the plugin (or its connected device). The capabilities tables below have an overview of all possible capabilities.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;set_configuration(int device_index, int capability, char *value)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;This is used to configure the plugin and/or connected device. The capability is one of the constants returned from the get_capabilities() call. The value depends on the parameter that is to be configured.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;start_acquisition(int device_index, gpointer session_device_id)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Start acquisition on the specified device. The session_device_id will be passed along with the data feed of this session, as the first parameter to session bus callbacks.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;stop_acquisition(int device_index, gpointer session_device_id)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Stop acquisition on the specified device. This causes a DF_END packet to be sent to the sesion bus.&lt;br /&gt;
&lt;br /&gt;
== Informative capabilities ==&lt;br /&gt;
&lt;br /&gt;
* HWCAP_LOGIC_ANALYZER&lt;br /&gt;
: This plugin supplies a logic analyzer.&lt;br /&gt;
&lt;br /&gt;
== Configurable capabilities ==&lt;br /&gt;
&lt;br /&gt;
* HWCAP_SAMPLERATE&lt;br /&gt;
: The sample rate in Hz (uint64_t).&lt;br /&gt;
* HWCAP_LIMIT_MSEC&lt;br /&gt;
: How long the acquisition should last, in ms (uint64_t).&lt;br /&gt;
* HWCAP_LIMIT_SAMPLES&lt;br /&gt;
: How many samples to acquire in the session (uint64_t).&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Formats_and_structures&amp;diff=229</id>
		<title>Formats and structures</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Formats_and_structures&amp;diff=229"/>
		<updated>2010-03-28T12:19:15Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes various formats used by sigrok. &lt;br /&gt;
&lt;br /&gt;
== Data feed ==&lt;br /&gt;
&lt;br /&gt;
The data feed format is used to transfer data feeds internally within sigrok. It is created by a hardware plugin (or the session load code) by taking raw data and adding metadata to it. A feed packet consists of a packet type, followed by a structure particular to that data type.&lt;br /&gt;
&lt;br /&gt;
==== Data feed packet ====&lt;br /&gt;
&lt;br /&gt;
 struct datafeed_packet {&lt;br /&gt;
 	uint16_t type;&lt;br /&gt;
 	uint16_t length;&lt;br /&gt;
 	void *payload;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
=== Packet types ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DF_HEADER:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
This the first packet in any data stream. The payload consists of the following struct:&lt;br /&gt;
&lt;br /&gt;
 struct datafeed_header {&lt;br /&gt;
 	int feed_version;&lt;br /&gt;
 	struct timeval starttime;&lt;br /&gt;
 	uint64_t samplerate;&lt;br /&gt;
 	int protocol_id;&lt;br /&gt;
 	int num_probes;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DF_END:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
End of stream (no further data).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DF_TRIGGER:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The trigger matched at this point in the data feed. There is no payload in this packet, but the next data to come in will be the samples that matched the trigger.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DF_LOGIC8:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Raw logic analyzer data. Unitsize is 1 byte, describing up to 8 probes worth of data, one sample per bit. MSB = first probe. Unused bits are set to zero.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DF_LOGIC16:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Raw logic analyzer data. Unitsize is 2 bytes, describing up to 16 probes worth of data, one sample per bit. MSB = first probe. Unused bits are set to zero.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DF_LOGIC24:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Raw logic analyzer data. Unitsize is 3 bytes, describing up to 24 probes worth of data, one sample per bit. MSB = first probe. Unused bits are set to zero.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DF_LOGIC32:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Raw logic analyzer data. Unitsize is 4 bytes, describing up to 32 probes worth of data, one sample per bit. MSB = first probe. Unused bits are set to zero.&lt;br /&gt;
&lt;br /&gt;
== Data store ==&lt;br /&gt;
&lt;br /&gt;
The data store consists of a series of chunks of memory, storing raw samples. The chunks are used to reduce the need for the system to provide a single contiguous area of memory for a potentially large dataset, while allowing the dataset to grow easily as data streams in.&lt;br /&gt;
&lt;br /&gt;
Data store size is kept as small as possible by only storing as much data as is actually used, regardless of the sample size provided by a data feed. For example, a raw logic analyzer feed that comes in as a 4-byte unit of which only 4 probes (and thus 4 bits) are used, will use only 1 byte per unit.&lt;br /&gt;
&lt;br /&gt;
 struct datastore {&lt;br /&gt;
 	/* size in bytes of the number of units stored in this datastore */&lt;br /&gt;
 	int unitsize;&lt;br /&gt;
 	unsigned int num_units;&lt;br /&gt;
 	GSList *chunklist;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Session file ==&lt;br /&gt;
&lt;br /&gt;
A sigrok session file contains all the raw data captured in a session, and various metadata identifying the source, pin names, and so on. The file extension of a session file is &amp;#039;sigrok&amp;#039;. The file format is a ZIP file, containing the following files:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;version:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Contains the version of the session format used in this ZIP file, as an ASCII string. The starting version is 1.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;metadata:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This is a key-value file (.ini-like) containing the following keys in the [main] section:&lt;br /&gt;
&lt;br /&gt;
* probes: Number of probes in this data feed.&lt;br /&gt;
* probename[]: An indexed list of probe names. The probe index starts at 1.&lt;br /&gt;
* trigger[]: An indexed list of triggers configured on the probes. The probe index starts at 1.&lt;br /&gt;
* analyzers: A list of protocol analyzers that was used on this data feed at the time it was saved, separated by a space, with the first entry representing the bottom of the analysis stack. Regardless of this list, the data feed saved is &amp;#039;&amp;#039;&amp;#039;always&amp;#039;&amp;#039;&amp;#039; the raw feed.&lt;br /&gt;
* starttime: High-resolution timestamp denoting the date + time the data was originally captured, in RFC 3339 format e.g. &amp;#039;&amp;#039;2009-04-13 11:35:08.538429857+02:00&amp;#039;&amp;#039;.&lt;br /&gt;
* freqdiv: Sample frequency expressed as 1s / freqdiv.&lt;br /&gt;
* unitsize: The size (in bytes) of a single data unit in the data feed.&lt;br /&gt;
* device: The name of the device that was used to capture this data feed originally.&lt;br /&gt;
* port: The port to which the capture device was connected.&lt;br /&gt;
&lt;br /&gt;
Unused probes have no probename defined, and probes that have no trigger defined are not mentioned in this file. Only relevant data is stored.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;raw:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This file contains the raw signal data, in network-endian format. The size of a unit is set in the &amp;quot;metadata&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device instances ==&lt;br /&gt;
&lt;br /&gt;
This structure is created by a hardware driver/ It uniquely identifies one device in the system, regardless of how that device is connected.&lt;br /&gt;
&lt;br /&gt;
 struct sigrok_device_instance {&lt;br /&gt;
     int index;&lt;br /&gt;
     int status;&lt;br /&gt;
     int instance_type;&lt;br /&gt;
     char *vendor;&lt;br /&gt;
     char *model;&lt;br /&gt;
     char *version;&lt;br /&gt;
     union {&lt;br /&gt;
         struct usb_device_instance *usb;&lt;br /&gt;
         struct serial_device_instance *serial;&lt;br /&gt;
     };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==== index ====&lt;br /&gt;
A counter identifying different devices handled by the same driver, starting at 0.&lt;br /&gt;
&lt;br /&gt;
==== status ====&lt;br /&gt;
&lt;br /&gt;
Can be one of:&lt;br /&gt;
* ST_INITIALIZING: the device is not yet ready -- for example, it&amp;#039;s still booting, or a firmware upload is in progress.&lt;br /&gt;
* ST_INACTIVE: the device is ready.&lt;br /&gt;
* ST_ACTIVE: the device is currently in use.&lt;br /&gt;
&lt;br /&gt;
==== instance_type ====&lt;br /&gt;
If this is &amp;#039;&amp;#039;&amp;#039;USB_INSTANCE&amp;#039;&amp;#039;&amp;#039;, the &amp;#039;&amp;#039;&amp;#039;usb&amp;#039;&amp;#039;&amp;#039; field points to:&lt;br /&gt;
&lt;br /&gt;
 struct usb_device_instance {&lt;br /&gt;
     uint8_t bus;&lt;br /&gt;
     uint8_t address;&lt;br /&gt;
     struct libusb_device_handle *devhdl;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
If instance_type is &amp;#039;&amp;#039;&amp;#039;SERIAL_INSTANCE, the &amp;#039;&amp;#039;&amp;#039;serial&amp;#039;&amp;#039;&amp;#039; field points to:&lt;br /&gt;
&lt;br /&gt;
 struct serial_device_instance {&lt;br /&gt;
     char *port;&lt;br /&gt;
     int fd;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==== vendor, model, version ====&lt;br /&gt;
&lt;br /&gt;
These are strings ready for display, identifying the device. The &amp;#039;&amp;#039;&amp;#039;version&amp;#039;&amp;#039;&amp;#039; string may be empty, or may have extensive information regarding hardware version, firmware version, on-board memory and so on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sample rates ==&lt;br /&gt;
&lt;br /&gt;
In sigrok, sample rates are always represented by a &amp;#039;&amp;#039;&amp;#039;uint64_t&amp;#039;&amp;#039;&amp;#039; value, expressing the rate in Hz. A hardware plugin reports the sample rates it supports with the following struct:&lt;br /&gt;
&lt;br /&gt;
 struct samplerates {&lt;br /&gt;
     uint64_t low;&lt;br /&gt;
     uint64_t high;&lt;br /&gt;
     uint64_t step;&lt;br /&gt;
     uint64_t *list;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;low&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;high&amp;#039;&amp;#039;&amp;#039; values are the lower and upper bounds of the range supported by the device. If the device supports any rate in between those bounds, the minimum granularity is given in the &amp;#039;&amp;#039;&amp;#039;step&amp;#039;&amp;#039;&amp;#039; field. If a device only supports a specific set of sample rates, and nothing in between, a list of those rates is pointed to by the &amp;#039;&amp;#039;&amp;#039;list&amp;#039;&amp;#039;&amp;#039; field, which is a NULL-terminated array of uint64_t.&lt;br /&gt;
&lt;br /&gt;
Either the &amp;#039;&amp;#039;&amp;#039;step&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;list&amp;#039;&amp;#039;&amp;#039; fields are filled in; never both. The unused field is set to NULL.&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Formats_and_structures&amp;diff=228</id>
		<title>Formats and structures</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Formats_and_structures&amp;diff=228"/>
		<updated>2010-03-28T11:41:22Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes various formats used by sigrok. &lt;br /&gt;
&lt;br /&gt;
== Data feed ==&lt;br /&gt;
&lt;br /&gt;
The data feed format is used to transfer data feeds internally within sigrok. It is created by a hardware plugin (or the session load code) by taking raw data and adding metadata to it. A feed packet consists of a packet type, followed by a structure particular to that data type.&lt;br /&gt;
&lt;br /&gt;
==== Data feed packet ====&lt;br /&gt;
&lt;br /&gt;
 struct datafeed_packet {&lt;br /&gt;
 	uint16_t type;&lt;br /&gt;
 	uint16_t length;&lt;br /&gt;
 	void *payload;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
=== Packet types ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DF_HEADER:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
This the first packet in any data stream. The payload consists of the following struct:&lt;br /&gt;
&lt;br /&gt;
 struct datafeed_header {&lt;br /&gt;
 	int feed_version;&lt;br /&gt;
 	struct timeval starttime;&lt;br /&gt;
 	uint64_t samplerate;&lt;br /&gt;
 	int protocol_id;&lt;br /&gt;
 	int num_probes;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DF_END:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
End of stream (no further data).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DF_TRIGGER:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The trigger matched at this point in the data feed. There is no payload in this packet, but the next data to come in will be the samples that matched the trigger.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DF_LOGIC8:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Raw logic analyzer data. Unitsize is 1 byte, describing up to 8 probes worth of data, one sample per bit. MSB = first probe. Unused bits are set to zero.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DF_LOGIC16:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Raw logic analyzer data. Unitsize is 2 bytes, describing up to 16 probes worth of data, one sample per bit. MSB = first probe. Unused bits are set to zero.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DF_LOGIC24:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Raw logic analyzer data. Unitsize is 3 bytes, describing up to 24 probes worth of data, one sample per bit. MSB = first probe. Unused bits are set to zero.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DF_LOGIC32:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Raw logic analyzer data. Unitsize is 4 bytes, describing up to 32 probes worth of data, one sample per bit. MSB = first probe. Unused bits are set to zero.&lt;br /&gt;
&lt;br /&gt;
== Data store ==&lt;br /&gt;
&lt;br /&gt;
The data store consists of a series of chunks of memory, storing raw samples. The chunks are used to reduce the need for the system to provide a single contiguous area of memory for a potentially large dataset, while allowing the dataset to grow easily as data streams in.&lt;br /&gt;
&lt;br /&gt;
Data store size is kept as small as possible by only storing as much data as is actually used, regardless of the sample size provided by a data feed. For example, a raw logic analyzer feed that comes in as a 4-byte unit of which only 4 probes (and thus 4 bits) are used, will use only 1 byte per unit.&lt;br /&gt;
&lt;br /&gt;
 struct datastore {&lt;br /&gt;
 	/* size in bytes of the number of units stored in this datastore */&lt;br /&gt;
 	int unitsize;&lt;br /&gt;
 	unsigned int num_units;&lt;br /&gt;
 	GSList *chunklist;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Session file ==&lt;br /&gt;
&lt;br /&gt;
A sigrok session file contains all the raw data captured in a session, and various metadata identifying the source, pin names, and so on. The file extension of a session file is &amp;#039;sigrok&amp;#039;. The file format is a ZIP file, containing the following files:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;version:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Contains the version of the session format used in this ZIP file, as an ASCII string. The starting version is 1.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;metadata:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This is a key-value file (.ini-like) containing the following keys in the [main] section:&lt;br /&gt;
&lt;br /&gt;
* probes: Number of probes in this data feed.&lt;br /&gt;
* probename[]: An indexed list of probe names. The probe index starts at 1.&lt;br /&gt;
* trigger[]: An indexed list of triggers configured on the probes. The probe index starts at 1.&lt;br /&gt;
* analyzers: A list of protocol analyzers that was used on this data feed at the time it was saved, separated by a space, with the first entry representing the bottom of the analysis stack. Regardless of this list, the data feed saved is &amp;#039;&amp;#039;&amp;#039;always&amp;#039;&amp;#039;&amp;#039; the raw feed.&lt;br /&gt;
* starttime: High-resolution timestamp denoting the date + time the data was originally captured, in RFC 3339 format e.g. &amp;#039;&amp;#039;2009-04-13 11:35:08.538429857+02:00&amp;#039;&amp;#039;.&lt;br /&gt;
* freqdiv: Sample frequency expressed as 1s / freqdiv.&lt;br /&gt;
* unitsize: The size (in bytes) of a single data unit in the data feed.&lt;br /&gt;
* device: The name of the device that was used to capture this data feed originally.&lt;br /&gt;
* port: The port to which the capture device was connected.&lt;br /&gt;
&lt;br /&gt;
Unused probes have no probename defined, and probes that have no trigger defined are not mentioned in this file. Only relevant data is stored.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;raw:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This file contains the raw signal data, in network-endian format. The size of a unit is set in the &amp;quot;metadata&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== device instances ==&lt;br /&gt;
&lt;br /&gt;
This structure is created by a hardware driver/ It uniquely identifies one device in the system, regardless of how that device is connected.&lt;br /&gt;
&lt;br /&gt;
 struct sigrok_device_instance {&lt;br /&gt;
     int index;&lt;br /&gt;
     int status;&lt;br /&gt;
     int instance_type;&lt;br /&gt;
     char *vendor;&lt;br /&gt;
     char *model;&lt;br /&gt;
     char *version;&lt;br /&gt;
     union {&lt;br /&gt;
         struct usb_device_instance *usb;&lt;br /&gt;
         struct serial_device_instance *serial;&lt;br /&gt;
     };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==== index ====&lt;br /&gt;
A counter identifying different devices handled by the same driver, starting at 0.&lt;br /&gt;
&lt;br /&gt;
==== status ====&lt;br /&gt;
&lt;br /&gt;
Can be one of:&lt;br /&gt;
* ST_INITIALIZING: the device is not yet ready -- for example, it&amp;#039;s still booting, or a firmware upload is in progress.&lt;br /&gt;
* ST_INACTIVE: the device is ready.&lt;br /&gt;
* ST_ACTIVE: the device is currently in use.&lt;br /&gt;
&lt;br /&gt;
==== instance_type ====&lt;br /&gt;
If this is &amp;#039;&amp;#039;&amp;#039;USB_INSTANCE&amp;#039;&amp;#039;&amp;#039;, the &amp;#039;&amp;#039;&amp;#039;usb&amp;#039;&amp;#039;&amp;#039; field points to:&lt;br /&gt;
&lt;br /&gt;
 struct usb_device_instance {&lt;br /&gt;
     uint8_t bus;&lt;br /&gt;
     uint8_t address;&lt;br /&gt;
     struct libusb_device_handle *devhdl;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
If instance_type is &amp;#039;&amp;#039;&amp;#039;SERIAL_INSTANCE, the &amp;#039;&amp;#039;&amp;#039;serial&amp;#039;&amp;#039;&amp;#039; field points to:&lt;br /&gt;
&lt;br /&gt;
 struct serial_device_instance {&lt;br /&gt;
     char *port;&lt;br /&gt;
     int fd;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==== vendor, model, version ====&lt;br /&gt;
&lt;br /&gt;
These are strings ready for display, identifying the device. The &amp;#039;&amp;#039;&amp;#039;version&amp;#039;&amp;#039;&amp;#039; string may be empty, or may have extensive information regarding hardware version, firmware version, on-board memory and so on.&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=TODO&amp;diff=227</id>
		<title>TODO</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=TODO&amp;diff=227"/>
		<updated>2010-03-28T07:29:07Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* Hardware drivers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a random list of TODO items for the code and/or ideas for improvements.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* Remove dependency on glib and gmodule (various reasons), at least in libsigrok, probably also in sigrok-cli.&lt;br /&gt;
** A new linked list implementation must be found, or written, that duplicates the important parts of glib&amp;#039;s GSList (singly-linked list).&lt;br /&gt;
&lt;br /&gt;
== libsigrok ==&lt;br /&gt;
&lt;br /&gt;
* Test whether the libusb 1.0 [[Windows]] port works (seems to build fine using MinGW).&lt;br /&gt;
* Merge all header files in a single &amp;#039;&amp;#039;&amp;#039;sigrok.h&amp;#039;&amp;#039;&amp;#039; (possibly another &amp;#039;&amp;#039;&amp;#039;sigrok-internal.h&amp;#039;&amp;#039;&amp;#039; which is not visible to the lib users).&lt;br /&gt;
* Session loading from file.&lt;br /&gt;
* sigrok_errno:&lt;br /&gt;
** Most backend functions return status as an integer, which is SIGROK_OK if all went well, or SIGROK_NOK and similar if an error occurred.&lt;br /&gt;
** However there is no way to pass any information back as to what went wrong &amp;amp;mdash; and this is important for user-friendliness.&lt;br /&gt;
** Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, &amp;quot;unsupported device&amp;quot;) is better.&lt;br /&gt;
** Both the cmdline and GUI interfaces need this, really, so it should be a backend library thing.&lt;br /&gt;
&lt;br /&gt;
== libsigrokdecode ==&lt;br /&gt;
&lt;br /&gt;
* Keep this independent of libsigrok and any logic analyzer hardware. It should work purely on streams / buffers of bytes to be usable by other projects.&lt;br /&gt;
&lt;br /&gt;
== Hardware drivers ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Bus/driver-independent device instance struct, to replace usb_device_instance and serial_device_instance. Once this is done, device instance-specific information can be cleanly separated and tacked on to the generic device instance:&amp;lt;/s&amp;gt;&lt;br /&gt;
** &amp;lt;s&amp;gt;Vendor/model/version scheme in hardware drivers.&amp;lt;/s&amp;gt;&lt;br /&gt;
** Clean up device-specific globals in hardware drivers, to properly permit multiple devices per driver.&lt;br /&gt;
&lt;br /&gt;
{{fontcolor|green|Bert is working on this.}}&lt;br /&gt;
&lt;br /&gt;
==== Demo driver ====&lt;br /&gt;
&lt;br /&gt;
It would be good if sigrok would ship with a built-in driver that always works, regardless of hardware connected. This driver would be configurable to provide a clock on a virtual pin, with configurable frequency. It could support multiple of these, at different frequencies.&lt;br /&gt;
&lt;br /&gt;
In addition to giving anyone something to do with sigrok to try it out, this may also have some use cases outside of this: perhaps as a reference clock, next to a live capture.&lt;br /&gt;
&lt;br /&gt;
Since this driver only needs to change to 0/1 at a configurable interval, and the interval is exactly the same as the count of the samples in the datafeed it outputs, the signal it generates would thus be 100% perfect, making it an interesting reference.&lt;br /&gt;
&lt;br /&gt;
==== Open-source firmware for the FX2 devices ====&lt;br /&gt;
&lt;br /&gt;
The Cypress FX2-based devices, such as the Saleae Logic and the USBee SX, use only a minimal vendor-provided firmware. The only thing it really does is set the sample rate and turn on the chip&amp;#039;s auto-mode. Nevertheless, the vendors provide the firmware as a binary blob, with no source.&lt;br /&gt;
&lt;br /&gt;
It would be great if sigrok could ship with an own firmware implementation for these devices. Some links:&lt;br /&gt;
&lt;br /&gt;
* [http://sdcc.sourceforge.net/ SDCC], the Small Devices C Compiler, is a compiler specifically suited to small MCUs, and has support for the 8051 core in the FX2.&lt;br /&gt;
* [http://allmybrain.com/2008/12/05/an-open-source-library-for-writing-firmware-on-the-cypress-fx2-with-sdcc/ fx2lib] is an open-source library for writing firmware on the FX2. It has a number of interesting functions, including implementing custom USB vendor commands.&lt;br /&gt;
* [http://gnuradio.org/ GNU Radio]&amp;#039;s USRP2 board has an FX2 on it, and GNU Radio has extensive custom firmware for it.&lt;br /&gt;
&lt;br /&gt;
[[User:Uwe Hermann|Uwe Hermann]] is working on an open-source FX2 firmware for use with various logic analyzers.&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli ==&lt;br /&gt;
&lt;br /&gt;
== sigrok-gui ==&lt;br /&gt;
&lt;br /&gt;
== Decoders ==&lt;br /&gt;
&lt;br /&gt;
== Code quality and build ==&lt;br /&gt;
&lt;br /&gt;
* Consistently use &amp;#039;samplerate&amp;#039; instead of &amp;#039;rate&amp;#039;.&lt;br /&gt;
* Consistently use uint64_t for large data types such as samplerate, number of samples, etc.&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=TODO&amp;diff=221</id>
		<title>TODO</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=TODO&amp;diff=221"/>
		<updated>2010-03-27T11:27:17Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* Hardware drivers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a random list of TODO items for the code and/or ideas for improvements.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* Remove dependency on glib and gmodule (various reasons), at least in libsigrok, probably also in sigrok-cli.&lt;br /&gt;
** A new linked list implementation must be found, or written, that duplicates the important parts of glib&amp;#039;s GSList (singly-linked list).&lt;br /&gt;
&lt;br /&gt;
== libsigrok ==&lt;br /&gt;
&lt;br /&gt;
* Test whether the libusb 1.0 [[Windows]] port works (seems to build fine using MinGW).&lt;br /&gt;
* Merge all header files in a single &amp;#039;&amp;#039;&amp;#039;sigrok.h&amp;#039;&amp;#039;&amp;#039; (possibly another &amp;#039;&amp;#039;&amp;#039;sigrok-internal.h&amp;#039;&amp;#039;&amp;#039; which is not visible to the lib users).&lt;br /&gt;
* Session loading from file.&lt;br /&gt;
* sigrok_errno:&lt;br /&gt;
** Most backend functions return status as an integer, which is SIGROK_OK if all went well, or SIGROK_NOK and similar if an error occurred.&lt;br /&gt;
** However there is no way to pass any information back as to what went wrong &amp;amp;mdash; and this is important for user-friendliness.&lt;br /&gt;
** Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, &amp;quot;unsupported device&amp;quot;) is better.&lt;br /&gt;
** Both the cmdline and GUI interfaces need this, really, so it should be a backend library thing.&lt;br /&gt;
&lt;br /&gt;
== libsigrokdecode ==&lt;br /&gt;
&lt;br /&gt;
* Keep this independent of libsigrok and any logic analyzer hardware. It should work purely on streams / buffers of bytes to be usable by other projects.&lt;br /&gt;
&lt;br /&gt;
== Hardware drivers ==&lt;br /&gt;
&lt;br /&gt;
* Bus/driver-independent device instance struct, to replace usb_device_instance and serial_device_instance. Once this is done, device instance-specific information can be cleanly separated and tacked on to the generic device instance:&lt;br /&gt;
** Clean up device-specific globals in hardware drivers, to properly permit multiple devices per driver.&lt;br /&gt;
** Vendor/model/version scheme in hardware drivers.&lt;br /&gt;
&lt;br /&gt;
Bert is working on this.&lt;br /&gt;
&lt;br /&gt;
==== Demo driver ====&lt;br /&gt;
&lt;br /&gt;
It would be good if sigrok would ship with a built-in driver that always works, regardless of hardware connected. This driver would be configurable to provide a clock on a virtual pin, with configurable frequency. It could support multiple of these, at different frequencies.&lt;br /&gt;
&lt;br /&gt;
In addition to giving anyone something to do with sigrok to try it out, this may also have some use cases outside of this: perhaps as a reference clock, next to a live capture.&lt;br /&gt;
&lt;br /&gt;
Since this driver only needs to change to 0/1 at a configurable interval, and the interval is exactly the same as the count of the samples in the datafeed it outputs, the signal it generates would thus be 100% perfect, making it an interesting reference.&lt;br /&gt;
&lt;br /&gt;
==== Open-source firmware for the FX2 devices ====&lt;br /&gt;
&lt;br /&gt;
The Cypress FX2-based devices, such as the Saleae Logic and the USBee SX, use only a minimal vendor-provided firmware. The only thing it really does is set the sample rate and turn on the chip&amp;#039;s auto-mode. Nevertheless, the vendors provide the firmware as a binary blob, with no source.&lt;br /&gt;
&lt;br /&gt;
It would be great if sigrok could ship with an own firmware implementation for these devices. Some links:&lt;br /&gt;
&lt;br /&gt;
* [http://sdcc.sourceforge.net/ SDCC], the Small Devices C Compiler, is a compiler specifically suited to small MCUs, and has support for the 8051 core in the FX2.&lt;br /&gt;
* [http://allmybrain.com/2008/12/05/an-open-source-library-for-writing-firmware-on-the-cypress-fx2-with-sdcc/ fx2lib] is an open-source library for writing firmware on the FX2. It has a number of interesting functions, including implementing custom USB vendor commands.&lt;br /&gt;
* [http://gnuradio.org/ GNU Radio]&amp;#039;s USRP2 board has an FX2 on it, and GNU Radio has extensive custom firmware for it.&lt;br /&gt;
&lt;br /&gt;
[[User:Uwe Hermann|Uwe Hermann]] is working on an open-source FX2 firmware for use with various logic analyzers.&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli ==&lt;br /&gt;
&lt;br /&gt;
== sigrok-gui ==&lt;br /&gt;
&lt;br /&gt;
== Decoders ==&lt;br /&gt;
&lt;br /&gt;
== Code quality and build ==&lt;br /&gt;
&lt;br /&gt;
* Consistently use &amp;#039;samplerate&amp;#039; instead of &amp;#039;rate&amp;#039;.&lt;br /&gt;
* Consistently use uint64_t for large data types such as samplerate, number of samples, etc.&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Main_Page&amp;diff=206</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Main_Page&amp;diff=206"/>
		<updated>2010-03-26T18:09:44Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;margin-top:0.5em; margin-bottom:0.5em; padding:0.5em 0.5em 0.5em 0.5em; background-color:#cfdfff; align:right; border:1px solid #aabbcc;&amp;quot;&amp;gt;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;sigrok&amp;#039;&amp;#039;&amp;#039; project aims at creating a portable, cross-platform, Free/Libre/Open-Source logic analyzer software that supports various (usually USB-based) logic analyzer hardware products. The code is licensed under the terms of the &amp;#039;&amp;#039;&amp;#039;GNU GPL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Design goals ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Hardware support&amp;#039;&amp;#039;&amp;#039;. Supports a wide variety of logic analyzer hardware from various vendors with different capabilities.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cross-platform&amp;#039;&amp;#039;&amp;#039;. Works on Linux, Mac OS X and Windows, and on architectures including x86, ARM, Sparc and PowerPC.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Scriptable&amp;#039;&amp;#039;&amp;#039;. Extendable with protocol decoders and analyzers written in Python.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Format support&amp;#039;&amp;#039;&amp;#039;. Supports various input and output formats (raw, CSV, gnuplot, [http://en.wikipedia.org/wiki/Value_change_dump VCD], others).&lt;br /&gt;
&lt;br /&gt;
== Supported hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;120px&amp;quot; heights=&amp;quot;70px&amp;quot;&amp;gt;&lt;br /&gt;
File:Saleae Logic.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Saleae Logic]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(supported)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Open workbench logic sniffer.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Openbench Logic Sniffer]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(work in progress)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Cwav usbee sx.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[CWAV USBee SX]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(coming up)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology usb lps.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Braintechnology USB-LPS]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus Logic Cube.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Zeroplus Logic Cube]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Buspirate v3.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Buspirate]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
* [[TODO]]&lt;br /&gt;
* [[Status]]&lt;br /&gt;
* [[Design Ideas]]&lt;br /&gt;
* Build information:&lt;br /&gt;
** [[Linux]]&lt;br /&gt;
** [[Mac OS X]]&lt;br /&gt;
** [[Windows]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Command-line]]&lt;br /&gt;
* [[GUI|Cross-platform GUI]]&lt;br /&gt;
* [[Formats and structures]]&lt;br /&gt;
* [[Hardware plugin API]]&lt;br /&gt;
* [[Output API]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting in touch ==&lt;br /&gt;
&lt;br /&gt;
* Mailing lists: [https://lists.sourceforge.net/lists/listinfo/sigrok-devel sigrok-devel], [https://lists.sourceforge.net/lists/listinfo/sigrok-commits sigrok-commits].&lt;br /&gt;
* IRC: &amp;#039;&amp;#039;&amp;#039;[irc://chat.freenode.net/sigrok #sigrok]&amp;#039;&amp;#039;&amp;#039; on [http://www.freenode.net Freenode].&lt;br /&gt;
* identi.ca: [http://www.identi.ca/group/sigrok sigrok group]&lt;br /&gt;
* [[Press]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;IMPORTANT: Please note that (unless explicitly specified otherwise) all contents in this wiki (including text and images) are released to the &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;CC-BY-SA 3.0&amp;lt;/span&amp;gt;. If you don&amp;#039;t want that, please explicitly specify another free-ish license when adding pages or images to the wiki!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Intronix_Logicport_LA1034&amp;diff=203</id>
		<title>Intronix Logicport LA1034</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Intronix_Logicport_LA1034&amp;diff=203"/>
		<updated>2010-03-26T01:20:29Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Intronix Logicport LA1034 is an FPGA-based logic analyzer, capable of sampling data on 34 channels at up to 500Mhz. It has very limited memory, however, and can only use compression at rates up to 200Mhz. It is available from [http://www.pctestinstruments.com/ http://www.pctestinstruments.com/].&lt;br /&gt;
&lt;br /&gt;
The board is mostly composed of the following components:&lt;br /&gt;
* Altera EP1C4F324C6 (FPGA)&lt;br /&gt;
* FTDI FT245BM (USB interface)&lt;br /&gt;
* AT93C46 (small EEPROM, for storing the FTDI&amp;#039;s USB vendor and product ID)&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Intronix_Logicport_LA1034&amp;diff=202</id>
		<title>Intronix Logicport LA1034</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Intronix_Logicport_LA1034&amp;diff=202"/>
		<updated>2010-03-26T01:16:25Z</updated>

		<summary type="html">&lt;p&gt;Biot: Created page with &amp;#039;The Intronix Logicport LA1034 is an FPGA-based logic analyzer, capable of sampling data on 34 channels at up to 500Mhz. It has very limited memory, however, and can only use comp…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Intronix Logicport LA1034 is an FPGA-based logic analyzer, capable of sampling data on 34 channels at up to 500Mhz. It has very limited memory, however, and can only use compression at rates up to 200Mhz. It is available from [http://www.pctestinstruments.com/].&lt;br /&gt;
&lt;br /&gt;
The board is mostly composed of the following components:&lt;br /&gt;
* Altera EP1C4F324C6 (FPGA)&lt;br /&gt;
* FTDI FT245BM (USB interface)&lt;br /&gt;
* AT93C46 (small EEPROM, for storing the FTDI&amp;#039;s USB vendor and product ID)&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=TODO&amp;diff=199</id>
		<title>TODO</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=TODO&amp;diff=199"/>
		<updated>2010-03-25T17:08:53Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a random list of TODO items for the code and/or ideas for improvements.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* Remove dependency on glib and gmodule (various reasons), at least in libsigrok, probably also in sigrok-cli.&lt;br /&gt;
** A new linked list implementation must be found, or written, that duplicates the important parts of glib&amp;#039;s GSList (singly-linked list).&lt;br /&gt;
* make a manpage for sigrok-cli, based on [[Command-line|the wiki page]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== libsigrok ==&lt;br /&gt;
&lt;br /&gt;
* Test whether the libusb 1.0 Windows port works (seems to build fine using Mingw).&lt;br /&gt;
* Merge all header files in a single sigrok.h (possibly another sigrok-internal.h which is not visible to the lib users).&lt;br /&gt;
* session loading from file&lt;br /&gt;
* sigrok_errno:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Most backend functions return status as an integer, which is SIGROK_OK if all went well, or SIGROK_NOK and similar if an error occurred.&lt;br /&gt;
&lt;br /&gt;
However there is no way to pass any information back as to what went wrong -- and this is important for user-friendliness.&lt;br /&gt;
&lt;br /&gt;
Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, &amp;quot;unsupported device&amp;quot;) is better.&lt;br /&gt;
&lt;br /&gt;
Both the cmdline and GUI interfaces need this, really, so it should be a backend library thing.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libsigrokdecode ==&lt;br /&gt;
&lt;br /&gt;
* Keep this independent of libsigrok and any logic analyzer hardware. It should work purely on streams / buffers of bytes to be usable by other projects.&lt;br /&gt;
&lt;br /&gt;
== Hardware drivers ==&lt;br /&gt;
&lt;br /&gt;
* bus/driver-independent device instance struct, to replace usb_device_instance and serial_device_instance. Once this is done, device instance-specific information can be cleanly separated and tacked on to the generic device instance:&lt;br /&gt;
** clean up device-specific globals in hardware drivers, to properly permit multiple devices per driver&lt;br /&gt;
** vendor/model/version scheme in hardware drivers&lt;br /&gt;
&lt;br /&gt;
==== Demo driver ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
It would be good if sigrok would ship with a built-in driver that always works, regardless of hardware connected. This driver would be configurable to provide a clock on a virtual pin, with configurable frequency. It could support multiple of these, at different frequencies.&lt;br /&gt;
&lt;br /&gt;
In addition to giving anyone something to do with sigrok to try it out, this may also have some use cases outside of this: perhaps as a reference clock, next to a live capture.&lt;br /&gt;
&lt;br /&gt;
Since this driver only needs to change to 0/1 at a configurable interval, and the interval is exactly the same as the count of the samples in the datafeed it outputs, the signal it generates would thus be 100% perfect, making it an interesting reference.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== open source firmware for the FX2 devices ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The Cypress FX2-based devices, such as the Saleae Logic and the USBee SX, use only a minimal vendor-provided firmware. The only thing it really does is set the sample rate and turn on the chip&amp;#039;s auto-mode. Nevertheless, the vendors provide the firmware as a binary blob, with no source.&lt;br /&gt;
&lt;br /&gt;
It would be great if sigrok could ship with an own firmware implementation for these devices. Some links:&lt;br /&gt;
&lt;br /&gt;
* [http://sdcc.sourceforge.net/ SDCC], the Small Devices C Compiler, is a compiler specifically suited to small MCUs, and has support for the 8051 core in the FX2.&lt;br /&gt;
&lt;br /&gt;
* [http://allmybrain.com/2008/12/05/an-open-source-library-for-writing-firmware-on-the-cypress-fx2-with-sdcc/ fx2lib] is an open source library for writing firmware on the FX2. It has a number of interesting functions, including implementing custom USB vendor commands.&lt;br /&gt;
&lt;br /&gt;
* [http://gnuradio.org/ GNU Radio]&amp;#039;s USRP2 board has an FX2 on it, and GNU Radio has extensive custom firmware for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli ==&lt;br /&gt;
&lt;br /&gt;
== sigrok-gui ==&lt;br /&gt;
&lt;br /&gt;
== Decoders ==&lt;br /&gt;
&lt;br /&gt;
== Code quality and build ==&lt;br /&gt;
&lt;br /&gt;
* consistently use &amp;#039;samplerate&amp;#039; instead of &amp;#039;rate&amp;#039;&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Main_Page&amp;diff=198</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Main_Page&amp;diff=198"/>
		<updated>2010-03-25T16:52:13Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;margin-top:0.5em; margin-bottom:0.5em; padding:0.5em 0.5em 0.5em 0.5em; background-color:#cfdfff; align:right; border:1px solid #aabbcc;&amp;quot;&amp;gt;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;sigrok&amp;#039;&amp;#039;&amp;#039; project aims at creating a portable, cross-platform, Free/Libre/Open-Source logic analyzer software that supports various (usually USB-based) logic analyzer hardware products. The code is licensed under the terms of the &amp;#039;&amp;#039;&amp;#039;GNU GPL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Design goals ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Hardware support&amp;#039;&amp;#039;&amp;#039;. Supports a wide variety of logic analyzer hardware from various vendors with different capabilities.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cross-platform&amp;#039;&amp;#039;&amp;#039;. Works on Linux, Mac OS X and Windows, and on architectures including x86, ARM, Sparc and PowerPC.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Scriptable&amp;#039;&amp;#039;&amp;#039;. Extendable with protocol decoders and analyzers written in Lua or Python.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Format support&amp;#039;&amp;#039;&amp;#039;. Supports various input and output formats (raw, CSV, gnuplot, [http://en.wikipedia.org/wiki/Value_change_dump VCD], others).&lt;br /&gt;
&lt;br /&gt;
== Supported hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;120px&amp;quot; heights=&amp;quot;70px&amp;quot;&amp;gt;&lt;br /&gt;
File:Saleae Logic.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Saleae Logic]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(supported)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Open workbench logic sniffer.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Openbench Logic Sniffer]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(work in progress)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Cwav usbee sx.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[CWAV USBee SX]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(coming up)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology usb lps.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Braintechnology USB-LPS]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus Logic Cube.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Zeroplus Logic Cube]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Buspirate v3.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Buspirate]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
* [[TODO]]&lt;br /&gt;
* [[Status]]&lt;br /&gt;
* [[Design Ideas]]&lt;br /&gt;
* Build information:&lt;br /&gt;
** [[Linux]]&lt;br /&gt;
** [[Mac OS X]]&lt;br /&gt;
** [[Windows]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Command-line]]&lt;br /&gt;
* [[GUI|Cross-platform GUI]]&lt;br /&gt;
* [[Formats and structures]]&lt;br /&gt;
* [[Hardware plugin API]]&lt;br /&gt;
* [[Output API]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting in touch ==&lt;br /&gt;
&lt;br /&gt;
* Mailing lists: [https://lists.sourceforge.net/lists/listinfo/sigrok-devel sigrok-devel], [https://lists.sourceforge.net/lists/listinfo/sigrok-commits sigrok-commits].&lt;br /&gt;
* IRC: &amp;#039;&amp;#039;&amp;#039;[irc://chat.freenode.net/sigrok #sigrok]&amp;#039;&amp;#039;&amp;#039; on [http://www.freenode.net Freenode].&lt;br /&gt;
* identi.ca: [http://www.identi.ca/group/sigrok sigrok group]&lt;br /&gt;
* [[Press]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;IMPORTANT: Please note that (unless explicitly specified otherwise) all contents in this wiki (including text and images) are released to the &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;CC-BY-SA 3.0&amp;lt;/span&amp;gt;. If you don&amp;#039;t want that, please explicitly specify another free-ish license when adding pages or images to the wiki!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Main_Page&amp;diff=197</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Main_Page&amp;diff=197"/>
		<updated>2010-03-25T16:47:50Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Sigrok linux.png|right|thumb|[[Linux]] ]]&lt;br /&gt;
[[File:Sigrok macosx.png|right|thumb|[[Mac OS X]] ]]&lt;br /&gt;
[[File:Sigrok windows.png|right|thumb|[[Windows]] ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:0.5em; margin-bottom:0.5em; padding:0.5em 0.5em 0.5em 0.5em; background-color:#cfdfff; align:right; border:1px solid #aabbcc;&amp;quot;&amp;gt;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;sigrok&amp;#039;&amp;#039;&amp;#039; project aims at creating a portable, cross-platform, Free/Libre/Open-Source logic analyzer software that supports various (usually USB-based) logic analyzer hardware products. The code is licensed under the terms of the &amp;#039;&amp;#039;&amp;#039;GNU GPL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Design goals ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Hardware support&amp;#039;&amp;#039;&amp;#039;. Supports a wide variety of logic analyzer hardware from various vendors with different capabilities.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cross-platform&amp;#039;&amp;#039;&amp;#039;. Works on [[Linux]]/[[Mac OS X]]/[[Windows]]/etc. and on x86/ARM/Sparc/PowerPC/etc.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Scriptable&amp;#039;&amp;#039;&amp;#039;. Extendable with protocol decoders and analyzers written in Lua or Python.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Format support&amp;#039;&amp;#039;&amp;#039;. Supports various input and output formats (raw, CSV, gnuplot, [http://en.wikipedia.org/wiki/Value_change_dump VCD], others).&lt;br /&gt;
&lt;br /&gt;
== Supported hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;120px&amp;quot; heights=&amp;quot;70px&amp;quot;&amp;gt;&lt;br /&gt;
File:Saleae Logic.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Saleae Logic]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(supported)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Open workbench logic sniffer.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Openbench Logic Sniffer]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(work in progress)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Cwav usbee sx.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[CWAV USBee SX]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(coming up)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology usb lps.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Braintechnology USB-LPS]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus Logic Cube.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Zeroplus Logic Cube]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Buspirate v3.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Buspirate]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
* [[TODO]]&lt;br /&gt;
* [[Status]]&lt;br /&gt;
* [[Design Ideas]]&lt;br /&gt;
* [[Formats and structures]]&lt;br /&gt;
* [[Hardware plugin API]]&lt;br /&gt;
* [[Output API]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Command-line]]&lt;br /&gt;
* [[GUI|Cross-platform GUI]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting in touch ==&lt;br /&gt;
&lt;br /&gt;
* Mailing lists: [https://lists.sourceforge.net/lists/listinfo/sigrok-devel sigrok-devel], [https://lists.sourceforge.net/lists/listinfo/sigrok-commits sigrok-commits].&lt;br /&gt;
* IRC: &amp;#039;&amp;#039;&amp;#039;[irc://chat.freenode.net/sigrok #sigrok]&amp;#039;&amp;#039;&amp;#039; on [http://www.freenode.net Freenode].&lt;br /&gt;
* identi.ca: [http://www.identi.ca/group/sigrok sigrok group]&lt;br /&gt;
* [[Press]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;IMPORTANT: Please note that (unless explicitly specified otherwise) all contents in this wiki (including text and images) are released to the &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;CC-BY-SA 3.0&amp;lt;/span&amp;gt;. If you don&amp;#039;t want that, please explicitly specify another free-ish license when adding pages or images to the wiki!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Main_Page&amp;diff=196</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Main_Page&amp;diff=196"/>
		<updated>2010-03-25T16:43:45Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Sigrok linux.png|right|thumb|[[Linux]] ]]&lt;br /&gt;
[[File:Sigrok macosx.png|right|thumb|[[Mac OS X]] ]]&lt;br /&gt;
[[File:Sigrok windows.png|right|thumb|[[Windows]] ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:0.5em; margin-bottom:0.5em; padding:0.5em 0.5em 0.5em 0.5em; background-color:#cfdfff; align:right; border:1px solid #aabbcc;&amp;quot;&amp;gt;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;sigrok&amp;#039;&amp;#039;&amp;#039; project aims at creating a portable, cross-platform, Free/Libre/Open-Source logic analyzer software that supports various (usually USB-based) logic analyzer hardware products. The code is licensed under the terms of the &amp;#039;&amp;#039;&amp;#039;GNU GPL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Design goals ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Hardware support&amp;#039;&amp;#039;&amp;#039;. Supports a wide variety of logic analyzer hardware from various vendors with different capabilities.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cross-platform&amp;#039;&amp;#039;&amp;#039;. Works on [[Linux]]/[[Mac OS X]]/[[Windows]]/etc. and on x86/ARM/Sparc/PowerPC/etc.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Scriptable&amp;#039;&amp;#039;&amp;#039;. Extendable with protocol decoders and analyzers written in Lua or Python.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Format support&amp;#039;&amp;#039;&amp;#039;. Supports various input and output formats (raw, CSV, gnuplot, [http://en.wikipedia.org/wiki/Value_change_dump VCD], others).&lt;br /&gt;
&lt;br /&gt;
== Supported hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;120px&amp;quot; heights=&amp;quot;70px&amp;quot;&amp;gt;&lt;br /&gt;
File:Saleae Logic.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Saleae Logic]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(supported)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Open workbench logic sniffer.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Openbench Logic Sniffer]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(work in progress)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Cwav usbee sx.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[CWAV USBee SX]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(coming up)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology usb lps.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Braintechnology USB-LPS]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus Logic Cube.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Zeroplus Logic Cube]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Buspirate v3.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Buspirate]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
* [[TODO]]&lt;br /&gt;
* [[Status]]&lt;br /&gt;
* [[Design Ideas]]&lt;br /&gt;
* [[Formats and structures]]&lt;br /&gt;
* [[Hardware plugin API]]&lt;br /&gt;
* [[Output API]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Command-line]]&lt;br /&gt;
* [[GUI|Cross-platform GUI]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting in touch ==&lt;br /&gt;
&lt;br /&gt;
* Mailing lists: [https://lists.sourceforge.net/lists/listinfo/sigrok-devel sigrok-devel], [https://lists.sourceforge.net/lists/listinfo/sigrok-commits sigrok-commits].&lt;br /&gt;
* IRC: &amp;#039;&amp;#039;&amp;#039;[irc://chat.freenode.net/sigrok #sigrok]&amp;#039;&amp;#039;&amp;#039; on [http://www.freenode.net Freenode].&lt;br /&gt;
* identi.ca: [http://www.identi.ca/group/sigrok sigrok group]&lt;br /&gt;
* [[Press]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;IMPORTANT: Please note that (unless explicitly specified otherwise) all contents in this wiki (including text and images) are released to the &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;CC-BY-SA 3.0&amp;lt;/span&amp;gt;. If you don&amp;#039;t want that, please explicitly specify another free-ish license when adding pages or images to the wiki!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=TODO&amp;diff=195</id>
		<title>TODO</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=TODO&amp;diff=195"/>
		<updated>2010-03-25T15:47:43Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* Hardware drivers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a random list of TODO items for the code and/or ideas for improvements.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* Remove dependency on glib and gmodule (various reasons), at least in libsigrok, probably also in sigrok-cli.&lt;br /&gt;
** A new linked list implementation must be found, or written, that duplicates the important parts of glib&amp;#039;s GSList (singly-linked list).&lt;br /&gt;
* make a manpage for sigrok-cli, based on [[Command-line|the wiki page]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== libsigrok ==&lt;br /&gt;
&lt;br /&gt;
* Test whether the libusb 1.0 Windows port works (seems to build fine using Mingw).&lt;br /&gt;
* Merge all header files in a single sigrok.h (possibly another sigrok-internal.h which is not visible to the lib users).&lt;br /&gt;
* sigrok_errno:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Most backend functions return status as an integer, which is SIGROK_OK if all went well, or SIGROK_NOK and similar if an error occurred.&lt;br /&gt;
&lt;br /&gt;
However there is no way to pass any information back as to what went wrong -- and this is important for user-friendliness.&lt;br /&gt;
&lt;br /&gt;
Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, &amp;quot;unsupported device&amp;quot;) is better.&lt;br /&gt;
&lt;br /&gt;
Both the cmdline and GUI interfaces need this, really, so it should be a backend library thing.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libsigrokdecode ==&lt;br /&gt;
&lt;br /&gt;
* Keep this independent of libsigrok and any logic analyzer hardware. It should work purely on streams / buffers of bytes to be usable by other projects.&lt;br /&gt;
&lt;br /&gt;
== Hardware drivers ==&lt;br /&gt;
&lt;br /&gt;
==== Demo driver ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
It would be good if sigrok would ship with a built-in driver that always works, regardless of hardware connected. This driver would be configurable to provide a clock on a virtual pin, with configurable frequency. It could support multiple of these, at different frequencies.&lt;br /&gt;
&lt;br /&gt;
In addition to giving anyone something to do with sigrok to try it out, this may also have some use cases outside of this: perhaps as a reference clock, next to a live capture.&lt;br /&gt;
&lt;br /&gt;
Since this driver only needs to change to 0/1 at a configurable interval, and the interval is exactly the same as the count of the samples in the datafeed it outputs, the signal it generates would thus be 100% perfect, making it an interesting reference.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== open source firmware for the FX2 devices ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The Cypress FX2-based devices, such as the Saleae Logic and the USBee SX, use only a minimal vendor-provided firmware. The only thing it really does is set the sample rate and turn on the chip&amp;#039;s auto-mode. Nevertheless, the vendors provide the firmware as a binary blob, with no source.&lt;br /&gt;
&lt;br /&gt;
It would be great if sigrok could ship with an own firmware implementation for these devices. Some links:&lt;br /&gt;
&lt;br /&gt;
* [http://sdcc.sourceforge.net/ SDCC], the Small Devices C Compiler, is a compiler specifically suited to small MCUs, and has support for the 8051 core in the FX2.&lt;br /&gt;
&lt;br /&gt;
* [http://allmybrain.com/2008/12/05/an-open-source-library-for-writing-firmware-on-the-cypress-fx2-with-sdcc/ fx2lib] is an open source library for writing firmware on the FX2. It has a number of interesting functions, including implementing custom USB vendor commands.&lt;br /&gt;
&lt;br /&gt;
* [http://gnuradio.org/ GNU Radio]&amp;#039;s USRP2 board has an FX2 on it, and GNU Radio has extensive custom firmware for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli ==&lt;br /&gt;
&lt;br /&gt;
== sigrok-gui ==&lt;br /&gt;
&lt;br /&gt;
== Decoders ==&lt;br /&gt;
&lt;br /&gt;
== Code quality and build ==&lt;br /&gt;
&lt;br /&gt;
* consistently use &amp;#039;samplerate&amp;#039; instead of &amp;#039;rate&amp;#039;&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=TODO&amp;diff=194</id>
		<title>TODO</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=TODO&amp;diff=194"/>
		<updated>2010-03-25T15:46:55Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a random list of TODO items for the code and/or ideas for improvements.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* Remove dependency on glib and gmodule (various reasons), at least in libsigrok, probably also in sigrok-cli.&lt;br /&gt;
** A new linked list implementation must be found, or written, that duplicates the important parts of glib&amp;#039;s GSList (singly-linked list).&lt;br /&gt;
* make a manpage for sigrok-cli, based on [[Command-line|the wiki page]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== libsigrok ==&lt;br /&gt;
&lt;br /&gt;
* Test whether the libusb 1.0 Windows port works (seems to build fine using Mingw).&lt;br /&gt;
* Merge all header files in a single sigrok.h (possibly another sigrok-internal.h which is not visible to the lib users).&lt;br /&gt;
* sigrok_errno:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Most backend functions return status as an integer, which is SIGROK_OK if all went well, or SIGROK_NOK and similar if an error occurred.&lt;br /&gt;
&lt;br /&gt;
However there is no way to pass any information back as to what went wrong -- and this is important for user-friendliness.&lt;br /&gt;
&lt;br /&gt;
Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, &amp;quot;unsupported device&amp;quot;) is better.&lt;br /&gt;
&lt;br /&gt;
Both the cmdline and GUI interfaces need this, really, so it should be a backend library thing.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libsigrokdecode ==&lt;br /&gt;
&lt;br /&gt;
* Keep this independent of libsigrok and any logic analyzer hardware. It should work purely on streams / buffers of bytes to be usable by other projects.&lt;br /&gt;
&lt;br /&gt;
== Hardware drivers ==&lt;br /&gt;
&lt;br /&gt;
* Demo driver&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
It would be good if sigrok would ship with a built-in driver that always works, regardless of hardware connected. This driver would be configurable to provide a clock on a virtual pin, with configurable frequency. It could support multiple of these, at different frequencies.&lt;br /&gt;
&lt;br /&gt;
In addition to giving anyone something to do with sigrok to try it out, this may also have some use cases outside of this: perhaps as a reference clock, next to a live capture.&lt;br /&gt;
&lt;br /&gt;
Since this driver only needs to change to 0/1 at a configurable interval, and the interval is exactly the same as the count of the samples in the datafeed it outputs, the signal it generates would thus be 100% perfect, making it an interesting reference.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* open source firmware for the FX2 devices&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The Cypress FX2-based devices, such as the Saleae Logic and the USBee SX, use only a minimal vendor-provided firmware. The only thing it really does is set the sample rate and turn on the chip&amp;#039;s auto-mode. Nevertheless, the vendors provide the firmware as a binary blob, with no source.&lt;br /&gt;
&lt;br /&gt;
It would be great if sigrok could ship with an own firmware implementation for these devices. Some links:&lt;br /&gt;
&lt;br /&gt;
** [http://sdcc.sourceforge.net/ SDCC], the Small Devices C Compiler, is a compiler specifically suited to small MCUs, and has support for the 8051 core in the FX2.&lt;br /&gt;
&lt;br /&gt;
** [http://allmybrain.com/2008/12/05/an-open-source-library-for-writing-firmware-on-the-cypress-fx2-with-sdcc/ fx2lib] is an open source library for writing firmware on the FX2. It has a number of interesting functions, including implementing custom USB vendor commands.&lt;br /&gt;
&lt;br /&gt;
** [http://gnuradio.org/ GNU Radio]&amp;#039;s USRP2 board has an FX2 on it, and GNU Radio has extensive custom firmware for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli ==&lt;br /&gt;
&lt;br /&gt;
== sigrok-gui ==&lt;br /&gt;
&lt;br /&gt;
== Decoders ==&lt;br /&gt;
&lt;br /&gt;
== Code quality and build ==&lt;br /&gt;
&lt;br /&gt;
* consistently use &amp;#039;samplerate&amp;#039; instead of &amp;#039;rate&amp;#039;&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=TODO&amp;diff=193</id>
		<title>TODO</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=TODO&amp;diff=193"/>
		<updated>2010-03-25T15:26:19Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a random list of TODO items for the code and/or ideas for improvements.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* Remove dependency on glib and gmodule (various reasons), at least in libsigrok, probably also in sigrok-cli.&lt;br /&gt;
** A new linked list implementation must be found, or written, that duplicates the important parts of glib&amp;#039;s GSList (singly-linked list).&lt;br /&gt;
** make a manpage for sigrok-cli, based on [[Command-line|the wiki page]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== libsigrok ==&lt;br /&gt;
&lt;br /&gt;
* Test whether the libusb 1.0 Windows port works (seems to build fine using Mingw).&lt;br /&gt;
* Merge all header files in a single sigrok.h (possibly another sigrok-internal.h which is not visible to the lib users).&lt;br /&gt;
* sigrok_errno:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Most backend functions return status as an integer, which is SIGROK_OK if all went well, or SIGROK_NOK and similar if an error occurred.&lt;br /&gt;
&lt;br /&gt;
However there is no way to pass any information back as to what went wrong -- and this is important for user-friendliness.&lt;br /&gt;
&lt;br /&gt;
Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, &amp;quot;unsupported device&amp;quot;) is better.&lt;br /&gt;
&lt;br /&gt;
Both the cmdline and GUI interfaces need this, really, so it should be a backend library thing.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libsigrokdecode ==&lt;br /&gt;
&lt;br /&gt;
* Keep this independent of libsigrok and any logic analyzer hardware. It should work purely on streams / buffers of bytes to be usable by other projects.&lt;br /&gt;
&lt;br /&gt;
== Hardware drivers ==&lt;br /&gt;
&lt;br /&gt;
* Demo driver&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
It would be good if sigrok would ship with a built-in driver that always works, regardless of hardware connected. This driver would be configurable to provide a clock on a virtual pin, with configurable frequency. It could support multiple of these, at different frequencies.&lt;br /&gt;
&lt;br /&gt;
In addition to giving anyone something to do with sigrok to try it out, this may also have some use cases outside of this: perhaps as a reference clock, next to a live capture.&lt;br /&gt;
&lt;br /&gt;
Since this driver only needs to change to 0/1 at a configurable interval, and the interval is exactly the same as the count of the samples in the datafeed it outputs, the signal it generates would thus be 100% perfect, making it an interesting reference.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli ==&lt;br /&gt;
&lt;br /&gt;
== sigrok-gui ==&lt;br /&gt;
&lt;br /&gt;
== Decoders ==&lt;br /&gt;
&lt;br /&gt;
== Code quality and build ==&lt;br /&gt;
&lt;br /&gt;
* consistently use &amp;#039;samplerate&amp;#039; instead of &amp;#039;rate&amp;#039;&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Sigrok-cli&amp;diff=192</id>
		<title>Sigrok-cli</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Sigrok-cli&amp;diff=192"/>
		<updated>2010-03-25T06:32:36Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &amp;#039;&amp;#039;&amp;#039;command-line frontend&amp;#039;&amp;#039;&amp;#039; cannot display graphical output, but is still sufficient to run through the whole process of hardware initialization, acquisition, protocol analysis and saving the session. It is useful for running on remote or embedded systems. It can display samples on standard output or save them in various file formats.&lt;br /&gt;
&lt;br /&gt;
== Arguments ==&lt;br /&gt;
&lt;br /&gt;
=== Informational ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-H, --list-hw-plugins&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Output a list of all available hardware plugins.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-D, --list-devices&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
List devices found on the system.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-A, --list-analyzer-plugins&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Output a list of all available protocol analysis plugins.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-V, --version&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Show version.&lt;br /&gt;
&lt;br /&gt;
=== Session control ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-L, --load-session-file &amp;lt;filename&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Session file to load previously acquired data from. Any devices or protocols listed in the file will be reused, unless overridden by other commandline arguments.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-S, --save-session-file &amp;lt;filename&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Save session to file.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;--time &amp;lt;ms&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Sample for &amp;lt;ms&amp;gt; milliseconds, then quit. You can optionally follow the number by &amp;#039;s&amp;#039; to state the number of seconds to sample instead. For example, &amp;#039;2s&amp;#039; will sample for two seconds.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;--samples &amp;lt;num&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Acquire &amp;lt;num&amp;gt; samples, then quit.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-d, --device &amp;lt;string&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The device to use for acquisition, specified by ID as report by --list-devices.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-p --probes &amp;lt;string&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
A comma-separated list of probes to be used in the session. The default is to use all the probes available on a device. You can name a probe, like this: &amp;#039;1=CLK&amp;#039;. A range of probes can also be given, in the form &amp;#039;1-5&amp;#039;. Thus a probe list given as &amp;#039;1=CLK,2-4&amp;#039; will give output like this:&lt;br /&gt;
&lt;br /&gt;
 CLK:11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 &lt;br /&gt;
   2:11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 &lt;br /&gt;
   3:11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 &lt;br /&gt;
   4:11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 &lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-t, --triggers &amp;lt;string&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
A comma-separated list of triggers to use, of the form &amp;quot;&amp;lt;probe&amp;gt;=&amp;lt;trigger&amp;gt;&amp;quot;. You can use the name or number of the probe, and the trigger itself is a series of characters:&lt;br /&gt;
&lt;br /&gt;
:* &amp;#039;&amp;#039;&amp;#039;0 or 1&amp;#039;&amp;#039;&amp;#039;: A 0 or 1 value on the pin.&lt;br /&gt;
:* &amp;#039;&amp;#039;&amp;#039;r or f&amp;#039;&amp;#039;&amp;#039;: A rising or falling value on the pin. An &amp;#039;r&amp;#039; effectively corresponds to &amp;quot;01&amp;quot;.&lt;br /&gt;
:* &amp;#039;&amp;#039;&amp;#039;c&amp;#039;&amp;#039;&amp;#039;: Any kind of change on a pin.&lt;br /&gt;
&lt;br /&gt;
Not every device supports all of these trigger types. Use the &amp;quot;-d &amp;lt;device-id&amp;gt;&amp;quot; argument (with no other arguments) to see which triggers your device supports.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-a, --analyzers &amp;lt;string&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
A string listing the sequence of protocol analysis plugins the signal should go through. Each element of the sequence consists of the plugin&amp;#039;s name, with a pipe (|) symbol separating the elements.&lt;br /&gt;
&lt;br /&gt;
=== Session options ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-o, --device-option &amp;lt;option string&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Set a device-specific option. The argument takes the form of &amp;quot;option=value&amp;quot;. Currently the only option supported is &amp;quot;samplerate&amp;quot;, with the argument being the rate in MHz. This option can be used multiple times as needed.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-f, --format &amp;lt;format&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Set the output format to use. This can be either &amp;#039;bin&amp;#039; or &amp;#039;hex&amp;#039;, for binary or hexadecimal, optionally followed by a length argument specifying the number of samples (in bits). Thus &amp;#039;hex128&amp;#039; would display 128 bits per line, in hexadecimal:&lt;br /&gt;
&lt;br /&gt;
 1:ffff ffff ffff ffff ffff ffff ffff ffff&lt;br /&gt;
 2:ff00 ff00 ff00 ff00 ff00 ff00 ff00 ff00&lt;br /&gt;
&lt;br /&gt;
The lines always start with the probe number (or name, if defined), followed by a colon. If no format is specified, it defaults to &amp;#039;bin64&amp;#039;, like this:&lt;br /&gt;
&lt;br /&gt;
 1:11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111&lt;br /&gt;
 2:11111111 00000000 11111111 00000000 11111111 00000000 11111111 00000000&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Sigrok-cli&amp;diff=191</id>
		<title>Sigrok-cli</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Sigrok-cli&amp;diff=191"/>
		<updated>2010-03-25T06:30:09Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &amp;#039;&amp;#039;&amp;#039;command-line frontend&amp;#039;&amp;#039;&amp;#039; cannot display graphical output, but is still sufficient to run through the whole process of hardware initialization, acquisition, protocol analysis and saving the session. It is useful for running on remote or embedded systems. It can display samples on standard output or save them in various file formats.&lt;br /&gt;
&lt;br /&gt;
== Arguments ==&lt;br /&gt;
&lt;br /&gt;
=== Informational ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-H, --list-hw-plugins&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Output a list of all available hardware plugins.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-D, --list-devices&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
List devices found on the system.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-A, --list-analyzer-plugins&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Output a list of all available protocol analysis plugins.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-V, --version&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Show version.&lt;br /&gt;
&lt;br /&gt;
=== Session control ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-L, --load-session-file &amp;lt;filename&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Session file to load previously acquired data from. Any devices or protocols listed in the file will be reused, unless overridden by other commandline arguments.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-S, --save-session-file &amp;lt;filename&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Save session to file.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;--seconds &amp;lt;sec&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Sample for &amp;lt;sec&amp;gt; seconds, then quit. &amp;#039;&amp;#039;&amp;#039;TODO:&amp;#039;&amp;#039;&amp;#039; Change to milliseconds.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;--samples &amp;lt;num&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Acquire &amp;lt;num&amp;gt; samples, then quit.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-d, --device &amp;lt;string&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
The device to use for acquisition, specified by ID as report by --list-devices.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-p --probes &amp;lt;string&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
A comma-separated list of probes to be used in the session. The default is to use all the probes available on a device. You can name a probe, like this: &amp;#039;1=CLK&amp;#039;. A range of probes can also be given, in the form &amp;#039;1-5&amp;#039;. Thus a probe list given as &amp;#039;1=CLK,2-4&amp;#039; will give output like this:&lt;br /&gt;
&lt;br /&gt;
 CLK:11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 &lt;br /&gt;
   2:11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 &lt;br /&gt;
   3:11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 &lt;br /&gt;
   4:11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 &lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-t, --triggers &amp;lt;string&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
A comma-separated list of triggers to use, of the form &amp;quot;&amp;lt;probe&amp;gt;=&amp;lt;trigger&amp;gt;&amp;quot;. You can use the name or number of the probe, and the trigger itself is a series of characters:&lt;br /&gt;
&lt;br /&gt;
:* &amp;#039;&amp;#039;&amp;#039;0 or 1&amp;#039;&amp;#039;&amp;#039;: A 0 or 1 value on the pin.&lt;br /&gt;
:* &amp;#039;&amp;#039;&amp;#039;r or f&amp;#039;&amp;#039;&amp;#039;: A rising or falling value on the pin. An &amp;#039;r&amp;#039; effectively corresponds to &amp;quot;01&amp;quot;.&lt;br /&gt;
:* &amp;#039;&amp;#039;&amp;#039;c&amp;#039;&amp;#039;&amp;#039;: Any kind of change on a pin.&lt;br /&gt;
&lt;br /&gt;
Not every device supports all of these trigger types. Use the &amp;quot;-d &amp;lt;device-id&amp;gt;&amp;quot; argument (with no other arguments) to see which triggers your device supports.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-a, --analyzers &amp;lt;string&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
A string listing the sequence of protocol analysis plugins the signal should go through. Each element of the sequence consists of the plugin&amp;#039;s name, with a pipe (|) symbol separating the elements.&lt;br /&gt;
&lt;br /&gt;
=== Session options ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-o, --device-option &amp;lt;option string&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Set a device-specific option. The argument takes the form of &amp;quot;option=value&amp;quot;. Currently the only option supported is &amp;quot;samplerate&amp;quot;, with the argument being the rate in MHz. This option can be used multiple times as needed.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-f, --format &amp;lt;format&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Set the output format to use. This can be either &amp;#039;bin&amp;#039; or &amp;#039;hex&amp;#039;, for binary or hexadecimal, optionally followed by a length argument specifying the number of samples (in bits). Thus &amp;#039;hex128&amp;#039; would display 128 bits per line, in hexadecimal:&lt;br /&gt;
&lt;br /&gt;
 1:ffff ffff ffff ffff ffff ffff ffff ffff&lt;br /&gt;
 2:ff00 ff00 ff00 ff00 ff00 ff00 ff00 ff00&lt;br /&gt;
&lt;br /&gt;
The lines always start with the probe number (or name, if defined), followed by a colon. If no format is specified, it defaults to &amp;#039;bin64&amp;#039;, like this:&lt;br /&gt;
&lt;br /&gt;
 1:11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111&lt;br /&gt;
 2:11111111 00000000 11111111 00000000 11111111 00000000 11111111 00000000&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Hardware_driver_API&amp;diff=190</id>
		<title>Hardware driver API</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Hardware_driver_API&amp;diff=190"/>
		<updated>2010-03-25T00:39:10Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* Configurable capabilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Every plugin is built as a shared library, dynamically loaded by the backend at startup. The plugin must define a structure as follows:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;sigrok.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 struct device_plugin {&lt;br /&gt;
 	/* plugin-specific */&lt;br /&gt;
 	char *name;&lt;br /&gt;
 	int api_version;&lt;br /&gt;
 	int (*init) (char *deviceinfo);&lt;br /&gt;
 	void (*cleanup) (void);&lt;br /&gt;
 &lt;br /&gt;
 	/* device-specific */&lt;br /&gt;
 	int (*open) (int device_index);&lt;br /&gt;
 	void (*close) (int device_index);&lt;br /&gt;
 	char *(*get_device_info) (int device_index, int device_info_id);&lt;br /&gt;
 	int (*get_status) (int device_index);&lt;br /&gt;
 	int *(*get_capabilities) (void);&lt;br /&gt;
 	int (*set_configuration) (int device_index, int capability, char *value);&lt;br /&gt;
 	int (*start_acquisition) (int device_index, gpointer session_device_id);&lt;br /&gt;
 	void (*stop_acquisition) (int device_index, gpointer session_device_id);&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 #define SIGROK_HARDWARE_PLUGIN   struct device_plugin plugin_info&lt;br /&gt;
&lt;br /&gt;
This structure is the only symbol imported into the backend namespace. The plugin&amp;#039;s variables thus cannot conflict with the global sigrok namespace.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;name&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;A string describing this driver. It will be referenced in saved session files.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;api_version&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Currently defined as 1.&lt;br /&gt;
&lt;br /&gt;
The other members of the structure are pointers to plugin callbacks:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;init(char *device)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Called when the plugin is initially loading into sigrok, typically at program start. The parameter refers to a device name or special file, whichever is applicable for the plugin. Devices which don&amp;#039;t need a supplied device, such as USB devices, can simply ignore this parameter. The function returns the number of devices found, and 0 if no suitable device was found. If a device was found, any initialization it needs must be performed here; for example, uploading firmware should be done here.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;cleanup()&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Called before the plugin is unloaded. Release any resources the plugin might be holding.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;open(int device_index)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Open the specified device. The device index starts at 0.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;close(int device_index)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Close the specified device.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;get_device_info(int device_index, int device_info_id)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Returns information about the given device. The type of information is given as device_info_id, one of a set of defined constants. The return value must be cast according to the type of information returned:&lt;br /&gt;
** DI_IDENTIFIER: String identifying this specific device in the system, in case more than one is connected.&lt;br /&gt;
** DI_NUM_PROBES: The number of probes connected to this device (integer).&lt;br /&gt;
** DI_SAMPLE_RATES: The samples rates this device supports, as a 0-terminated array of uint64_t.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;get_status(int device_index)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Returns an integer describing the status of the plugin&amp;#039;s connection to a device. This may be one of the following:&lt;br /&gt;
** ST_NOT_FOUND: The device was not found.&lt;br /&gt;
** ST_INITIALIZING: The device was found, but is still initializing.&lt;br /&gt;
** ST_INACTIVE: The device is live, but not in use.&lt;br /&gt;
** ST_ACTIVE: The device is currently in use.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;get_capabilities()&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;This function returns a zero-terminated integer array with the plugin&amp;#039;s capabilities, in the form of a set of defined constants. Some of these are informative, and some can be used to configure the plugin (or its connected device). The capabilities tables below have an overview of all possible capabilities.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;set_configuration(int device_index, int capability, char *value)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;This is used to configure the plugin and/or connected device. The capability is one of the constants returned from the get_capabilities() call. The value depends on the parameter that is to be configured.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;start_acquisition(int device_index, gpointer session_device_id)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Start acquisition on the specified device. The session_device_id will be passed along with the data feed of this session, as the first parameter to session bus callbacks.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;stop_acquisition(int device_index, gpointer session_device_id)&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Stop acquisition on the specified device. This causes a DF_END packet to be sent to the sesion bus.&lt;br /&gt;
&lt;br /&gt;
== Informative capabilities ==&lt;br /&gt;
&lt;br /&gt;
* HWCAP_LOGIC_ANALYZER&lt;br /&gt;
: This plugin supplies a logic analyzer.&lt;br /&gt;
&lt;br /&gt;
== Configurable capabilities ==&lt;br /&gt;
&lt;br /&gt;
* HWCAP_SAMPLERATE&lt;br /&gt;
: The sample rate in Hz (uint64_t).&lt;br /&gt;
* HWCAP_LIMIT_MSEC&lt;br /&gt;
: How long the acquisition should last, in ms (uint64_t).&lt;br /&gt;
* HWCAP_LIMIT_SAMPLES&lt;br /&gt;
: How many samples to acquire in the session (uint64_t).&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=User:Biot/monobook.css&amp;diff=166</id>
		<title>User:Biot/monobook.css</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=User:Biot/monobook.css&amp;diff=166"/>
		<updated>2010-03-21T04:20:49Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;body { background: red none; }&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=User:Biot/monobook.css&amp;diff=165</id>
		<title>User:Biot/monobook.css</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=User:Biot/monobook.css&amp;diff=165"/>
		<updated>2010-03-21T04:15:18Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;body { background: red; }&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=User:Biot/monobook.css&amp;diff=164</id>
		<title>User:Biot/monobook.css</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=User:Biot/monobook.css&amp;diff=164"/>
		<updated>2010-03-21T04:12:26Z</updated>

		<summary type="html">&lt;p&gt;Biot: Created page with &amp;#039;body { background: white; }&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;body { background: white; }&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Main_Page&amp;diff=161</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Main_Page&amp;diff=161"/>
		<updated>2010-03-21T03:16:20Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Sigrok linux.png|right|thumb|[[Linux]] ]]&lt;br /&gt;
[[File:Sigrok macosx.png|right|thumb|[[Mac OS X]] ]]&lt;br /&gt;
[[File:Sigrok windows.png|right|thumb|[[Windows]] ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:0.5em; margin-bottom:0.5em; padding:0.5em 0.5em 0.5em 0.5em; background-color:#cfdfff; align:right; border:1px solid #aabbcc;&amp;quot;&amp;gt;&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;sigrok&amp;#039;&amp;#039;&amp;#039; project aims at creating a portable, cross-platform, Free/Libre/Open-Source logic analyzer software that supports various (usually USB-based) logic analyzer hardware products. The code is licensed under the terms of the &amp;#039;&amp;#039;&amp;#039;GNU GPL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Design goals ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Hardware support&amp;#039;&amp;#039;&amp;#039;. Supports a wide variety of logic analyzer hardware from various vendors with different capabilities.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cross-platform&amp;#039;&amp;#039;&amp;#039;. Works on [[Linux]]/[[Mac OS X]]/[[Windows]]/etc. and on x86/ARM/Sparc/PowerPC/etc.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Scriptable&amp;#039;&amp;#039;&amp;#039;. Extendable with protocol decoders and analyzers written in Lua or Python.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Format support&amp;#039;&amp;#039;&amp;#039;. Supports various input and output formats (raw, CSV, gnuplot, [http://en.wikipedia.org/wiki/Value_change_dump VCD], others).&lt;br /&gt;
&lt;br /&gt;
== Supported hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;120px&amp;quot; heights=&amp;quot;70px&amp;quot;&amp;gt;&lt;br /&gt;
File:Saleae Logic.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Saleae Logic]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(supported)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Open workbench logic sniffer.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Openbench Logic Sniffer]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(work in progress)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Cwav usbee sx.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[CWAV USBee SX]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(coming up)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology usb lps.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Braintechnology USB-LPS]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus Logic Cube.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Zeroplus Logic Cube]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Buspirate v3.jpg|&amp;lt;small&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[Buspirate]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(planned)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Status]]&lt;br /&gt;
* [[Design Ideas]]&lt;br /&gt;
* [[Formats and structures]]&lt;br /&gt;
* [[Hardware plugin API]]&lt;br /&gt;
* [[Output API]]&lt;br /&gt;
* [[Library]]&lt;br /&gt;
* [[Press]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Frontends ==&lt;br /&gt;
&lt;br /&gt;
* [[Command-line]]&lt;br /&gt;
* [[GUI|Cross-platform GUI]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting in touch ==&lt;br /&gt;
&lt;br /&gt;
* Mailing lists: [https://lists.sourceforge.net/lists/listinfo/sigrok-devel sigrok-devel], [https://lists.sourceforge.net/lists/listinfo/sigrok-commits sigrok-commits].&lt;br /&gt;
* IRC: &amp;#039;&amp;#039;&amp;#039;[irc://chat.freenode.net/sigrok #sigrok]&amp;#039;&amp;#039;&amp;#039; on [http://www.freenode.net Freenode].&lt;br /&gt;
* identi.ca: [http://www.identi.ca/group/sigrok sigrok group]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;IMPORTANT: Please note that (unless explicitly specified otherwise) all contents in this wiki (including text and images) are released to the &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;CC-BY-SA 3.0&amp;lt;/span&amp;gt;. If you don&amp;#039;t want that, please explicitly specify another free-ish license when adding pages or images to the wiki!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=TODO&amp;diff=133</id>
		<title>TODO</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=TODO&amp;diff=133"/>
		<updated>2010-03-18T21:50:16Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a random list of TODO items for the code and/or ideas for improvements.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* Remove dependency on glib and gmodule (various reasons), at least in libsigrok, probably also in sigrok-cli.&lt;br /&gt;
** A new linked list implementation must be found, or written, that duplicates the important parts of glib&amp;#039;s GSList (singly-linked list).&lt;br /&gt;
&lt;br /&gt;
== libsigrok ==&lt;br /&gt;
&lt;br /&gt;
* Test whether the libusb 1.0 Windows port works (seems to build fine using Mingw).&lt;br /&gt;
* Merge all header files in a single sigrok.h (possibly another sigrok-internal.h which is not visible to the lib users).&lt;br /&gt;
* sigrok_errno:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Most backend functions return status as an integer, which is SIGROK_OK if all went well, or SIGROK_NOK and similar if an error occurred.&lt;br /&gt;
&lt;br /&gt;
However there is no way to pass any information back as to what went wrong -- and this is important for user-friendliness.&lt;br /&gt;
&lt;br /&gt;
Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, &amp;quot;unsupported device&amp;quot;) is better.&lt;br /&gt;
&lt;br /&gt;
Both the cmdline and GUI interfaces need this, really, so it should be a backend library thing.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libsigrokdecode ==&lt;br /&gt;
&lt;br /&gt;
* Keep this independent of libsigrok and any logic analyzer hardware. It should work purely on streams / buffers of bytes to be usable by other projects.&lt;br /&gt;
&lt;br /&gt;
== Hardware drivers ==&lt;br /&gt;
&lt;br /&gt;
* Demo driver&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
It would be good if sigrok would ship with a built-in driver that always works, regardless of hardware connected. This driver would be configurable to provide a clock on a virtual pin, with configurable frequency. It could support multiple of these, at different frequencies.&lt;br /&gt;
&lt;br /&gt;
In addition to giving anyone something to do with sigrok to try it out, this may also have some use cases outside of this: perhaps as a reference clock, next to a live capture.&lt;br /&gt;
&lt;br /&gt;
Since this driver only needs to change to 0/1 at a configurable interval, and the interval is exactly the same as the count of the samples in the datafeed it outputs, the signal it generates would thus be 100% perfect, making it an interesting reference.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli ==&lt;br /&gt;
&lt;br /&gt;
== sigrok-gui ==&lt;br /&gt;
&lt;br /&gt;
== Decoders ==&lt;br /&gt;
&lt;br /&gt;
== Code quality and build ==&lt;br /&gt;
&lt;br /&gt;
* consistently use &amp;#039;samplerate&amp;#039; instead of &amp;#039;rate&amp;#039;&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Public_relations&amp;diff=111</id>
		<title>Public relations</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Public_relations&amp;diff=111"/>
		<updated>2010-03-18T05:15:35Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* Places to announce sigrok */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page combines information about our PR work.&lt;br /&gt;
&lt;br /&gt;
== Places to announce sigrok ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackaday.com/contact-hack-a-day/ submit as a project to hackaday]&lt;br /&gt;
* [http://hackaday.com/2009/03/06/tools-saleae-logic-logic-analyzer/ comment on saleae logic analyzer post on hackaday]&lt;br /&gt;
* [http://www.adafruit.com/blog/ adafruit blog]&lt;br /&gt;
* [http://dangerousprototypes.com/2010/02/25/prototype-open-logic-sniffer-logic-analyzer-2/ dangerous prototypes blog]&lt;br /&gt;
* [http://spins.fedoraproject.org/fel/ Fedora Electronics Lab]&lt;br /&gt;
&lt;br /&gt;
== Projects to contact ==&lt;br /&gt;
* [http://scopegrab32.sourceforge.net/ scopegrab32] Fluke(TM) scope grabber software&lt;br /&gt;
* [http://users.on.net/~merrifield/fluke/scopegrab.html ScopeGrab] Fluke(TM) scope grabber software&lt;br /&gt;
* [http://optics.eee.nottingham.ac.uk/tek/ VXI-11 RPC Protocol over Ethernet Linux drivers] Protocol used for Tektronix Oscilloscopes and Function generators&lt;br /&gt;
* [http://www.febo.com/geekworks/data-capture/tds-2012.html Tektronix TDS-10xx/20xx Oscilloscope GPIB Software]&lt;br /&gt;
* [http://www.mtoussaint.de/qtdmm.html QtDMM] Multimeter DMM readout software&lt;br /&gt;
* [http://xoscope.sourceforge.net/ Xoscope]&lt;br /&gt;
* [http://www.eig.ch/fr/laboratoires/systemes-numeriques/projets/osqoop-l-oscilloscope-libre/index.html osqoop]&lt;br /&gt;
* [http://luke.no-ip.org/code/ glscope]&lt;br /&gt;
* [http://www.sump.org/projects/analyzer/ sump]&lt;br /&gt;
* [http://sourceforge.net/projects/minila/ minila]&lt;br /&gt;
&lt;br /&gt;
== People into hardware hacking (send personal mail) ==&lt;br /&gt;
&lt;br /&gt;
* Travis Goodspeed (open source hardware hacker)&lt;br /&gt;
* Harald Welte (open source hardware hacker)&lt;br /&gt;
* Peter Stuge (open source hardware hacker)&lt;br /&gt;
* Jack Gassett (OLS, [http://gadgetfactory.net/ Gadget Factory])&lt;br /&gt;
* Ian Lesnet (OLS, [http://dangerousprototypes.com Dangerous Prototypes])&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Openbench_Logic_Sniffer&amp;diff=98</id>
		<title>Openbench Logic Sniffer</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Openbench_Logic_Sniffer&amp;diff=98"/>
		<updated>2010-03-17T14:58:34Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Open workbench logic sniffer.jpg|thumb|right|OpenBench Logic Sniffer]]&lt;br /&gt;
&lt;br /&gt;
The [http://www.gadgetfactory.net/gf/project/butterflylogic/ OpenBench Logic Sniffer] (OLS) is an FPGA-based logic analyzer, supporting 32 probes for probing up to 100MHz signals and advanced trigger functionality. It is a fully open source device &amp;amp;mdash; the circuit design, VHDL code for the FPGA, firmware for the PIC microcontroller and Java-based client software are all freely available. The project is a collaboration between [http://www.gadgetfactory.net/ Gadget Factory] and [http://dangerousprototypes.com/ Dangerous Prototypes].&lt;br /&gt;
&lt;br /&gt;
The device started life as the [http://www.sump.org/projects/analyzer/ Sump Logic Analyzer], which was meant to be run on a Digilent FPGA development board. The OpenBench Logic Analyzer unit is a custom-designed board, with the software parts of the Sump project mostly unchanged. The board was designed with low cost in mind: it can be bought for $45 from [http://www.seeedstudio.com/depot/preorder-open-workbench-logic-sniffer-p-612.html?cPath=61_76 Seeed Studio].&lt;br /&gt;
&lt;br /&gt;
Communication between the board and the PC is done via a serial port, running at 115200 bps. The communications protocol between the board and the PC is below, taken from the original Sump documentation.&lt;br /&gt;
&lt;br /&gt;
== Communications Protocol ==&lt;br /&gt;
&lt;br /&gt;
All communication is done using a standard RS232 connection with 8 data bits, 1 stop bit and no parity. The transfer rate can be set to 115200, 57600, 38400 or 19200 bps. XON/XOFF software flow control is available.&lt;br /&gt;
&lt;br /&gt;
When sending captured data the analyzer will send blocks of four bytes, the first containing the lowest channels. No start or end sequence exists. The host can assume an end of transmission if no data has been received for the duration of one byte.&lt;br /&gt;
&lt;br /&gt;
The protocol used by hardware version 0.5 and older is not covered here. Hardware 0.6 uses protocol version 0, and hardware 0.7 uses protocol version 1. Unless otherwise stated, commands exist in both versions.&lt;br /&gt;
&lt;br /&gt;
The following list provides a short overview of commands understood by the analyzer.&lt;br /&gt;
&lt;br /&gt;
=== Short Commands ===&lt;br /&gt;
&lt;br /&gt;
These commands are exactly one byte long.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Reset (0x00)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Resets the device. Should be sent 5 times when the receiver status is unknown. (It could be waiting for up to four bytes of pending long command data.)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Run (0x01)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Arms the trigger.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ID (0x02)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Asks for device identification. The device will respond with four bytes. The first three (&amp;quot;SLA&amp;quot;) identify the device. The last one identifies the protocol version which is currently either &amp;quot;0&amp;quot; or &amp;quot;1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;XON (0x11)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Put transmitter out of pause mode. It will continue to transmit captured data if any is pending. This command is being used for xon/xoff flow control.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;XOFF (0x13)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Put transmitter in pause mode. It will stop transmitting captured data. This command is being used for xon/xoff flow control.&lt;br /&gt;
&lt;br /&gt;
=== Long Commands ===&lt;br /&gt;
&lt;br /&gt;
Are five bytes long. The first byte contains the opcode. The bytes are displayed in the order in which they are sent to the serial port starting left. The bits within one byte are displayed most significant first.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set Trigger Mask (0xc0, 0xc4, 0xc8, 0xcc)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Defines which trigger values must match. In parallel mode each bit represents one channel, in serial mode each bit represents one of the last 32 samples of the selected channel. The opcodes refer to stage 0-3 in the order given above. (Protocol version 0 only supports stage 0.)&lt;br /&gt;
: [[Image:1100xx00.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set Trigger Values (0xc1, 0xc5, 0xc9, 0xcd)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Defines which values individual bits must have. In parallel mode each bit represents one channel, in serial mode each bit represents one of the last 32 samples of the selected channel. The opcodes refer to stage 0-3 in the order given above. (Protocol version 0 only supports stage 0.)&lt;br /&gt;
: [[Image:1100xx01.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set Trigger Configuration (0xc2, 0xc6, 0xca, 0xce)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Configures the selected trigger stage. The opcodes refer to stage 0-3 in the order given above. The following parameters will be set:&lt;br /&gt;
&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;delay&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: If a match occures, the action of the stage is delayed by the given number of samples.&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;level&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: Trigger level at which the stage becomes active.&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;channel&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: Channel to be used in serial mode. (0-31 in normal operation; 0-15 when demux flag is set)&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;serial&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: When set to 1 the stage operates as serial trigger, otherwise it used as parallel trigger.&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;start&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: When set to 1 a match will start the capturing process. The trigger level will rise on match regardless of this flag. (Command available as of protocol version 1.)&lt;br /&gt;
&lt;br /&gt;
: [[Image:1100xx10.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set Divider (0x80)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: When x is written, the sampling frequency is set to f = clock / (x + 1).&lt;br /&gt;
&lt;br /&gt;
: [[Image:10000000.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set Read &amp;amp; Delay Count (0x81)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Read Count is the number of samples (divided by four) to read back from memory and sent to the host computer. Delay Count is the number of samples (divided by four) to capture after the trigger fired. A Read Count bigger than the Delay Count means that data from before the trigger match will be read back. This data will only be valid if the device was running long enough before the trigger matched.&lt;br /&gt;
: [[Image:10000001.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set Flags (0x82)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Sets the following flags:&lt;br /&gt;
&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;demux&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: Enables the demux input module. (Filter must be off.)&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;filter&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: Enables the filter input module. (Demux must be off.)&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;channel groups&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: Disable channel group. Disabled groups are excluded from data transmissions. This can be used to speed up transfers. There are four groups, each represented by one bit. Starting with the least significant bit of the channel group field channels are assigned as follows: 0-7, 8-15, 16-23, 24-31.&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;external&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: Selects the clock to be used for sampling. If set to 0, the internal clock divided by the configured divider is used, and if set to 1, the external clock will be used. Filter and demux are only available with internal clock.&lt;br /&gt;
:: &amp;#039;&amp;#039;&amp;#039;inverted&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
::: When set to 1, the external clock will be inverted before being used. The inversion causes a delay that may cause problems at very high clock rates. This option only has an effect with external set to 1.&lt;br /&gt;
&lt;br /&gt;
: [[Image:10000010.png]]&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=TODO&amp;diff=92</id>
		<title>TODO</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=TODO&amp;diff=92"/>
		<updated>2010-03-17T01:59:31Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* Hardwware drivers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a random list of TODO items for the code and/or ideas for improvements.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* Remove dependency on glib and gmodule (various reasons), at least in libsigrok, probably also in sigrok-cli.&lt;br /&gt;
** A new linked list implementation must be found, or written, that duplicates the important parts of glib&amp;#039;s GSList (singly-linked list).&lt;br /&gt;
&lt;br /&gt;
== libsigrok ==&lt;br /&gt;
&lt;br /&gt;
* Test whether the libusb 1.0 Windows port works (seems to build fine using Mingw).&lt;br /&gt;
* Merge all header files in a single sigrok.h (possibly another sigrok-internal.h which is not visible to the lib users).&lt;br /&gt;
* sigrok_errno:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Most backend functions return status as an integer, which is SIGROK_OK if all went well, or SIGROK_NOK and similar if an error occurred.&lt;br /&gt;
&lt;br /&gt;
However there is no way to pass any information back as to what went wrong -- and this is important for user-friendliness.&lt;br /&gt;
&lt;br /&gt;
Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, &amp;quot;unsupported device&amp;quot;) is better.&lt;br /&gt;
&lt;br /&gt;
Both the cmdline and GUI interfaces need this, really, so it should be a backend library thing.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libsigrokdecode ==&lt;br /&gt;
&lt;br /&gt;
* Keep this independent of libsigrok and any logic analyzer hardware. It should work purely on streams / buffers of bytes to be usable by other projects.&lt;br /&gt;
&lt;br /&gt;
== Hardware drivers ==&lt;br /&gt;
&lt;br /&gt;
* Demo driver&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
It would be good if sigrok would ship with a built-in driver that always works, regardless of hardware connected. This driver would be configurable to provide a clock on a virtual pin, with configurable frequency. It could support multiple of these, at different frequencies.&lt;br /&gt;
&lt;br /&gt;
In addition to giving anyone something to do with sigrok to try it out, this may also have some use cases outside of this: perhaps as a reference clock, next to a live capture.&lt;br /&gt;
&lt;br /&gt;
Since this driver only needs to change to 0/1 at a configurable interval, and the interval is exactly the same as the count of the samples in the datafeed it outputs, the signal it generates would thus be 100% perfect, making it an interesting reference.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli ==&lt;br /&gt;
&lt;br /&gt;
== sigrok-gui ==&lt;br /&gt;
&lt;br /&gt;
== Decoders ==&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=TODO&amp;diff=91</id>
		<title>TODO</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=TODO&amp;diff=91"/>
		<updated>2010-03-17T01:34:41Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a random list of TODO items for the code and/or ideas for improvements.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* Remove dependency on glib and gmodule (various reasons), at least in libsigrok, probably also in sigrok-cli.&lt;br /&gt;
** A new linked list implementation must be found, or written, that duplicates the important parts of glib&amp;#039;s GSList (singly-linked list).&lt;br /&gt;
&lt;br /&gt;
== libsigrok ==&lt;br /&gt;
&lt;br /&gt;
* Test whether the libusb 1.0 Windows port works (seems to build fine using Mingw).&lt;br /&gt;
* Merge all header files in a single sigrok.h (possibly another sigrok-internal.h which is not visible to the lib users).&lt;br /&gt;
* sigrok_errno:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Most backend functions return status as an integer, which is SIGROK_OK if all went well, or SIGROK_NOK and similar if an error occurred.&lt;br /&gt;
&lt;br /&gt;
However there is no way to pass any information back as to what went wrong -- and this is important for user-friendliness.&lt;br /&gt;
&lt;br /&gt;
Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, &amp;quot;unsupported device&amp;quot;) is better.&lt;br /&gt;
&lt;br /&gt;
Both the cmdline and GUI interfaces need this, really, so it should be a backend library thing.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libsigrokdecode ==&lt;br /&gt;
&lt;br /&gt;
* Keep this independent of libsigrok and any logic analyzer hardware. It should work purely on streams / buffers of bytes to be usable by other projects.&lt;br /&gt;
&lt;br /&gt;
== Hardwware drivers ==&lt;br /&gt;
&lt;br /&gt;
* Demo driver&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
It would be good if sigrok would ship with a built-in driver that always works, regardless of hardware connected. This driver would be configurable to provide a clock on a virtual pin, with configurable frequency. It could support multiple of these, at different frequencies.&lt;br /&gt;
&lt;br /&gt;
In addition to giving anyone something to do with sigrok to try it out, this may also have some use cases outside of this: perhaps as a reference clock, next to a live capture.&lt;br /&gt;
&lt;br /&gt;
Since this driver only needs to change to 0/1 at a configurable interval, and the interval is exactly the same as the count of the samples in the datafeed it outputs, the signal it generates would thus be 100% perfect, making it an interesting reference.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli ==&lt;br /&gt;
&lt;br /&gt;
== sigrok-gui ==&lt;br /&gt;
&lt;br /&gt;
== Decoders ==&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=TODO&amp;diff=90</id>
		<title>TODO</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=TODO&amp;diff=90"/>
		<updated>2010-03-17T01:33:34Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* General */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a random list of TODO items for the code and/or ideas for improvements.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* Remove dependency on glib and gmodule (various reasons), at least in libsigrok, probably also in sigrok-cli.&lt;br /&gt;
** A new linked list implementation must be found, or written, that duplicates the important parts of glib&amp;#039;s GSList (singly-linked list).&lt;br /&gt;
&lt;br /&gt;
== libsigrok ==&lt;br /&gt;
&lt;br /&gt;
* Test whether the libusb 1.0 Windows port works (seems to build fine using Mingw).&lt;br /&gt;
* Merge all header files in a single sigrok.h (possibly another sigrok-internal.h which is not visible to the lib users).&lt;br /&gt;
* sigrok_errno:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Most backend functions return status as an integer, which is SIGROK_OK if all went well, or SIGROK_NOK and similar if an error occurred.&lt;br /&gt;
&lt;br /&gt;
However there is no way to pass any information back as to what went wrong -- and this is important for user-friendliness.&lt;br /&gt;
&lt;br /&gt;
Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, &amp;quot;unsupported device&amp;quot;) is better.&lt;br /&gt;
&lt;br /&gt;
Both the cmdline and GUI interfaces need this, really, so it should be a backend library thing.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libsigrokdecode ==&lt;br /&gt;
&lt;br /&gt;
* Keep this independent of libsigrok and any logic analyzer hardware. It should work purely on streams / buffers of bytes to be usable by other projects.&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli ==&lt;br /&gt;
&lt;br /&gt;
== sigrok-gui ==&lt;br /&gt;
&lt;br /&gt;
== Decoders ==&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=TODO&amp;diff=89</id>
		<title>TODO</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=TODO&amp;diff=89"/>
		<updated>2010-03-17T01:32:32Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* libsigrok */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a random list of TODO items for the code and/or ideas for improvements.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* Remove dependency on glib and gmodule (various reasons), at least in libsigrok, probably also in sigrok-cli.&lt;br /&gt;
&lt;br /&gt;
== libsigrok ==&lt;br /&gt;
&lt;br /&gt;
* Test whether the libusb 1.0 Windows port works (seems to build fine using Mingw).&lt;br /&gt;
* Merge all header files in a single sigrok.h (possibly another sigrok-internal.h which is not visible to the lib users).&lt;br /&gt;
* sigrok_errno:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Most backend functions return status as an integer, which is SIGROK_OK if all went well, or SIGROK_NOK and similar if an error occurred.&lt;br /&gt;
&lt;br /&gt;
However there is no way to pass any information back as to what went wrong -- and this is important for user-friendliness.&lt;br /&gt;
&lt;br /&gt;
Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, &amp;quot;unsupported device&amp;quot;) is better.&lt;br /&gt;
&lt;br /&gt;
Both the cmdline and GUI interfaces need this, really, so it should be a backend library thing.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libsigrokdecode ==&lt;br /&gt;
&lt;br /&gt;
* Keep this independent of libsigrok and any logic analyzer hardware. It should work purely on streams / buffers of bytes to be usable by other projects.&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli ==&lt;br /&gt;
&lt;br /&gt;
== sigrok-gui ==&lt;br /&gt;
&lt;br /&gt;
== Decoders ==&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Public_relations&amp;diff=86</id>
		<title>Public relations</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Public_relations&amp;diff=86"/>
		<updated>2010-03-16T01:38:09Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page combines information about our PR work.&lt;br /&gt;
&lt;br /&gt;
== Places to announce sigrok ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackaday.com/contact-hack-a-day/ submit as a project to hackaday]&lt;br /&gt;
* [http://hackaday.com/2009/03/06/tools-saleae-logic-logic-analyzer/ comment on saleae logic analyzer post on hackaday]&lt;br /&gt;
* [http://www.adafruit.com/blog/ adafruit blog]&lt;br /&gt;
* [http://dangerousprototypes.com/2010/02/25/prototype-open-logic-sniffer-logic-analyzer-2/ dangerous prototypes blog]&lt;br /&gt;
&lt;br /&gt;
== Projects to contact ==&lt;br /&gt;
* [http://scopegrab32.sourceforge.net/ scopegrab32] Fluke(TM) scope grabber software&lt;br /&gt;
* [http://users.on.net/~merrifield/fluke/scopegrab.html ScopeGrab] Fluke(TM) scope grabber software&lt;br /&gt;
* [http://optics.eee.nottingham.ac.uk/tek/ VXI-11 RPC Protocol over Ethernet Linux drivers] Protocol used for Tektronix Oscilloscopes and Function generators&lt;br /&gt;
* [http://www.febo.com/geekworks/data-capture/tds-2012.html Tektronix TDS-10xx/20xx Oscilloscope GPIB Software]&lt;br /&gt;
* [http://www.mtoussaint.de/qtdmm.html QtDMM] Multimeter DMM readout software&lt;br /&gt;
* [http://xoscope.sourceforge.net/ Xoscope]&lt;br /&gt;
* [http://www.eig.ch/fr/laboratoires/systemes-numeriques/projets/osqoop-l-oscilloscope-libre/index.html osqoop]&lt;br /&gt;
* [http://luke.no-ip.org/code/ glscope]&lt;br /&gt;
* [http://www.sump.org/projects/analyzer/ sump]&lt;br /&gt;
* [http://sourceforge.net/projects/minila/ minila]&lt;br /&gt;
&lt;br /&gt;
== People into hardware hacking (send personal mail) ==&lt;br /&gt;
&lt;br /&gt;
* Travis Goodspeed (open source hardware hacker)&lt;br /&gt;
* Harald Welte (open source hardware hacker)&lt;br /&gt;
* Peter Stuge (open source hardware hacker)&lt;br /&gt;
* Jack Gassett (OLS, [http://gadgetfactory.net/ Gadget Factory])&lt;br /&gt;
* Ian Lesnet (OLS, [http://dangerousprototypes.com Dangerous Prototypes])&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Hardware_driver_API&amp;diff=78</id>
		<title>Hardware driver API</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Hardware_driver_API&amp;diff=78"/>
		<updated>2010-03-15T20:33:10Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Every plugin is built as a shared library, dynamically loaded by the backend at startup. The plugin must define a structure as follows:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;sigrok.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 struct device_plugin {&lt;br /&gt;
 	/* plugin-specific */&lt;br /&gt;
 	char *name;&lt;br /&gt;
 	int api_version;&lt;br /&gt;
 	int (*init) (char *deviceinfo);&lt;br /&gt;
 	void (*cleanup) (void);&lt;br /&gt;
 &lt;br /&gt;
 	/* device-specific */&lt;br /&gt;
 	int (*open) (int device_index);&lt;br /&gt;
 	void (*close) (int device_index);&lt;br /&gt;
 	char *(*get_device_info) (int device_index, int device_info_id);&lt;br /&gt;
 	int (*get_status) (int device_index);&lt;br /&gt;
 	int *(*get_capabilities) (void);&lt;br /&gt;
 	int (*set_configuration) (int device_index, int capability, char *value);&lt;br /&gt;
 	int (*start_acquisition) (int device_index, gpointer session_device_id);&lt;br /&gt;
 	void (*stop_acquisition) (int device_index, gpointer session_device_id);&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 #define SIGROK_HARDWARE_PLUGIN   struct device_plugin plugin_info&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This structure is the only symbol imported into the backend namespace. The plugin&amp;#039;s variables thus cannot conflict with the global sigrok namespace.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;name&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
A string describing this driver. It will be referenced in saved session files.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;api_version&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Currently defined as 1.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other members of the structure are pointers to plugin callbacks:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;init(char *device)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Called when the plugin is initially loading into sigrok, typically at program start. The parameter refers to a device name or special file, whichever is applicable for the plugin. Devices which don&amp;#039;t need a supplied device, such as USB devices, can simply ignore this parameter.&lt;br /&gt;
&lt;br /&gt;
The function returns the number of devices found, and 0 if no suitable device was found. If a device was found, any initialization it needs must be performed here; for example, uploading firmware should be done here.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;cleanup()&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Called before the plugin is unloaded. Release any resources the plugin might be holding.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;open(int device_index)&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Open the specified device. The device index starts at 0.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;close(int device_index)&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Close the specified device.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;get_device_info(int device_index, int device_info_id)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Returns information about the given device. The type of information is given as device_info_id, one of a set of defined constants. The return value must be cast according to the type of information returned:&lt;br /&gt;
&lt;br /&gt;
* DI_IDENTIFIER: string identifying this specific device in the system, in case more than one is connected.&lt;br /&gt;
* DI_NUM_PROBES: the number of probes connected to this device (integer).&lt;br /&gt;
* DI_SAMPLE_RATES: the samples rates this device supports, as a 0-terminated array of float.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;get_status(int device_index)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Returns an integer describing the status of the plugin&amp;#039;s connection to a device. This may be one of the following:&lt;br /&gt;
&lt;br /&gt;
* ST_NOT_FOUND:     The device was not found.&lt;br /&gt;
* ST_INITIALIZING:  The device was found, but is still initializing.&lt;br /&gt;
* ST_INACTIVE:      The device is live, but not in use.&lt;br /&gt;
* ST_ACTIVE:        The device is currently in use.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;get_capabilities()&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
This function returns zero-terminated integer array with the plugin&amp;#039;s capabilities, in the form of a set of defined constants. Some of these are informative, and some can be used to configure the plugin (or its connected device). The capabilities tables below have an overview of all possible capabilities.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;set_configuration(int device_index, int capability, char *value)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
This is used to configure the plugin and/or connected device. The capability is one of the constants returned from the get_capabilities() call. The value depends on the parameter that is to be configured.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;start_acquisition(int device_index, gpointer session_device_id)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Start acquisition on the specified device. The session_device_id will be passed along with the data feed of this session, as the first parameter to session bus callbacks.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;stop_acquisition(int device_index, gpointer session_device_id)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Stop acquisition on the specified device. This causes a DF_END packet to be sent to the sesion bus.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Informative capabilities ==&lt;br /&gt;
&lt;br /&gt;
* HWCAP_LOGIC_ANALYZER&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
This plugin supplies a logic analyzer.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configurable capabilities ==&lt;br /&gt;
&lt;br /&gt;
* HWCAP_SAMPLERATE&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The sample rate in Mhz.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* HWCAP_LIMIT_SECONDS&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
How long the acquisition should last.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* HWCAP_LIMIT_SAMPLES&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
How many samples to acquire in the session.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Public_relations&amp;diff=73</id>
		<title>Public relations</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Public_relations&amp;diff=73"/>
		<updated>2010-03-15T18:56:44Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* Places to announce sigrok */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page combines information about our PR work.&lt;br /&gt;
&lt;br /&gt;
== Places to announce sigrok ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackaday.com/contact-hack-a-day/ submit as a project to hackaday]&lt;br /&gt;
* [http://hackaday.com/2009/03/06/tools-saleae-logic-logic-analyzer/ comment on saleae logic analyzer post on hackaday]&lt;br /&gt;
* adafruit blog&lt;br /&gt;
&lt;br /&gt;
== Projects to contact ==&lt;br /&gt;
* [http://scopegrab32.sourceforge.net/ scopegrab32] Fluke(TM) scope grabber software&lt;br /&gt;
* [http://users.on.net/~merrifield/fluke/scopegrab.html ScopeGrab] Fluke(TM) scope grabber software&lt;br /&gt;
&lt;br /&gt;
== People into hardware hacking (send personal mail) ==&lt;br /&gt;
&lt;br /&gt;
* Travis Goodspeed&lt;br /&gt;
* Harald Welte&lt;br /&gt;
* Peter Stuge&lt;br /&gt;
* Jack Gassett&lt;br /&gt;
* Ian Lesnet&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Public_relations&amp;diff=72</id>
		<title>Public relations</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Public_relations&amp;diff=72"/>
		<updated>2010-03-15T18:55:37Z</updated>

		<summary type="html">&lt;p&gt;Biot: /* People into hardware hacking (send personal mail) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page combines information about our PR work.&lt;br /&gt;
&lt;br /&gt;
== Places to announce sigrok ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackaday.com/contact-hack-a-day/ submit as a project to hackaday]&lt;br /&gt;
* [http://hackaday.com/2009/03/06/tools-saleae-logic-logic-analyzer/ comment on saleae logic analyzer post on hackaday]&lt;br /&gt;
&lt;br /&gt;
== Projects to contact ==&lt;br /&gt;
* [http://scopegrab32.sourceforge.net/ scopegrab32] Fluke(TM) scope grabber software&lt;br /&gt;
* [http://users.on.net/~merrifield/fluke/scopegrab.html ScopeGrab] Fluke(TM) scope grabber software&lt;br /&gt;
&lt;br /&gt;
== People into hardware hacking (send personal mail) ==&lt;br /&gt;
&lt;br /&gt;
* Travis Goodspeed&lt;br /&gt;
* Harald Welte&lt;br /&gt;
* Peter Stuge&lt;br /&gt;
* Jack Gassett&lt;br /&gt;
* Ian Lesnet&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Public_relations&amp;diff=68</id>
		<title>Public relations</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Public_relations&amp;diff=68"/>
		<updated>2010-03-15T18:39:04Z</updated>

		<summary type="html">&lt;p&gt;Biot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page combines information about our PR work.&lt;br /&gt;
&lt;br /&gt;
== Places to announce sigrok ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackaday.com/contact-hack-a-day/ submit as a project to hackaday]&lt;br /&gt;
* [http://hackaday.com/2009/03/06/tools-saleae-logic-logic-analyzer/ comment on saleae logic analyzer post on hackaday]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== People into hardware hacking (send personal mail) ==&lt;br /&gt;
&lt;br /&gt;
Travis Goodspeed&lt;br /&gt;
Harald Welte&lt;/div&gt;</summary>
		<author><name>Biot</name></author>
	</entry>
</feed>