<?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=Martling</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=Martling"/>
	<link rel="alternate" type="text/html" href="https://sigrok.org/wiki/Special:Contributions/Martling"/>
	<updated>2026-04-08T14:48:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Talk:Rigol_VS5202D&amp;diff=11378</id>
		<title>Talk:Rigol VS5202D</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Talk:Rigol_VS5202D&amp;diff=11378"/>
		<updated>2016-01-07T14:23:38Z</updated>

		<summary type="html">&lt;p&gt;Martling: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Why was the info on this page deleted? [[User:Jostikas|Jostikas]] ([[User talk:Jostikas|talk]]) 21:40, 5 January 2016 (CET)&lt;br /&gt;
&lt;br /&gt;
: This is a page for a specific model. Information common to all devices in this series was moved to [[Rigol VS5000 series]]. --[[User:Martling|Martling]] ([[User talk:Martling|talk]]) 15:23, 7 January 2016 (CET)&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Advertising_sigrok_compatible_products&amp;diff=11028</id>
		<title>Advertising sigrok compatible products</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Advertising_sigrok_compatible_products&amp;diff=11028"/>
		<updated>2015-09-27T15:11:59Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Rules */ Add rule that firmware must be redistributable.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&amp;#039;re happy to see that manufacturers and resellers are now recognising sigrok compatibility as a selling point.&lt;br /&gt;
&lt;br /&gt;
If you want to advertise that your product can be used with sigrok, we have some rules you should follow:&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
&lt;br /&gt;
1. &amp;#039;&amp;#039;&amp;#039;Your device must be fully supported in the current git master version of [[libsigrok]]&amp;#039;&amp;#039;&amp;#039;. Any other version, patch or branch is not sufficient. It may work for you, but we need to make sure that it fully complies with our internal APIs, licensing rules and other requirements, so that we can continue to support it in future. Once a driver is accepted into the master branch, users know that it will be kept up to date in future releases.&lt;br /&gt;
&lt;br /&gt;
2. &amp;#039;&amp;#039;&amp;#039;The protocols used by your device must be publicly documented&amp;#039;&amp;#039;&amp;#039;. This can be through your own protocol documentation, or information added to the sigrok wiki &amp;amp;mdash; as long as it is complete and accurate. If the source code to your device firmware is public (even if not under an open source license), that is also sufficient. Driver code alone is not sufficient. Others may need to reimplement support for your device in the future, and they need to know &amp;#039;&amp;#039;why&amp;#039;&amp;#039; the driver does what it does, and whether they can do things differently.&lt;br /&gt;
&lt;br /&gt;
3. &amp;#039;&amp;#039;&amp;#039;If your device requires additional files at runtime, redistribution of these must be permitted&amp;#039;&amp;#039;&amp;#039;. This rule is only relevant if your device needs firmware or other data files to be uploaded by the driver every time the device is used. In this case, redistribution of the original unmodified files must be permitted, so that users do not need to download anything extra to use your device.&lt;br /&gt;
&lt;br /&gt;
4. &amp;#039;&amp;#039;&amp;#039;You must not imply any endorsement of your product by us&amp;#039;&amp;#039;&amp;#039;. The sigrok project does not approve, recommend or guarantee equipment. Support for a given device in libsigrok doesn&amp;#039;t mean we think it&amp;#039;s any good.&lt;br /&gt;
&lt;br /&gt;
== Logo ==&lt;br /&gt;
&lt;br /&gt;
If you follow these rules, then you can use the &amp;#039;&amp;#039;&amp;#039;Works with sigrok&amp;#039;&amp;#039;&amp;#039; logo on your product or advertising materials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Works_with_sigrok.svg|&amp;lt;small&amp;gt;Logo with text (SVG), transparent background&amp;lt;small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please make the image a link to http://sigrok.org if you use it on a web page.&lt;br /&gt;
&lt;br /&gt;
This is a derived version of the [[Logo|sigrok logo]] specifically for advertising compatible products. Please &amp;#039;&amp;#039;&amp;#039;do not&amp;#039;&amp;#039;&amp;#039; use the normal sigrok logo, which is intended for things &amp;#039;&amp;#039;developed by&amp;#039;&amp;#039; the sigrok project.&lt;br /&gt;
&lt;br /&gt;
As a user, if you see this logo, you should take it as a statement by the manufacturer or seller that the product meets the guidelines above.&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Advertising_sigrok_compatible_products&amp;diff=11024</id>
		<title>Advertising sigrok compatible products</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Advertising_sigrok_compatible_products&amp;diff=11024"/>
		<updated>2015-09-25T10:09:06Z</updated>

		<summary type="html">&lt;p&gt;Martling: Initial draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;This page is a draft for internal review. If you&amp;#039;ve found your way here, please disregard it for now.&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We&amp;#039;re happy to see that manufacturers and resellers are now recognising sigrok compatibility as a selling point.&lt;br /&gt;
&lt;br /&gt;
If you want to advertise that your product can be used with sigrok, we have some rules you should follow:&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
&lt;br /&gt;
1. &amp;#039;&amp;#039;&amp;#039;Your device must be fully supported in the current git master version of libsigrok&amp;#039;&amp;#039;&amp;#039;. Any other version, patch or branch is not sufficient. It may work for you, but we need to make sure that it fully complies with our internal APIs, licensing rules and other requirements, so that we can continue to support it in future. Once a driver is accepted into the master branch, users know that it will be kept up to date in future releases.&lt;br /&gt;
&lt;br /&gt;
2. &amp;#039;&amp;#039;&amp;#039;The protocols used by your device must be publicly documented&amp;#039;&amp;#039;&amp;#039;. This can be through your own protocol documentation, or information added to the sigrok wiki - as long as it is complete and accurate. If the source code to your device firmware is public (even if not under an open source license), that is also sufficient. Driver code alone is not sufficient. Others may need to reimplement support for your device in the future, and they need to know &amp;#039;&amp;#039;why&amp;#039;&amp;#039; the driver does what it does, and whether they can do things differently.&lt;br /&gt;
&lt;br /&gt;
3. &amp;#039;&amp;#039;&amp;#039;You must not imply any endorsement of your product by us&amp;#039;&amp;#039;&amp;#039;. The sigrok project does not approve, recommend or guarantee equipment. Support for a given device in libsigrok doesn&amp;#039;t mean we think it&amp;#039;s any good.&lt;br /&gt;
&lt;br /&gt;
== Logo ==&lt;br /&gt;
&lt;br /&gt;
If you follow these rules, then you can use the &amp;#039;&amp;#039;&amp;#039;Works with sigrok&amp;#039;&amp;#039;&amp;#039; logo on your product or advertising materials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Works_with_sigrok.svg|&amp;lt;small&amp;gt;Logo with text (SVG), transparent background&amp;lt;small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a derived version of the [[Logo|sigrok logo]] specifically for advertising compatible products. Please &amp;#039;&amp;#039;&amp;#039;do not&amp;#039;&amp;#039;&amp;#039; use the normal sigrok logo, which is intended for things &amp;#039;&amp;#039;developed by&amp;#039;&amp;#039; the sigrok project.&lt;br /&gt;
&lt;br /&gt;
As a user, if you see this logo, you should take it as a statement by the manufacturer or seller that the product meets the guidelines above.&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Works_with_sigrok.svg&amp;diff=11023</id>
		<title>File:Works with sigrok.svg</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Works_with_sigrok.svg&amp;diff=11023"/>
		<updated>2015-09-24T21:38:44Z</updated>

		<summary type="html">&lt;p&gt;Martling: Martling uploaded a new version of &amp;amp;quot;File:Works with sigrok.svg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Proposed &amp;quot;Works with sigrok&amp;quot; label for hardware.&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Works_with_sigrok.svg&amp;diff=11022</id>
		<title>File:Works with sigrok.svg</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Works_with_sigrok.svg&amp;diff=11022"/>
		<updated>2015-09-24T21:37:51Z</updated>

		<summary type="html">&lt;p&gt;Martling: Proposed &amp;quot;Works with sigrok&amp;quot; label for hardware.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Proposed &amp;quot;Works with sigrok&amp;quot; label for hardware.&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=UNI-T_UT372&amp;diff=10592</id>
		<title>UNI-T UT372</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=UNI-T_UT372&amp;diff=10592"/>
		<updated>2015-03-01T20:33:58Z</updated>

		<summary type="html">&lt;p&gt;Martling: Change image size.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image           = [[File:UT372_front.jpg|60px]]&lt;br /&gt;
| name            = UNI-T UT372&lt;br /&gt;
| status          = in progress&lt;br /&gt;
| source_code_dir = &lt;br /&gt;
| connectivity    = USB&lt;br /&gt;
| website         = [http://www.uni-trend.com/UT372.html uni-trend.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;UNI-T UT372&amp;#039;&amp;#039;&amp;#039; is a digital tachometer with USB connectivity.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.silabs.com/Support%20Documents/TechnicalDocs/C8051F313-short.pdf Silicon Labs C8051F313] MCU&lt;br /&gt;
* [http://www.goldenviewdisplay.com/pdf/LCD_controllers/ht1621.pdf Holtek HT1621B] LCD controller&lt;br /&gt;
* [[WCH_CH9325 | WCH CH9325]] USB UART interface&lt;br /&gt;
&lt;br /&gt;
The unit includes a built in laser pointer for aiming at a reflective target, and a tripod fitting to allow stable mounting.&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UT372_front.jpg&lt;br /&gt;
File:UT372_back.jpg&lt;br /&gt;
File:UT372_pcb.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The MCU transmits serial data to the CH9325 at 2400 baud. A packet is 27 bytes of ASCII data ending in CR, LF. The meaning of each part of the ASCII data is still to be decoded.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [http://uni-trend.com/manual2/UT371%20Eng%20ok%20Manual.pdf Manual]&lt;br /&gt;
* [http://uni-trend.com/Web%20site/DMM%20Software/UT372_Setup.exe Vendor software]&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Tachometer]]&lt;br /&gt;
[[Category:In progress]]&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=UNI-T_UT372&amp;diff=10591</id>
		<title>UNI-T UT372</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=UNI-T_UT372&amp;diff=10591"/>
		<updated>2015-03-01T20:32:11Z</updated>

		<summary type="html">&lt;p&gt;Martling: Set image size.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image           = [[File:UT372_front.jpg|180px]]&lt;br /&gt;
| name            = UNI-T UT372&lt;br /&gt;
| status          = in progress&lt;br /&gt;
| source_code_dir = &lt;br /&gt;
| connectivity    = USB&lt;br /&gt;
| website         = [http://www.uni-trend.com/UT372.html uni-trend.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;UNI-T UT372&amp;#039;&amp;#039;&amp;#039; is a digital tachometer with USB connectivity.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.silabs.com/Support%20Documents/TechnicalDocs/C8051F313-short.pdf Silicon Labs C8051F313] MCU&lt;br /&gt;
* [http://www.goldenviewdisplay.com/pdf/LCD_controllers/ht1621.pdf Holtek HT1621B] LCD controller&lt;br /&gt;
* [[WCH_CH9325 | WCH CH9325]] USB UART interface&lt;br /&gt;
&lt;br /&gt;
The unit includes a built in laser pointer for aiming at a reflective target, and a tripod fitting to allow stable mounting.&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UT372_front.jpg&lt;br /&gt;
File:UT372_back.jpg&lt;br /&gt;
File:UT372_pcb.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The MCU transmits serial data to the CH9325 at 2400 baud. A packet is 27 bytes of ASCII data ending in CR, LF. The meaning of each part of the ASCII data is still to be decoded.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [http://uni-trend.com/manual2/UT371%20Eng%20ok%20Manual.pdf Manual]&lt;br /&gt;
* [http://uni-trend.com/Web%20site/DMM%20Software/UT372_Setup.exe Vendor software]&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Tachometer]]&lt;br /&gt;
[[Category:In progress]]&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:UT372_pcb.jpg&amp;diff=10590</id>
		<title>File:UT372 pcb.jpg</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:UT372_pcb.jpg&amp;diff=10590"/>
		<updated>2015-03-01T20:31:11Z</updated>

		<summary type="html">&lt;p&gt;Martling: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:UT372_back.jpg&amp;diff=10589</id>
		<title>File:UT372 back.jpg</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:UT372_back.jpg&amp;diff=10589"/>
		<updated>2015-03-01T20:30:52Z</updated>

		<summary type="html">&lt;p&gt;Martling: Set license.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:UT372_back.jpg&amp;diff=10588</id>
		<title>File:UT372 back.jpg</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:UT372_back.jpg&amp;diff=10588"/>
		<updated>2015-03-01T20:29:51Z</updated>

		<summary type="html">&lt;p&gt;Martling: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:UT372_front.jpg&amp;diff=10587</id>
		<title>File:UT372 front.jpg</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:UT372_front.jpg&amp;diff=10587"/>
		<updated>2015-03-01T20:29:17Z</updated>

		<summary type="html">&lt;p&gt;Martling: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=UNI-T_UT372&amp;diff=10586</id>
		<title>UNI-T UT372</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=UNI-T_UT372&amp;diff=10586"/>
		<updated>2015-03-01T19:33:46Z</updated>

		<summary type="html">&lt;p&gt;Martling: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image           = [[File:UT372_front.jpg]]&lt;br /&gt;
| name            = UNI-T UT372&lt;br /&gt;
| status          = in progress&lt;br /&gt;
| source_code_dir = &lt;br /&gt;
| connectivity    = USB&lt;br /&gt;
| website         = [http://www.uni-trend.com/UT372.html uni-trend.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;UNI-T UT372&amp;#039;&amp;#039;&amp;#039; is a digital tachometer with USB connectivity.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.silabs.com/Support%20Documents/TechnicalDocs/C8051F313-short.pdf Silicon Labs C8051F313] MCU&lt;br /&gt;
* [http://www.goldenviewdisplay.com/pdf/LCD_controllers/ht1621.pdf Holtek HT1621B] LCD controller&lt;br /&gt;
* [[WCH_CH9325 | WCH CH9325]] USB UART interface&lt;br /&gt;
&lt;br /&gt;
The unit includes a built in laser pointer for aiming at a reflective target, and a tripod fitting to allow stable mounting.&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UT372_front.jpg&lt;br /&gt;
File:UT372_back.jpg&lt;br /&gt;
File:UT372_pcb.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The MCU transmits serial data to the CH9325 at 2400 baud. A packet is 27 bytes of ASCII data ending in CR, LF. The meaning of each part of the ASCII data is still to be decoded.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [http://uni-trend.com/manual2/UT371%20Eng%20ok%20Manual.pdf Manual]&lt;br /&gt;
* [http://uni-trend.com/Web%20site/DMM%20Software/UT372_Setup.exe Vendor software]&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Tachometer]]&lt;br /&gt;
[[Category:In progress]]&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=UNI-T_UT372&amp;diff=10585</id>
		<title>UNI-T UT372</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=UNI-T_UT372&amp;diff=10585"/>
		<updated>2015-03-01T19:23:00Z</updated>

		<summary type="html">&lt;p&gt;Martling: Add page for UNI-T UT372&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image           = [[File:UT372_front.jpg]]&lt;br /&gt;
| name            = UNI-T UT372&lt;br /&gt;
| status          = in progress&lt;br /&gt;
| source_code_dir = &lt;br /&gt;
| connectivity    = USB&lt;br /&gt;
| website         = [http://www.uni-trend.com/UT372.html uni-trend.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;UNI-T UT372&amp;#039;&amp;#039;&amp;#039; is a digital tachometer with USB connectivity.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.silabs.com/Support%20Documents/TechnicalDocs/C8051F313-short.pdf Silicon Labs C8051F313] MCU&lt;br /&gt;
* [http://www.goldenviewdisplay.com/pdf/LCD_controllers/ht1621.pdf Holtek HT1621B] LCD controller&lt;br /&gt;
* [[WCH_CH9325]] USB UART interface&lt;br /&gt;
&lt;br /&gt;
The unit includes a built in laser pointer for aiming at a reflective target, and a tripod fitting to allow stable mounting.&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UT372_front.jpg&lt;br /&gt;
File:UT372_back.jpg&lt;br /&gt;
File:UT372_pcb.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The MCU transmits serial data to the CH9325 at 2400 baud. A packet is 27 bytes of ASCII data ending in CR, LF. The meaning of each part of the ASCII data is still to be decoded.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [http://uni-trend.com/manual2/UT371%20Eng%20ok%20Manual.pdf Manual]&lt;br /&gt;
* [http://uni-trend.com/Web%20site/DMM%20Software/UT372_Setup.exe Vendor software]&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Tachometer]]&lt;br /&gt;
[[Category:In Progress]]&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=HP_6632B&amp;diff=9756</id>
		<title>HP 6632B</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=HP_6632B&amp;diff=9756"/>
		<updated>2014-09-26T01:48:24Z</updated>

		<summary type="html">&lt;p&gt;Martling: Created page with &amp;quot;{{Infobox power supply | image               = 180px | name                = HP 6632B | status              = supported | source_code_dir     = scp...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox power supply&lt;br /&gt;
| image               = [[File:HP-6632B-Front.jpg|180px]]&lt;br /&gt;
| name                = HP 6632B&lt;br /&gt;
| status              = supported&lt;br /&gt;
| source_code_dir     = scpi-pps&lt;br /&gt;
| channels            = 1&lt;br /&gt;
| channel1            = 0-20V / 0-5A&lt;br /&gt;
| connectivity        = GPIB, RS232&lt;br /&gt;
| features            = &lt;br /&gt;
| website             = [http://www.keysight.com/en/pd-838596-pn-6632B/100-watt-system-power-supply-20v-5a keysight.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;HP 6632B&amp;#039;&amp;#039;&amp;#039; is a single channel 100W DC programmable power supply with GPIB and RS232 connectivity. It is part of the [[HP 663x]] series. The same device appears with HP, Agilent and now Keysight branding, following the history of subdivision of the company.&lt;br /&gt;
&lt;br /&gt;
The device uses the same SCPI command set over both the RS232 and GPIB ports. The interface and communications settings to use must be selected from the front panel before remote use.&lt;br /&gt;
&lt;br /&gt;
All connections are on the back panel, unless an optional set of front panel binding posts are fitted. The unit is designed to be rack mountable.&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:HP-6632B-Front.jpg|&amp;lt;small&amp;gt;6632B front&amp;lt;/small&amp;gt;&lt;br /&gt;
File:HP-6632B-Back.jpg|&amp;lt;small&amp;gt;6632B back&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
[http://cp.literature.agilent.com/litweb/pdf/5962-8196.pdf User&amp;#039;s Guide]&lt;br /&gt;
&lt;br /&gt;
[http://cp.literature.agilent.com/litweb/pdf/5962-8198.pdf Programming Guide]&lt;br /&gt;
&lt;br /&gt;
[http://cp.literature.agilent.com/litweb/pdf/5962-8119.pdf Service Manual]&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>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:HP-6632B-Back.jpg&amp;diff=9755</id>
		<title>File:HP-6632B-Back.jpg</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:HP-6632B-Back.jpg&amp;diff=9755"/>
		<updated>2014-09-26T01:39:24Z</updated>

		<summary type="html">&lt;p&gt;Martling: Back panel of the HP 6632B programmable power supply.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Back panel of the HP 6632B programmable power supply. &lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:HP-6632B-Front.jpg&amp;diff=9754</id>
		<title>File:HP-6632B-Front.jpg</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:HP-6632B-Front.jpg&amp;diff=9754"/>
		<updated>2014-09-26T01:24:44Z</updated>

		<summary type="html">&lt;p&gt;Martling: Front panel of the HP 6632B programmable power supply.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Front panel of the HP 6632B programmable power supply.&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{CC-BY-SA-3.0}}&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Windows&amp;diff=8988</id>
		<title>Windows</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Windows&amp;diff=8988"/>
		<updated>2014-05-07T07:46:34Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Limitations and TODOs */ rigol-ds should now be fully working on Windows.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Pulseview win jtag.png|right|thumb|320px|[[PulseView]] on Windows]]&lt;br /&gt;
&lt;br /&gt;
== Windows installers ==&lt;br /&gt;
&lt;br /&gt;
We provide nightly Windows installers for [[sigrok-cli]] and [[PulseView]]. Please test and [http://sigrok.org/bugzilla/ report] any issues you encounter.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Downloads:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://sigrok.org/jenkins/job/sigrok-cross-mingw/default/lastSuccessfulBuild/artifact/pulseview-NIGHTLY-installer.exe pulseview-NIGHTLY-installer.exe]&lt;br /&gt;
* [http://sigrok.org/jenkins/job/sigrok-cross-mingw/default/lastSuccessfulBuild/artifact/sigrok-cli-NIGHTLY-installer.exe sigrok-cli-NIGHTLY-installer.exe]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;120px&amp;quot; heights=&amp;quot;70px&amp;quot; perrow=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
File:Sigrok windows installer1.jpg&lt;br /&gt;
File:Sigrok windows installer2.jpg&lt;br /&gt;
File:Sigrok windows installer3.jpg&lt;br /&gt;
File:Sigrok windows installer4.jpg&lt;br /&gt;
File:Sigrok windows installer5.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drivers ==&lt;br /&gt;
&lt;br /&gt;
In order to use [[libsigrok]] (via a sigrok frontend) on Windows, you need to install the proper driver for the respective device. &lt;br /&gt;
&lt;br /&gt;
=== COM/serial/RS232 driver ===&lt;br /&gt;
&lt;br /&gt;
If your device is connected through a (virtual) COM port, libsigrok don&amp;#039;t need a special driver. Please install the driver as provided by the manufacturer. If you are unsure, you can check if your device appears at the &amp;quot;Ports (COM&amp;amp;LPT)&amp;quot; section of the Windows Device Manager.&lt;br /&gt;
&lt;br /&gt;
=== Device specific USB driver ===&lt;br /&gt;
&lt;br /&gt;
The device specific USB driver shipped with the vendor software is &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; going to work in almost all cases.&lt;br /&gt;
&lt;br /&gt;
For installing the drivers you can use the [http://zadig.akeo.ie/ zadig] executable from the [https://github.com/pbatard/libwdi/wiki libwdi] project. There are two versions, one for Windows XP (&amp;#039;&amp;#039;&amp;#039;zadig_xp.exe&amp;#039;&amp;#039;&amp;#039;), and another one for all other (Vista or higher) supported Windows versions (&amp;#039;&amp;#039;&amp;#039;zadig.exe&amp;#039;&amp;#039;&amp;#039;). Both 32 and 64 bit Windows versions are supported.&lt;br /&gt;
The [[sigrok-cli]] and [[PulseView]] installers ship with both zadig executable files for convenience (they&amp;#039;re located in the installation directory of the respective application).&lt;br /&gt;
&lt;br /&gt;
Devices where libsigrok uses libftdi (asix-sigma, chronovu-la8, ikalogic-scanaplus) will need the &amp;#039;&amp;#039;&amp;#039;libusb-win32&amp;#039;&amp;#039;&amp;#039; driver, devices where libsigrok uses libusb-1.0 will need the &amp;#039;&amp;#039;&amp;#039;WinUSB&amp;#039;&amp;#039;&amp;#039; driver (all other USB devices).&lt;br /&gt;
&lt;br /&gt;
If you already installed the vendor driver previously, you need to run Zadig and switch to the &amp;#039;&amp;#039;&amp;#039;libusb-win32&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;WinUSB&amp;#039;&amp;#039;&amp;#039; driver (see above). There&amp;#039;s no need to uninstall or deactivate the vendor driver manually, Zadig will handle all of this.&lt;br /&gt;
&lt;br /&gt;
See also the [https://github.com/pbatard/libwdi/wiki/Zadig Zadig wiki page] for more information.&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&lt;br /&gt;
The Windows installers ship with all firmware files that are either open-source or where we have permission from the vendor to distribute them. Some devices will need other firmware which we cannot redistribute though. See the wiki page for the respective device on how you can extract those firmware files from the vendor&amp;#039;s software.&lt;br /&gt;
&lt;br /&gt;
You&amp;#039;ll need to copy the extracted files into the &amp;#039;&amp;#039;&amp;#039;firmware&amp;#039;&amp;#039;&amp;#039; subfolder of the respective installation directory of [[sigrok-cli]] or [[Pulseview]], e.g. &amp;#039;&amp;#039;&amp;#039;C:\Program Files\sigrok\sigrok-cli\firmware&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;C:\Program Files\sigrok\PulseView\firmware&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Example files ==&lt;br /&gt;
&lt;br /&gt;
The Windows installers ship with example dump files (from our [[Example dumps|sigrok-dumps]] repository), which are located in the &amp;#039;&amp;#039;&amp;#039;examples&amp;#039;&amp;#039;&amp;#039; subdirectory of the install directory of [[sigrok-cli]] and [[PulseView]].&lt;br /&gt;
&lt;br /&gt;
These files can be used to conveniently test various frontend features and [[protocol decoders]], and so on.&lt;br /&gt;
&lt;br /&gt;
== Limitations and TODOs ==&lt;br /&gt;
&lt;br /&gt;
The table below lists some of the known remaining issues.&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;
!Driver/component&lt;br /&gt;
!Windows status&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| fx2lafw&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | There seems to be some issue causing frontend hangs ([http://sigrok.org/bugzilla/show_bug.cgi?id=343 bug #343]). Needs to be investigated (could be a libsigrok driver issue, or libusb issue, or USB/thread code issue, or something entirely different).&lt;br /&gt;
|-&lt;br /&gt;
| link-mso19‎&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | Doesn&amp;#039;t compile due to libudev dependency (Linux-only). TODO: Make libudev optional.&lt;br /&gt;
|-&lt;br /&gt;
| openbench-logic-sniffer&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | Serial port portability fixes required ([http://sigrok.org/bugzilla/show_bug.cgi?id=205 bug #205]).&lt;br /&gt;
|-&lt;br /&gt;
| serial port code&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | There may be an issue still in the serial port handling on Windows ([http://sigrok.org/bugzilla/show_bug.cgi?id=341 bug #341]). Needs to be investigated.&lt;br /&gt;
|-&lt;br /&gt;
| sysclk-lwla&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | Users reported issues on Windows ([http://sigrok.org/bugzilla/show_bug.cgi?id=328 bug #328]). Needs to be investigated. May or may not be related to (or have the same cause as) [http://sigrok.org/bugzilla/show_bug.cgi?id=343 bug #343].&lt;br /&gt;
|-&lt;br /&gt;
| uni-t-dmm&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | HID-based, we need to use HIDAPI.&lt;br /&gt;
|-&lt;br /&gt;
| victor-dmm&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | HID-based, we need to use HIDAPI.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Building from source ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; This should generally not be necessary for users, please just use the provided nightly installers (see above).&lt;br /&gt;
&lt;br /&gt;
If you &amp;#039;&amp;#039;really&amp;#039;&amp;#039; want to build from source, we recommend you use the [http://sigrok.org/gitweb/?p=sigrok-util.git;a=tree;f=cross-compile/mingw sigrok-cross-mingw] script from the sigrok-util repository to cross-compile the Windows binaries on a Linux system.&lt;br /&gt;
&lt;br /&gt;
Native builds are &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; supported by us! Yes, they can work in theory, but it means a lot of hassle compared to a cross-compile using the above script. If you want to do native builds, go ahead and have fun, but don&amp;#039;t expect any help from us.&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Oscilloscopes&amp;diff=8501</id>
		<title>Oscilloscopes</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Oscilloscopes&amp;diff=8501"/>
		<updated>2014-01-20T03:08:00Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* SR_CONF_OSCILLOSCOPE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents the config keys are various other info needed to write a libsigrok frontend for controlling oscilloscopes.&lt;br /&gt;
&lt;br /&gt;
=== Frame-based ===&lt;br /&gt;
&lt;br /&gt;
Generally oscilloscopes work by triggering on either the signal under measurement, or some external trigger. The device then measures as much as its internal buffer can hold. When the buffer is full, the device stops measurement and sends its buffer over to the libsigrok driver. This transfer represents a frame&amp;#039;s worth of data. The driver converts this data to the libsigrok internal analog format and sends it out to the frontend like this:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;width: 30%; font-size: smaller;&amp;quot; class=&amp;quot;alternategrey sortable sigroktable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left;&amp;quot; | Packet type&lt;br /&gt;
! style=&amp;quot;text-align: left;&amp;quot; | Payload&lt;br /&gt;
|-&lt;br /&gt;
| SR_DF_FRAME_BEGIN&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| SR_DF_ANALOG&lt;br /&gt;
| &amp;lt;i&amp;gt;analog data&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &amp;lt;i&amp;gt;SR_DF_ANALOG&amp;lt;/i&amp;gt;...&lt;br /&gt;
|-&lt;br /&gt;
| SR_DF_FRAME_END&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The oscilloscope then restarts acquisition, sometimes after prodding by the driver. The data received from an oscilloscope is thus not contiguous from one frame to the next: in between there is a period where no measurements are done by the device.&lt;br /&gt;
&lt;br /&gt;
=== Streaming ===&lt;br /&gt;
&lt;br /&gt;
Some devices can act as continuously streaming oscilloscopes, with no framing involved. Notably FX2-based devices with an analog frontend, such as the [[Nexus-Computing OsciPrime]], work this way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Config keys ==&lt;br /&gt;
A libsigrok driver for an oscilloscope implements all or some subset of the following config keys.&lt;br /&gt;
&lt;br /&gt;
=== SR_CONF_OSCILLOSCOPE ===&lt;br /&gt;
&lt;br /&gt;
Denotes a device that can act as an oscilloscope, i.e. measure voltage over time on one or more analog channels, and send those measurements out to the frontend as analog values.&lt;br /&gt;
&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Developer documentation]]&lt;br /&gt;
[[Category:Configuration keys]]&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=30C3&amp;diff=8405</id>
		<title>30C3</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=30C3&amp;diff=8405"/>
		<updated>2014-01-06T17:59:31Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&amp;#039;re getting together at the annual CCC conference, [https://events.ccc.de/congress/2013/wiki/Main_Page 30C3], for a [https://events.ccc.de/congress/2013/wiki/Assembly:Sigrok sigrok hackathon]. In addition to the usual &amp;quot;whatever we feel like hacking on&amp;quot;, we also have several architectural decision to make, and doing this in person is a lot easier. If you want to be part of the conversation and decision-making process, show up!&lt;br /&gt;
&lt;br /&gt;
In addition to the 4 days of the congress, we will also get together the day before (26 December 2013) for a hopefully less crowded and more productive day. Venue is not yet decided.&lt;br /&gt;
&lt;br /&gt;
What&amp;#039;s decided here is what goes.&lt;br /&gt;
&lt;br /&gt;
== New sigrok file format ==&lt;br /&gt;
[[New sigrok file format]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
* Streamability&lt;br /&gt;
* Add arbitrary data (GUID, length, data)&lt;br /&gt;
* Store annotations&lt;br /&gt;
* Index at the end&lt;br /&gt;
* Use generic GUIDs where possible (colors, probe names, etc)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Improved Configuration Enumeration==&lt;br /&gt;
[[Improved Configuration Enumeration]]&lt;br /&gt;
&lt;br /&gt;
== Filtering/rearranging probes ==&lt;br /&gt;
&amp;lt;s&amp;gt;To sr_filter_probes() or not, that is the question.&lt;br /&gt;
* frontends have probe location info, they pass it to sr_filter_probes() after all&lt;br /&gt;
* very nice for output modules: avoids having to map probe location to bit on &amp;#039;&amp;#039;all&amp;#039;&amp;#039; the modules&lt;br /&gt;
* waste of time for PV, which will soon do its own reformatting of logic data anyway&lt;br /&gt;
* SRD currently needs it, but has a probe mapping mechanism already, so can be adapted&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
* make sr_filter_probes() SR_PRIV&lt;br /&gt;
* sigrok-cli should not call it anymore&lt;br /&gt;
* every output module should call it for itself, since some may be fine without rearranged probes -- will never be called by (future) output module wrappers.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Driver scan ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
Rethinking how we enumerate and assign drivers to hardware&lt;br /&gt;
* Pre-scan for all resources such as serial ports &amp;amp; USB devices&lt;br /&gt;
* How users/frontends resolve ambiguity&lt;br /&gt;
* How to handle &amp;quot;gateway&amp;quot; devices such as GPIB adapters, networked servers with instruments, etc.&lt;br /&gt;
* Device tree model?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will define a device tree model.&lt;br /&gt;
&lt;br /&gt;
For scan operations, a worker thread will be started for each driver.&lt;br /&gt;
&lt;br /&gt;
Drivers will create device instances and submit them to the device tree (protected by a single mutex).&lt;br /&gt;
&lt;br /&gt;
Thus, scanning will be parallelized.&lt;br /&gt;
&lt;br /&gt;
A pre-scan will perform common enumeration operations to avoid repeated/conflicting work in each driver.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* automated unit tests on commit (SR and SRD)&lt;br /&gt;
* VMs for *BSD, linux dists on kiutl for automated build/unit tests&lt;br /&gt;
* VMs with connected hardware (bert and uwe)?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Yes. Yes we can.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Malloc ==&lt;br /&gt;
&amp;lt;s&amp;gt;Decide whether to continue trying to handle malloc failures in libsigrok. These code paths are never tested, would never be executed anyway due to the realities of virtual memory systems [1], and even if we wanted to we could never do everything right because of the extensive use of glib [2]. So what is the use case we are actually targeting here?&lt;br /&gt;
&lt;br /&gt;
Current glib usage is [[Glib|here]].&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will:&lt;br /&gt;
* &amp;lt;b&amp;gt;use g_malloc for structs, no check required.&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;only use g_try_malloc for allocations which are/could be 1MB or over.&amp;lt;/b&amp;gt;&lt;br /&gt;
All g_try_malloc checks in the entire codebase (all projects) will be changed to conform to these rules.&lt;br /&gt;
* libsigrok&lt;br /&gt;
* libsigrokdecode&lt;br /&gt;
* sigrok-cli&lt;br /&gt;
This will not need to be done before the 0.3.0 release, but is a soft blocker for 0.4.0.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progress ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
An API for allowing frontends to signal &amp;quot;operation in progress&amp;quot; better to the user.&lt;br /&gt;
* Various operations in libsigrok drivers can take a long time. It would be good if frontends could meaningfully handle those (instead of just blocking the UI).&lt;br /&gt;
* There are multiple types of &amp;quot;in progress&amp;quot; states that can happen and that libsigrok should be able to report to frontends:&lt;br /&gt;
** Type 1: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I do know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways a frontend can signal this condition to the user (e.g. show a progressbar from 0%-100%), the exact method to show this is up to the frontend.&lt;br /&gt;
** Type 2: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I don&amp;#039;t know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways for a frontend to signal this condition to the user too (e.g. show a spinning wheel, which only signals &amp;quot;in progress&amp;quot; but no information when the operation will be finished).&lt;br /&gt;
* Which operations can take a longer amount of time to complete?&lt;br /&gt;
** Scan&lt;br /&gt;
*** Example: Various devices have to upload a firmware first before the scan can work, e.g. [[Saleae Logic]] and others. This upload can take a while.&lt;br /&gt;
** Set/get/switch config options&lt;br /&gt;
*** Example: The [[Saleae Logic16]] has to upload a new firmware and/or bitstream when certain config options (number of channels, voltage thresholds, ...) are changed. This is not only at scan time, it can happen at any point when the user changes the options in the frontend.&lt;br /&gt;
** Acquire data from a device&lt;br /&gt;
*** Example: The [[ChronoVu LA8]] will always fill its internal 8MByte buffer with LA samples, and then transfer them over USB. This operation typically takes more than 30 seconds time. This is a &amp;quot;type 1&amp;quot; case, since libsigrok / the driver knows how many samples still have to be transferred until done.&lt;br /&gt;
** Send data to a device&lt;br /&gt;
*** For some write/send operations (e.g. uploading a waveform to a function generator) can also take a lot of time, depending on the device.&lt;br /&gt;
** Probably pretty much any other operation too, depending on driver and hardware.&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We are going to address this by changing the thread model of libsigrok.&lt;br /&gt;
&lt;br /&gt;
Each sdi will have its own worker thread.&lt;br /&gt;
&lt;br /&gt;
Frontend-initiated operations will be queued for the worker thread to execute.&lt;br /&gt;
&lt;br /&gt;
The frontend gets a handle when it submits each operation. The handle can be used to check or wait for an operation&amp;#039;s completion.&lt;br /&gt;
&lt;br /&gt;
At any time, the frontend can request what an sdi is doing, it will get back a data structure with a text description and where applicable a fraction representing progress so far.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
RLE data as the internal currency for sigrok Logic.&lt;br /&gt;
* File Storage: Logic can be most efficiently stored in a planar format, with RLE+Huffman/Golomb Compression.&lt;br /&gt;
* Many devices generate RLE. Those that don&amp;#039;t are not extreme speed.&lt;br /&gt;
* RLE is an efficient format for GUIs rendering logic. Much faster than traversing 100s of uncompressed values.&lt;br /&gt;
* libsigrokdecode needs to move to edge-transition processing for performance reasons.&lt;br /&gt;
** Ergo... can we keep it RLE end to end?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will allow different encodings of logic data in the feed.&lt;br /&gt;
&lt;br /&gt;
We will define a good compromise RLE implementation as one of the options.&lt;br /&gt;
&lt;br /&gt;
Others may be added later.&lt;br /&gt;
&lt;br /&gt;
Clients will make queries for data via libsigrok, which will implement them as necessary.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Pre-release TODO:&lt;br /&gt;
* basic functionality check on every driver against real hardware (if available)&lt;br /&gt;
* public/private API:&lt;br /&gt;
** go through headers&lt;br /&gt;
** go through .so symbol table&lt;br /&gt;
** doxygen&lt;br /&gt;
* NEWS file&lt;br /&gt;
* on release branch: downgrade libusb req to 1.0.9&lt;br /&gt;
* libserialport runtime version checking mechanism&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jenkins ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* libsigrok build (fix copy artifact plugin)&lt;br /&gt;
* doxygen build for sp/sr/srd&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes.&amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VS5000_series&amp;diff=8390</id>
		<title>Rigol VS5000 series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VS5000_series&amp;diff=8390"/>
		<updated>2014-01-05T23:35:50Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* TCP Protocol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Rigol_VS5202D.png|thumb|right|Rigol VS5000 series]]&lt;br /&gt;
&lt;br /&gt;
The [http://rigol.com/ Rigol VS5000] series are 2 channel, 20-200Mhz USB/Ethernet oscilloscopes. Some models also include a 16 channel logic analyzer.&lt;br /&gt;
&lt;br /&gt;
The device is [http://int.rigol.com/prodserv/Discontinued%20products/ discontinued by Rigol], but you can find the basic specs e.g. [http://www.batronix.com/shop/oscilloscopes/Rigol-VS5202D.html here].&lt;br /&gt;
&lt;br /&gt;
== Models ==&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;
! Model &lt;br /&gt;
! Analog Bandwith&lt;br /&gt;
! Logic Analyzer&lt;br /&gt;
! Time Base Range&lt;br /&gt;
|-&lt;br /&gt;
| VS5022&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 25 MHz&lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 20ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5022D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5042&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; |  40 MHz&lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 10ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5042D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5062&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot;  | 60 MHz&lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 5ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5062D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5102&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; |  100 MHz &lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 2ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5102D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5202&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; |  200 MHz &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Rigol VS5202D | VS5202D]]&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ● &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;CPU&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.analog.com/static/imported-files/data_sheets/ADSP-BF531_BF532_BF533.pdf Analog Devices ADSP-BF531] Blackfin CPU&lt;br /&gt;
* [http://www.skhynix.com/products/consumer/view.jsp?info.ramKind=01&amp;amp;info.serialNo=HY57V281620FTP&amp;amp;posMap=EOL Hynix HY57V281620FTP] 16MB DRAM&lt;br /&gt;
* [http://www.spansion.com/Products/Parallel-Flash/Pages/Spansion%20GL.aspx Spansion S29GL032A] 4MB flash&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Analog acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone/overview/cyc-overview.html Altera Cyclone EP1C6] 6000-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logic acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone2/overview/cy2-overview.html Altera Cyclone II EP2C5] 4600-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ethernet interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.davicom.com.tw/userfile/24247/DM9000EPProductBrief_v1.0.pdf Davicom DM9000EP] 10/100 ethernet controller&lt;br /&gt;
* 25MHz oscillator&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;USB interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.plxtech.com/products/usbcontrollers/net2272 PLX NetChip NET2272] USB 2.0 controller&lt;br /&gt;
* 130MHz oscillator&lt;br /&gt;
&lt;br /&gt;
== TCP Protocol ==&lt;br /&gt;
&lt;br /&gt;
The device listens on TCP port 19, and implements an SCPI based protocol compatible with that of the [[Rigol DS1000 Series]]. Responses received from the device are prefixed with a 32-bit, little-endian length field. The transport is implemented in hardware/common/scpi_tcp.c,&lt;br /&gt;
and the protocol by the rigol-ds driver.&lt;br /&gt;
&lt;br /&gt;
== USB Protocol ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Work in progress.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The Rigol communication protocol only uses the USB control and bulk transfer. Control is for sending setup and request smaller amounts of data. Bulk transfers is returned by the Rigol box with setup and image data.&lt;br /&gt;
&lt;br /&gt;
All control transfers interesting for us has request type set to &amp;#039;&amp;#039;&amp;#039;0xc0&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
The request field in the control packets is what tells us which command &lt;br /&gt;
is actually sent.&lt;br /&gt;
&lt;br /&gt;
All descriptions below should have both request type and request set to proper&lt;br /&gt;
values, obvious from the headlines what it should be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packet types ===&lt;br /&gt;
This information is completely reverse engineered by hand.&lt;br /&gt;
&lt;br /&gt;
==== Read answer (request = 0x00) ====&lt;br /&gt;
Commands ending with a question mark (&amp;#039;?&amp;#039; ASCII 0x3f) returns answer in two control transfers.&lt;br /&gt;
&lt;br /&gt;
First control transfer is to query the size of the data to be returned. &lt;br /&gt;
That is done by value set to 0. One byte of data is returned in the data field&lt;br /&gt;
by this operation which is the size of the string the Rigol box wants to return.&lt;br /&gt;
&lt;br /&gt;
Second control transfer has value set to 1. The buffer, allocated to the size&lt;br /&gt;
just read, is also sent along the command to be filled with the data. The &lt;br /&gt;
returned data is an ASCII string.&lt;br /&gt;
&lt;br /&gt;
==== Write command (request = 0x01) ====&lt;br /&gt;
Commands from the PC program to the Rigol box is sent as text strings.&lt;br /&gt;
Which commands that are available are listed in the [http://www.tequipment.net/pdf/Rigol/VS5000_programming.pdf &amp;#039;&amp;#039;&amp;#039;Programming Guide&amp;#039;&amp;#039;&amp;#039;] from Rigol.&lt;br /&gt;
&lt;br /&gt;
Each character is sent in a control message with the value set to the ASCII character to be sent. Each ASCII string is terminated with a carriage return  (0x0d, &amp;#039;\r&amp;#039;), which terminates the transmission.&lt;br /&gt;
&lt;br /&gt;
==== Request waveform data (Request = 0x04) ====&lt;br /&gt;
When waveform data is requested to be retrieved a control message is sent.&lt;br /&gt;
The index field of the setup data is a bitmask on which channels to be requested. It is encoded as bit 0 meaning Channel 1, bit 1 meaning Channel 2, bit 2 meaning Logic Channel 0, bit 3 meaning Logic Channel 1 etc.&lt;br /&gt;
&lt;br /&gt;
The 4 byte data field of the control packet sent back as an ack contains number of bytes to be returned by bulk messages. It is encoded LSB first.&lt;br /&gt;
&lt;br /&gt;
After that a series of bulk transfers occurs, with up to 4096 bytes in each transfer, until number of bytes given before is transferred. The first transfer can be (and usually, but not always, is) empty. The first returned data packet has a 780 byte header.&lt;br /&gt;
&lt;br /&gt;
===== Data header =====&lt;br /&gt;
Last 8 bytes of header are identical to the ones returned by [[#SETUP DSO? (Request = 0x06)|SETUP DSO? (Request = 0x06)]]. Mostly contains zeroes so maybe can be omitted, however it does seem to contain some meaningful bytes, the meaning of which is as of yet unclear.&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;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x01 when trigger is &amp;quot;Single&amp;quot;, 0x03 when Normal.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 0x201-?&lt;br /&gt;
| 0x03 when trigger &amp;quot;Normal&amp;quot;, number of bytes correlates to number of bulk transfers to return&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0x304-0x30B&lt;br /&gt;
| Identical to last 8 bytes of [[#SETUP DSO? (Request = 0x06)|&amp;quot;SETUP DSO?&amp;quot; packet]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Unknown control transfer (Request = 0x05) ====&lt;br /&gt;
This control transfer is unknown, but it occurs when stop has been pressed and streaming of big bulk blocks is terminated. All encoding in the control transfers are as described by request 0x04 above. The index field is always zero.&lt;br /&gt;
&lt;br /&gt;
Returns 0x1000 or 0x080000 (the currently selected memory depth). After this request is called, bulk transfers occur the same way they would after [[#Request waveform data (Request = 0x04)|request 0x04]], except the data header is not present.&lt;br /&gt;
&lt;br /&gt;
==== SETUP DSO? (Request = 0x06) ====&lt;br /&gt;
After this control transfer a bulk transfer occurs with 780 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:DSO? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
When called in [[#Stop reading waveform data|stop sequence]] returns an empty bulk transfer at first, after which the bulk transfer is reissued and returns the 780 bytes of data.&lt;br /&gt;
&lt;br /&gt;
==== SETUP LA? (Request = 0x0c) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 260 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:LA? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
==== SETUP ALT? (Request = 0x0d) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 396 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:ALT? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Transfer sequences ===&lt;br /&gt;
&lt;br /&gt;
==== Turn-on sequence ====&lt;br /&gt;
# *IDN?&lt;br /&gt;
# :INFO:FPGA?&lt;br /&gt;
# :STOP&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
==== Turn-off sequence ====&lt;br /&gt;
Nothing special.&lt;br /&gt;
&lt;br /&gt;
==== Start reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# :RUN&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP DSO? (waiting for something?)&lt;br /&gt;
# Request waveform data.&lt;br /&gt;
# The data is started get transferred using bulk transfer.&lt;br /&gt;
&lt;br /&gt;
==== Stop reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :STOP&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# Request waveform data, which returns with size 0.&lt;br /&gt;
# Unknown transfer, which returns with waveform data without data header.&lt;br /&gt;
# The 8192 byte of data is bulked up.&lt;br /&gt;
# :INFO:EUQP?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
&lt;br /&gt;
==== Command sequences ====&lt;br /&gt;
# Command&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data blocks ===&lt;br /&gt;
&lt;br /&gt;
==== 260 bytes block ====&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;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| Logic analyzer off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| Logic analyzer available&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| Logic analyzer channel 0 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Logic analyzer channel 1 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| Logic analyzer channel 2 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 5&lt;br /&gt;
| Logic analyzer channel 3 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 6&lt;br /&gt;
| Logic analyzer channel 4 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 7&lt;br /&gt;
| Logic analyzer channel 5 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Logic analyzer channel 6 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| Logic analyzer channel 7 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 10&lt;br /&gt;
| Logic analyzer channel 8 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 11&lt;br /&gt;
| Logic analyzer channel 9 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Logic analyzer channel 10 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 13&lt;br /&gt;
| Logic analyzer channel 11 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 14&lt;br /&gt;
| Logic analyzer channel 12 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
| Logic analyzer channel 13 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 16&lt;br /&gt;
| Logic analyzer channel 14 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 17&lt;br /&gt;
| Logic analyzer channel 15 off/on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 396 bytes block ====&lt;br /&gt;
No information&lt;br /&gt;
&lt;br /&gt;
==== 780 bytes block ====&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;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Analogue 1; OFF = 0, ON chan1 = 1, ON chan2 = 2 (bitmask?)\\&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Analogue 1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 32 &lt;br /&gt;
| Coupling chan1; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 44&lt;br /&gt;
| Bandwidth Limit chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 46&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 90&lt;br /&gt;
| Analogue 2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 108&lt;br /&gt;
| Coupling chan2; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 120&lt;br /&gt;
| Bandwidth Limit chan2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 122&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 448&lt;br /&gt;
| Acquire type; Normal = 0, Average = 1, Peak = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 456&lt;br /&gt;
| Acquire average; 2 = 1, 4 = 2, 8 = 3, 16 = 4, 32 = 5, 64 = 6, 128 = 7, 256 = 8&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 520&lt;br /&gt;
| Trigger mode; Edge = 0, Pulse = 1, Slope = 2, Video = 3, Alternate = ?, Pattern = 5, Duration = 6 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The image information bulk transfer ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Logic analyzer]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Mixed-signal oscilloscope]]&lt;br /&gt;
[[Category:Supported]]&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Supported_hardware&amp;diff=8389</id>
		<title>Supported hardware</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Supported_hardware&amp;diff=8389"/>
		<updated>2014-01-05T23:33:07Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Oscilloscopes */  Link to Agilent DSO1000 series instead of individual model.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;sigrok is intended as a flexible, cross-platform, and &amp;#039;&amp;#039;&amp;#039;hardware-independent&amp;#039;&amp;#039;&amp;#039; software suite, i.e., it supports various devices from many different vendors.&lt;br /&gt;
&lt;br /&gt;
Here is a list of currently supported devices (various stages of completeness) and devices we plan to support in the near future.&lt;br /&gt;
&lt;br /&gt;
The lists are sorted by category (&amp;lt;span style=&amp;quot;background-color: lime&amp;quot;&amp;gt;supported&amp;lt;/span&amp;gt;: [[:Category:Supported|{{PAGESINCATEGORY:Supported|pages}}]], &amp;lt;span style=&amp;quot;background-color: orange&amp;quot;&amp;gt;in progress&amp;lt;/span&amp;gt;: [[:Category:In progress|{{PAGESINCATEGORY:In progress|pages}}]], &amp;lt;span style=&amp;quot;background-color: red&amp;quot;&amp;gt;planned&amp;lt;/span&amp;gt;: [[:Category:Planned|{{PAGESINCATEGORY:Planned|pages}}]]), and alphabetically within those categories.&lt;br /&gt;
&lt;br /&gt;
== Logic analyzers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:ARMFLY MINI LOGIC.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ARMFLY Mini-Logic]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigma2_2.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ASIX SIGMA]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology_usb_interface_v26.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Braintechnology USB Interface V2.x]] (8/16ch, 24/12MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology_usb_lps.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Braintechnology USB-LPS]] (8/16ch, 24/12MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Chronovu la8 front.png|link=ChronoVu LA8|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ChronoVu LA8]] (8ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Cwav_usbee_sx.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[CWAV USBee SX]] (8ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Buspirate_v3.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Dangerous Prototypes Buspirate]] (5ch, 1MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Eeelec xla esla100.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[EE Electronics ESLA100]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ikalogic_scanalogic2.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[IKALOGIC Scanalogic-2]] (4ch, 20MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ikalogic scanaplus mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[IKALOGIC ScanaPLUS]] (9ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Kingst kqs3506 la16100.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[KingST KQS3506-LA16100]] (16ch, 100/50/32/16MHz @ 3/6/9/16ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Lcsoft-miniboard-front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lcsoft Mini Board]] (8/16ch, 24/12MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:logic-shrimp-front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Logic Shrimp]] (4ch, 20MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mcu123 saleae logic clone.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MCU123 Saleae Logic clone]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Usbee_ax_clone_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MCU123 USBee AX Pro clone]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Openbench logic sniffer front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Openbench Logic Sniffer]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Robomotic buglogic3.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Robomotic BugLogic 3]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Robomotic_minilogic.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Robomotic MiniLogic]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Saleae Logic.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Saleae Logic]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Saleae_Logic16_bottom.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Saleae Logic16]] (16ch, 100/50/32/16MHz @ 3/6/9/16ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Wayengineer saleae16.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[WayEngineer Saleae16]] (16ch, 100/50/32/16MHz @ 3/6/9/16ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus Logic Cube.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ZEROPLUS Logic Cube LAP-C(16032)]] (16ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus_lap-16128u.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ZEROPLUS LAP-16128U]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Chronovu la16.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[ChronoVu LA16]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rockylogic_ant8.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[RockyLogic Ant8]] (8ch, 500MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:RockyLogic Ant18e.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[RockyLogic Ant18e]] (8ch, 1GHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sysclk lwla1034 mugshot.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Sysclk LWLA1034]] (34ch, 125MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Acute_pkla1216.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Acute PKLA-1216]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek 4032l mugshot.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek 4032L]] (32ch, 400MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ideofy_la_08.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Ideofy LA-08]] (8ch, 96/60/30MHz @ 2/4/8ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Intronix Logicport.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Intronix Logicport LA1034]] (34ch, 500MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Link Instruments LA-5580]] (80ch, 500MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Microchip_pickit2.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Microchip PICkit2]] (3ch, 1MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Minila parport.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MiniLA]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Minila_mockup.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MiniLA Mockup]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Noname_la16_mugshot.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Noname LA16]] (16ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sysclk lwla1016.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Sysclk LWLA1016]] (16ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sysclk lwla2034 mugshot.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Sysclk LWLA2034]] (34ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Techtools_digiview_dv1-100.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[TechTools DigiView DV1-100]] (18ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Xmos xtag2.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[XMOS XTAG-2]] (?ch, 50MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ZEROPLUS Logic Cube LAP-C(322000)]] (32ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zlg_la1032.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ZLG LA1032]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mixed-signal devices ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=105px heights=105px&amp;gt;&lt;br /&gt;
File:Armfly_ax_pro.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ARMFLY AX-Pro]]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; (8ch, 24MHz; 2ch analog, 24MSa/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Esla201a.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[EE Electronics ESLA201A]]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; (8ch, 24MHz; 2ch analog, 24MSa/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol DS1052E.png|link=Rigol DS1000 Series|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Rigol DS1000 Series | Rigol DS1000D Series]] (16ch, 2ch analog, 50-150MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol_VS5202D.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Rigol VS5000 Series | Rigol VS5000D Series]] (16ch, 2ch analog, 20-200MHz BW&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Xzl studio ax mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[XZL_Studio AX]]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; (8ch, 24MHz; 2ch analog, 24MSa/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:BitScope BS10.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[BitScope BS10]] (8ch, 40MHz; 2ch analog, 20MSa/s, ? BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Link Instruments MSO-19 front.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Link Instruments MSO-19]] (8ch, 200MHz; 1ch analog, 200MSa/s, 60MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Agilent_MSO7104A.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Agilent MSO7104A]] (16ch, ?; 4ch analog, 2GSa/s, 100MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digilent_analog_discovery.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Digilent Analog Discovery]] (16ch, 100MHz; 2ch analog, 100MSa/s, 5MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek_1008C.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek 1008C]] (8ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Meilhaus_mephisto_scope1.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Meilhaus MEphisto Scope1]] (16ch, 100kHz; 2ch analog, 1MSa/s, 500kHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Polabs_poscope_basic2.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PoLabs PoScope Basic2]] (16ch, 8MHz; 2ch analog, 200kSa/s, ? BW)&amp;lt;/small&amp;gt; &lt;br /&gt;
File:QA100.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[QuantAsylum QA100]] (12ch; 2ch analog)&amp;lt;/small&amp;gt; &lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[XZL_Studio DX]] (16ch, 24MHz; 2ch analog)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Only the logic analyzer functionality is supported so far, analog support is work in progress.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oscilloscopes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=100px heights=100px&amp;gt;&lt;br /&gt;
File:Agilent DSO1014A.png|link=Agilent DSO1000 Series|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent DSO1000 Series]] (2-4ch, 2GS/s, 60-200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke_Scopemeter_199B.png|link=Fluke ScopeMeter 199B|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Fluke ScopeMeter 199B]] (2ch, 2.5GS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hameg hmo1524.png|link=Hameg HMO1524|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Hameg HMO1524]] (4ch, 2GS/s, 150MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hameg HMO2024.png|link=Hameg HMO2024|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Hameg HMO2024]] (4ch, 2GS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek DSO-2090.png|link=Hantek DSO-2090|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-2090]] (2ch, 100MS/s, 40MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol DS1052E.png|link=Rigol DS1000 Series|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Rigol DS1000 Series | Rigol DS1000E Series]] (2ch, 1GS/s, 50-150MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol-ds2072 mugshot.png|link=Rigol DS2000 Series|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Rigol DS2000 Series]] (2ch, 2GS/s, 70-200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol_VS5202D.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Rigol VS5000 Series]] (2ch, 20-200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Focussz_fosc21_mugshot.png|link=Focussz Fosc21|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Focussz Fosc21]] (2ch, 8kS/s, 3kHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek dso2250 mugshot.png|link=Hantek DSO-2250|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-2250]] (2ch, 250MS/s, 100MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek dso-5200a device front.png|link=Hantek DSO-5200A|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-5200A]] (2ch, 250MS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:OsciPrime.png|link=Nexus-Computing OsciPrime|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Nexus-Computing OsciPrime]] (2ch, ?MS/s, 3.3MHz-8MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Velleman PCSU1000.png|link=Velleman PCSU1000|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Velleman PCSU1000]] (2ch, 1GS/s, 50MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|link=Hantek DSO-1200|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-1200]] (2ch, 500MS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke scopemeter123.png|link=Fluke ScopeMeter 123|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Fluke ScopeMeter 123]] (2ch, 25MS/s, 20MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Picoscope 2203.png|link=Pico Technology PicoScope 2203|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 2203]] (40/20MS/s, 5MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:PicoScope_2205.png|link=Pico Technology PicoScope 2205|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 2205]] (200/100MS/s, 25MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Picoscope 3206.png|link=Pico Technology PicoScope 3206|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 3206]] (200/100MS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Picoscope 5203.png|link=Pico Technology PicoScope 5203|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 5203]] (1/0.5GS/s, 250MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Usbduxfast.png|link=Incite Technology USB-DUXfast|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Incite Technology USB-DUXfast]] (16ch, 3MHz, ? BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:UNI-T UTD2042C.png|link=UNI-T UTD2042C|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UTD2042C]] (2ch, 500MS/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft dso-220 usb.png|link=Voltcraft DSO-220|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DSO-220]] (2ch, 60MS/s, 20MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft DSO-3062C.png|link=Voltcraft DSO-3062C|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DSO-3062C]] (2ch, 1GS/s, 60MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Multimeters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|link=Agilent U1231A|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent U1231A]] (6000 counts, USB/Bluetooth)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Agilent U1232A.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent U1232A]] (6000 counts, USB/Bluetooth)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent U1233A]] (6000 counts, USB/Bluetooth)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[BBC Goertz Metrawatt M2110]] (30000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Bm_857_mugshot_500000.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Brymen BM857]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digitek_dt4000zc_device_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Digitek DT4000ZC]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke 187.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Fluke 187/189]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke 287.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Fluke 287/289]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gmc metrahit 14a logo.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Gossen Metrawatt Metrahit 14A]] (3100 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gossen Metrawatt Metrahit 16I small.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Gossen Metrawatt Metrahit 16I]] (3100 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gossen Metrawatt Metrahit 18S small.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Gossen Metrawatt Metrahit 18S]] (31000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:100px_Idm103n.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ISO-TECH IDM103N]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mastech mas345 device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MASTECH MAS345]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metex m4650cr mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Metex M-4650CR]] (20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Norma dm950.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Norma DM950]] (21000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce-pce-dm32.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-DM32]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metex_me-31.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[PeakTech 3410]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Peaktech 4370 device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[PeakTech 4370]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rs_22_168_mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[RadioShack 22-168]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rs_22-805_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[RadioShack 22-805]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:radioshack_22_812_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[RadioShack 22-812]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Siemens B1105 small.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Siemens B1105]] (310000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tecpel dmm8061.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Tecpel DMM-8061]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tp4000zc_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[TekPower TP4000ZC]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7745.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7745]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ut60e_-_front_-_alpha.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT60E]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni-t ut61b mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61B]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni-t ut61c mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61C]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni t ut61d device.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61D]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Old ver front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61E]] (22000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Va_va18b.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[V&amp;amp;A VA18B]] (6000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Va va40b mugshot.png|link=VA40B|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[V&amp;amp;A VA40B]] (6000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Victor 86c device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Victor 86C]] (4000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Victor 70C.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Victor 70C]] (4000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft_M-3650D_transparent.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-3650D]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m4650cr.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-4650CR]] (20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc820 device.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-820]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc830.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-830]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc840 device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-840]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Tenma 72-1016.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-1016]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7730.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7730]] (20000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7732.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7732]] (40000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7750.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7750]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-9380A.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-9380A]] (40000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m-3650cr.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-3650CR]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Appa 107.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[APPA 107]] (4000 / 20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digitek dt8000.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Digitek DT8000]] (8000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digitek dt80000.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Digitek DT80000]] (80000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Escort 179 device front.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Escort 179]] (10000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gossen metrahit 30m.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Gossen-Metrawatt METRAHIT 30M]] (1200000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:800px-Mastech m9803r device front.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MASTECH M9803R]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metrix mx53.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Metrix MX53]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metrix mx56c.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Metrix MX56C]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Protek 6500]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m3890dt usb.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-3890DT]] (4000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m4660a device front.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-4660A]] (20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc920.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-920]] (40000/4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc940.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-940]] (40000/4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LCR meters ==&lt;br /&gt;
&lt;br /&gt;
TODO.&lt;br /&gt;
&lt;br /&gt;
== Sound level meters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:CEM DT-8852.png|link=CEM DT-8852|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[CEM DT-8852]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Colead SL-5868P.png|link=Colead SL-5868P|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Colead SL-5868P]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Kecheng KC-330B.png|link=Kecheng KC-330B|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Kecheng KC-330B]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tondaj sl-814.png|link=Tondaj SL-814|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Tondaj SL-814]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft_DL-161S.png|link=Voltcraft DL-161S|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-161S]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (also: light-/thermo-/hygrometer; RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft_dl_160s.png|link=Voltcraft DL-160S|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-160S]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Thermometers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:rs55ii.png|link=APPA 55II|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[APPA 55II]] (2xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:EL-USB-2.png|link=Lascar Electronics EL-USB-2|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lascar Electronics EL-USB-2]] (1xtemp, 1xhum, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mic 98581.png|link=MIC 98581|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MIC 98581]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mic 98583.png|link=MIC 98583|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MIC 98583]] (1xtemp, 1xhum, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni-t ut325 front.png|link=UNI-T UT325|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT325]] (2xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft k204.png|link=Voltcraft K204|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft K204]] (4xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Elitech rc3.png|link=Elitech RC-3|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Elitech RC-3]] (1xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (1xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rding temper front.png|link=RDing TEMPer|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rding temper gold device front.png|link=RDing TEMPer Gold|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer Gold]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rding temper1 device front.png|link=RDing TEMPer1|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer1]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pcsensor_temper1k2.png|link=RDing TEMPer1K2|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer1K2]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft dl-120th.png|link=Voltcraft DL-120TH|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-120TH]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft dl-140th.png|link=Voltcraft DL-140TH|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-140TH]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hygrometers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:EL-USB-2.png|link=Lascar Electronics EL-USB-2|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lascar Electronics EL-USB-2]] (temp/humidity, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mic 98583.png|link=MIC 98583|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MIC 98583]] (temp/humidity, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (also: light-/soundlevelmeter; RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Silabs si7005usb dgl eb top.jpg|link=SiLabs Si7005USB-Dongle|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[SiLabs Si7005USB-Dongle]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anemometers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Mastech ms6252b.png|link=MASTECH MS6252B|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MASTECH MS6252B]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Light meters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Lutron YK-2005LX.png|link=Lutron YK-2005LX|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Lutron YK-2005LX]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energy meters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Actaris_a14c5_teleinfo.png|link=EDF Teleinfo|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[EDF Teleinfo]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DAQs ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Ni usb 6008.png|link=NI USB-6008|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[NI USB-6008]] (8/2 analog inputs/outputs, 12 digital I/Os)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dataloggers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:EL-USB-CO.png|link=Lascar Electronics EL-USB-CO|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lascar Electronics EL-USB-CO]] (carbon monoxide (CO) logger, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gsg_indoor_air_monitor.png|link=GSG Indoor Air Monitor|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[GSG Indoor Air Monitor]] (air quality monitor, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Maul_studio_i.png|link=MAUL studio i|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MAUL studio i]] (weighing scale, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft co-20.png|link=Voltcraft CO-20|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft CO-20]] (air quality monitor, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Function generators ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Hantek DDS-3X25 top.png|link=Hantek DDS-3X25|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek DDS-3X25]] (25MHz, PC-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Siglent sdg1010 device front 8116.png|link=Siglent SDG1010|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Siglent SDG1010]] (10MHz, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RF receivers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|link=Per Vices Noctar|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Per Vices Noctar]] (100kHz-4GHz, IQ modulator/demodulator, PCIe)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spectrum analyzers ==&lt;br /&gt;
&lt;br /&gt;
TODO.&lt;br /&gt;
&lt;br /&gt;
== Power supplies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Sigrok logo no text transparent 512.png|link=ATTEN_ATZ9711|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ATTEN ATZ9711]] (DC electronic load, 150W/0~30A/0~150V, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Atten PPS3203T-3S.png|link=Atten PPS3203T-3S|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Atten PPS3203T-3S]] (3ch, 2*0-32V, 1*0-6V at 0-3A, USB&amp;amp;RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Manson hcs3202.png|link=Manson HCS-3202|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Manson HCS-3202]] (1ch, 1-36V/0-10A, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:PS3005D front on.JPG|link=Velleman PS3005D|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Velleman PS3005D]] (1ch, 0-30V/0-5A, USB&amp;amp;RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GPIB interfaces ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Beiming_s82357.png|link=Beiming S82357|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Beiming S82357]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:ICS 488-USB.png|link=ICS 488-USB|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ICS 488-USB]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:GPIB-USB 82357B clone.png|link=GPIB-USB 82357B clone|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[GPIB-USB 82357B clone]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:NI GPIB-ENET.png|link=National Instruments GPIB-ENET|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[National Instruments GPIB-ENET]] (hardware-based, Ethernet)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:NI GPIB-USB-HS.png|link=National Instruments GPIB-USB-HS|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[National Instruments GPIB-USB-HS]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Prologix-usb.png|link=Prologix GPIB-USB|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Prologix GPIB-USB]] (firmware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Potential other candidates ==&lt;br /&gt;
&lt;br /&gt;
If you own any other logic analyzers, oscilloscopes, multimeters, dataloggers, ... and want to add support for them in sigrok (or donate/lend devices to developers), please let us know. We&amp;#039;re always happy to add more hardware support! Join the [https://lists.sourceforge.net/lists/listinfo/sigrok-devel mailing list] or ask on [irc://chat.freenode.net/sigrok IRC #sigrok] if you want to help out.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Agilent_DSO1014A&amp;diff=8388</id>
		<title>Agilent DSO1014A</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Agilent_DSO1014A&amp;diff=8388"/>
		<updated>2014-01-05T23:31:31Z</updated>

		<summary type="html">&lt;p&gt;Martling: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox oscilloscope&lt;br /&gt;
| image               = [[File:Agilent DSO1014A.png|180px]]&lt;br /&gt;
| name                = Agilent DSO1014A&lt;br /&gt;
| status              = supported&lt;br /&gt;
| source_code_dir     = rigol-ds&lt;br /&gt;
| channels            = 4&lt;br /&gt;
| samplerate          = 2GSa/s (2ch), 1GSa/s (4ch)&lt;br /&gt;
| samplerate_equiv    = ?&lt;br /&gt;
| bandwidth           = 100MHz&lt;br /&gt;
| vertical_resolution = 8bits&lt;br /&gt;
| triggers            = edge, pulse width, bit pattern, composite video, alternate&lt;br /&gt;
| input_impedance     = 1MΩ‖18pF 300 V RMS CAT I&lt;br /&gt;
| memory              = 20kpts (2ch), 10kpts (4ch)&lt;br /&gt;
| display             = 5.7&amp;quot; QVGA (320x240)&lt;br /&gt;
| connectivity        = USB host/device&lt;br /&gt;
| features            = &amp;quot;true zoom&amp;quot;, go/nogo mask testing&lt;br /&gt;
| website             = [http://www.home.agilent.com/en/pd-1569569-pn-DSO1014A/oscilloscope-100-mhz-4-channel agilent.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;Agilent DSO1014A&amp;#039;&amp;#039;&amp;#039; is a 4-channel oscilloscope with an analog bandwidth of 100MHz, 2GSa/s sampling rate, and USB connectivity.&lt;br /&gt;
&lt;br /&gt;
See [[Agilent DSO1014A/Info]] for more details (such as &amp;#039;&amp;#039;&amp;#039;lsusb -v&amp;#039;&amp;#039;&amp;#039; output) about the device.&lt;br /&gt;
&lt;br /&gt;
See [[Agilent DSO1000 Series]] for information common to all devices in this series.&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Agilent DSO1014A.png|&amp;lt;small&amp;gt;Device, front&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Agilent DSO1014A back.png|&amp;lt;small&amp;gt;Device, back&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Supported]]&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Agilent_DSO1000_series&amp;diff=8387</id>
		<title>Agilent DSO1000 series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Agilent_DSO1000_series&amp;diff=8387"/>
		<updated>2014-01-05T23:30:12Z</updated>

		<summary type="html">&lt;p&gt;Martling: Created page with &amp;quot;{{Infobox oscilloscope | image               = 180px | name                = Agilent DSO1000 Series | status              = supported | source_co...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox oscilloscope&lt;br /&gt;
| image               = [[File:Agilent DSO1014A.png|180px]]&lt;br /&gt;
| name                = Agilent DSO1000 Series&lt;br /&gt;
| status              = supported&lt;br /&gt;
| source_code_dir     = rigol-ds&lt;br /&gt;
| channels            = 2-4 (depending on model)&lt;br /&gt;
| samplerate          = 2GSa/s (2ch), 1GSa/s (4ch)&lt;br /&gt;
| samplerate_equiv    = ?&lt;br /&gt;
| bandwidth           = 60-200MHz (depending on model)&lt;br /&gt;
| vertical_resolution = 8bits&lt;br /&gt;
| triggers            = edge, pulse width, bit pattern, composite video, alternate&lt;br /&gt;
| input_impedance     = 1MΩ‖18pF 300 V RMS CAT I&lt;br /&gt;
| memory              = 20kpts (2ch), 10kpts (4ch)&lt;br /&gt;
| display             = 5.7&amp;quot; QVGA (320x240)&lt;br /&gt;
| connectivity        = USB host/device&lt;br /&gt;
| features            = &amp;quot;http://www.home.agilent.com/en/pc-1562658/1000-series-oscilloscope&amp;quot; agilent.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;Agilent DSO1000&amp;#039;&amp;#039;&amp;#039; series are 2-4 channel oscilloscopes with 2GSa/s sampling rate, analog bandwidth of 60-200MHz and USB connectivity.&lt;br /&gt;
&lt;br /&gt;
The underlying hardware and firmware is very clearly (and in places hastily) rebadged from the [[Rigol DS2000 Series]].&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Model || Bandwidth || Channels&lt;br /&gt;
|-&lt;br /&gt;
|| DSO1002A || 60MHz || 2&lt;br /&gt;
|-&lt;br /&gt;
|| DSO1004A || 60MHz || 4&lt;br /&gt;
|-&lt;br /&gt;
|| DSO1012A || 100MHz || 2&lt;br /&gt;
|-&lt;br /&gt;
|| DSO1014A || 100MHz || 4&lt;br /&gt;
|-&lt;br /&gt;
|| DSO1022A || 200MHz || 2&lt;br /&gt;
|-&lt;br /&gt;
|| DSO1024A || 200MHz || 4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [http://mightyohm.com/blog/2009/11/agilent-dso1000-firmware-update-confirms-rigol-connection/ MightyOhm: Agilent firmware update confirms Rigol connection]&lt;br /&gt;
* [http://cp.literature.agilent.com/litweb/pdf/5989-9368EN.pdf DSO1000A/B Series Portable Oscilloscopes Data Sheet]&lt;br /&gt;
* [http://www.home.agilent.com/upload/cmc_upload/All/1000_series_prog_guide.pdf Agilent 1000 Series Oscilloscopes Programmer&amp;#039;s Guide]&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Supported]]&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Supported_hardware&amp;diff=8381</id>
		<title>Supported hardware</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Supported_hardware&amp;diff=8381"/>
		<updated>2014-01-05T23:21:00Z</updated>

		<summary type="html">&lt;p&gt;Martling: Put Rigol analog &amp;amp; mixed-signal sub-series in correct categories.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;sigrok is intended as a flexible, cross-platform, and &amp;#039;&amp;#039;&amp;#039;hardware-independent&amp;#039;&amp;#039;&amp;#039; software suite, i.e., it supports various devices from many different vendors.&lt;br /&gt;
&lt;br /&gt;
Here is a list of currently supported devices (various stages of completeness) and devices we plan to support in the near future.&lt;br /&gt;
&lt;br /&gt;
The lists are sorted by category (&amp;lt;span style=&amp;quot;background-color: lime&amp;quot;&amp;gt;supported&amp;lt;/span&amp;gt;: [[:Category:Supported|{{PAGESINCATEGORY:Supported|pages}}]], &amp;lt;span style=&amp;quot;background-color: orange&amp;quot;&amp;gt;in progress&amp;lt;/span&amp;gt;: [[:Category:In progress|{{PAGESINCATEGORY:In progress|pages}}]], &amp;lt;span style=&amp;quot;background-color: red&amp;quot;&amp;gt;planned&amp;lt;/span&amp;gt;: [[:Category:Planned|{{PAGESINCATEGORY:Planned|pages}}]]), and alphabetically within those categories.&lt;br /&gt;
&lt;br /&gt;
== Logic analyzers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:ARMFLY MINI LOGIC.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ARMFLY Mini-Logic]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigma2_2.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ASIX SIGMA]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology_usb_interface_v26.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Braintechnology USB Interface V2.x]] (8/16ch, 24/12MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology_usb_lps.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Braintechnology USB-LPS]] (8/16ch, 24/12MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Chronovu la8 front.png|link=ChronoVu LA8|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ChronoVu LA8]] (8ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Cwav_usbee_sx.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[CWAV USBee SX]] (8ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Buspirate_v3.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Dangerous Prototypes Buspirate]] (5ch, 1MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Eeelec xla esla100.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[EE Electronics ESLA100]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ikalogic_scanalogic2.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[IKALOGIC Scanalogic-2]] (4ch, 20MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ikalogic scanaplus mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[IKALOGIC ScanaPLUS]] (9ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Kingst kqs3506 la16100.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[KingST KQS3506-LA16100]] (16ch, 100/50/32/16MHz @ 3/6/9/16ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Lcsoft-miniboard-front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lcsoft Mini Board]] (8/16ch, 24/12MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:logic-shrimp-front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Logic Shrimp]] (4ch, 20MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mcu123 saleae logic clone.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MCU123 Saleae Logic clone]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Usbee_ax_clone_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MCU123 USBee AX Pro clone]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Openbench logic sniffer front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Openbench Logic Sniffer]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Robomotic buglogic3.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Robomotic BugLogic 3]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Robomotic_minilogic.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Robomotic MiniLogic]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Saleae Logic.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Saleae Logic]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Saleae_Logic16_bottom.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Saleae Logic16]] (16ch, 100/50/32/16MHz @ 3/6/9/16ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Wayengineer saleae16.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[WayEngineer Saleae16]] (16ch, 100/50/32/16MHz @ 3/6/9/16ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus Logic Cube.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ZEROPLUS Logic Cube LAP-C(16032)]] (16ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus_lap-16128u.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ZEROPLUS LAP-16128U]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Chronovu la16.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[ChronoVu LA16]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rockylogic_ant8.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[RockyLogic Ant8]] (8ch, 500MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:RockyLogic Ant18e.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[RockyLogic Ant18e]] (8ch, 1GHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sysclk lwla1034 mugshot.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Sysclk LWLA1034]] (34ch, 125MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Acute_pkla1216.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Acute PKLA-1216]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek 4032l mugshot.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek 4032L]] (32ch, 400MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ideofy_la_08.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Ideofy LA-08]] (8ch, 96/60/30MHz @ 2/4/8ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Intronix Logicport.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Intronix Logicport LA1034]] (34ch, 500MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Link Instruments LA-5580]] (80ch, 500MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Microchip_pickit2.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Microchip PICkit2]] (3ch, 1MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Minila parport.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MiniLA]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Minila_mockup.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MiniLA Mockup]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Noname_la16_mugshot.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Noname LA16]] (16ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sysclk lwla1016.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Sysclk LWLA1016]] (16ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sysclk lwla2034 mugshot.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Sysclk LWLA2034]] (34ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Techtools_digiview_dv1-100.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[TechTools DigiView DV1-100]] (18ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Xmos xtag2.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[XMOS XTAG-2]] (?ch, 50MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ZEROPLUS Logic Cube LAP-C(322000)]] (32ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zlg_la1032.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ZLG LA1032]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mixed-signal devices ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=105px heights=105px&amp;gt;&lt;br /&gt;
File:Armfly_ax_pro.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ARMFLY AX-Pro]]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; (8ch, 24MHz; 2ch analog, 24MSa/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Esla201a.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[EE Electronics ESLA201A]]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; (8ch, 24MHz; 2ch analog, 24MSa/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol DS1052E.png|link=Rigol DS1000 Series|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Rigol DS1000 Series | Rigol DS1000D Series]] (16ch, 2ch analog, 50-150MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol_VS5202D.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Rigol VS5000 Series | Rigol VS5000D Series]] (16ch, 2ch analog, 20-200MHz BW&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Xzl studio ax mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[XZL_Studio AX]]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; (8ch, 24MHz; 2ch analog, 24MSa/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:BitScope BS10.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[BitScope BS10]] (8ch, 40MHz; 2ch analog, 20MSa/s, ? BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Link Instruments MSO-19 front.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Link Instruments MSO-19]] (8ch, 200MHz; 1ch analog, 200MSa/s, 60MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Agilent_MSO7104A.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Agilent MSO7104A]] (16ch, ?; 4ch analog, 2GSa/s, 100MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digilent_analog_discovery.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Digilent Analog Discovery]] (16ch, 100MHz; 2ch analog, 100MSa/s, 5MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek_1008C.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek 1008C]] (8ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Meilhaus_mephisto_scope1.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Meilhaus MEphisto Scope1]] (16ch, 100kHz; 2ch analog, 1MSa/s, 500kHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Polabs_poscope_basic2.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PoLabs PoScope Basic2]] (16ch, 8MHz; 2ch analog, 200kSa/s, ? BW)&amp;lt;/small&amp;gt; &lt;br /&gt;
File:QA100.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[QuantAsylum QA100]] (12ch; 2ch analog)&amp;lt;/small&amp;gt; &lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[XZL_Studio DX]] (16ch, 24MHz; 2ch analog)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Only the logic analyzer functionality is supported so far, analog support is work in progress.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oscilloscopes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=100px heights=100px&amp;gt;&lt;br /&gt;
File:Agilent DSO1014A.png|link=Agilent DSO1014A|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent DSO1014A]] (4ch, 2GS/s, 100MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke_Scopemeter_199B.png|link=Fluke ScopeMeter 199B|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Fluke ScopeMeter 199B]] (2ch, 2.5GS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hameg hmo1524.png|link=Hameg HMO1524|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Hameg HMO1524]] (4ch, 2GS/s, 150MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hameg HMO2024.png|link=Hameg HMO2024|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Hameg HMO2024]] (4ch, 2GS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek DSO-2090.png|link=Hantek DSO-2090|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-2090]] (2ch, 100MS/s, 40MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol DS1052E.png|link=Rigol DS1000 Series|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Rigol DS1000 Series | Rigol DS1000E Series]] (2ch, 1GS/s, 50-150MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol-ds2072 mugshot.png|link=Rigol DS2000 Series|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Rigol DS2000 Series]] (2ch, 2GS/s, 70-200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol_VS5202D.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Rigol VS5000 Series]] (2ch, 20-200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Focussz_fosc21_mugshot.png|link=Focussz Fosc21|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Focussz Fosc21]] (2ch, 8kS/s, 3kHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek dso2250 mugshot.png|link=Hantek DSO-2250|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-2250]] (2ch, 250MS/s, 100MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek dso-5200a device front.png|link=Hantek DSO-5200A|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-5200A]] (2ch, 250MS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:OsciPrime.png|link=Nexus-Computing OsciPrime|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Nexus-Computing OsciPrime]] (2ch, ?MS/s, 3.3MHz-8MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Velleman PCSU1000.png|link=Velleman PCSU1000|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Velleman PCSU1000]] (2ch, 1GS/s, 50MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|link=Hantek DSO-1200|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-1200]] (2ch, 500MS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke scopemeter123.png|link=Fluke ScopeMeter 123|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Fluke ScopeMeter 123]] (2ch, 25MS/s, 20MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Picoscope 2203.png|link=Pico Technology PicoScope 2203|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 2203]] (40/20MS/s, 5MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:PicoScope_2205.png|link=Pico Technology PicoScope 2205|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 2205]] (200/100MS/s, 25MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Picoscope 3206.png|link=Pico Technology PicoScope 3206|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 3206]] (200/100MS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Picoscope 5203.png|link=Pico Technology PicoScope 5203|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 5203]] (1/0.5GS/s, 250MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Usbduxfast.png|link=Incite Technology USB-DUXfast|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Incite Technology USB-DUXfast]] (16ch, 3MHz, ? BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:UNI-T UTD2042C.png|link=UNI-T UTD2042C|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UTD2042C]] (2ch, 500MS/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft dso-220 usb.png|link=Voltcraft DSO-220|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DSO-220]] (2ch, 60MS/s, 20MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft DSO-3062C.png|link=Voltcraft DSO-3062C|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DSO-3062C]] (2ch, 1GS/s, 60MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Multimeters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|link=Agilent U1231A|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent U1231A]] (6000 counts, USB/Bluetooth)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Agilent U1232A.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent U1232A]] (6000 counts, USB/Bluetooth)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent U1233A]] (6000 counts, USB/Bluetooth)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[BBC Goertz Metrawatt M2110]] (30000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Bm_857_mugshot_500000.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Brymen BM857]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digitek_dt4000zc_device_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Digitek DT4000ZC]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke 187.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Fluke 187/189]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke 287.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Fluke 287/289]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gmc metrahit 14a logo.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Gossen Metrawatt Metrahit 14A]] (3100 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gossen Metrawatt Metrahit 16I small.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Gossen Metrawatt Metrahit 16I]] (3100 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gossen Metrawatt Metrahit 18S small.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Gossen Metrawatt Metrahit 18S]] (31000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:100px_Idm103n.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ISO-TECH IDM103N]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mastech mas345 device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MASTECH MAS345]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metex m4650cr mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Metex M-4650CR]] (20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Norma dm950.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Norma DM950]] (21000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce-pce-dm32.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-DM32]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metex_me-31.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[PeakTech 3410]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Peaktech 4370 device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[PeakTech 4370]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rs_22_168_mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[RadioShack 22-168]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rs_22-805_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[RadioShack 22-805]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:radioshack_22_812_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[RadioShack 22-812]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Siemens B1105 small.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Siemens B1105]] (310000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tecpel dmm8061.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Tecpel DMM-8061]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tp4000zc_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[TekPower TP4000ZC]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7745.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7745]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ut60e_-_front_-_alpha.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT60E]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni-t ut61b mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61B]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni-t ut61c mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61C]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni t ut61d device.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61D]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Old ver front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61E]] (22000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Va_va18b.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[V&amp;amp;A VA18B]] (6000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Va va40b mugshot.png|link=VA40B|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[V&amp;amp;A VA40B]] (6000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Victor 86c device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Victor 86C]] (4000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Victor 70C.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Victor 70C]] (4000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft_M-3650D_transparent.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-3650D]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m4650cr.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-4650CR]] (20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc820 device.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-820]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc830.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-830]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc840 device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-840]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Tenma 72-1016.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-1016]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7730.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7730]] (20000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7732.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7732]] (40000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7750.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7750]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-9380A.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-9380A]] (40000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m-3650cr.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-3650CR]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Appa 107.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[APPA 107]] (4000 / 20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digitek dt8000.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Digitek DT8000]] (8000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digitek dt80000.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Digitek DT80000]] (80000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Escort 179 device front.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Escort 179]] (10000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gossen metrahit 30m.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Gossen-Metrawatt METRAHIT 30M]] (1200000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:800px-Mastech m9803r device front.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MASTECH M9803R]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metrix mx53.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Metrix MX53]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metrix mx56c.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Metrix MX56C]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Protek 6500]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m3890dt usb.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-3890DT]] (4000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m4660a device front.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-4660A]] (20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc920.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-920]] (40000/4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc940.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-940]] (40000/4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LCR meters ==&lt;br /&gt;
&lt;br /&gt;
TODO.&lt;br /&gt;
&lt;br /&gt;
== Sound level meters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:CEM DT-8852.png|link=CEM DT-8852|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[CEM DT-8852]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Colead SL-5868P.png|link=Colead SL-5868P|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Colead SL-5868P]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Kecheng KC-330B.png|link=Kecheng KC-330B|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Kecheng KC-330B]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tondaj sl-814.png|link=Tondaj SL-814|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Tondaj SL-814]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft_DL-161S.png|link=Voltcraft DL-161S|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-161S]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (also: light-/thermo-/hygrometer; RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft_dl_160s.png|link=Voltcraft DL-160S|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-160S]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Thermometers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:rs55ii.png|link=APPA 55II|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[APPA 55II]] (2xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:EL-USB-2.png|link=Lascar Electronics EL-USB-2|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lascar Electronics EL-USB-2]] (1xtemp, 1xhum, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mic 98581.png|link=MIC 98581|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MIC 98581]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mic 98583.png|link=MIC 98583|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MIC 98583]] (1xtemp, 1xhum, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni-t ut325 front.png|link=UNI-T UT325|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT325]] (2xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft k204.png|link=Voltcraft K204|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft K204]] (4xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Elitech rc3.png|link=Elitech RC-3|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Elitech RC-3]] (1xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (1xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rding temper front.png|link=RDing TEMPer|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rding temper gold device front.png|link=RDing TEMPer Gold|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer Gold]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rding temper1 device front.png|link=RDing TEMPer1|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer1]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pcsensor_temper1k2.png|link=RDing TEMPer1K2|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer1K2]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft dl-120th.png|link=Voltcraft DL-120TH|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-120TH]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft dl-140th.png|link=Voltcraft DL-140TH|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-140TH]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hygrometers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:EL-USB-2.png|link=Lascar Electronics EL-USB-2|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lascar Electronics EL-USB-2]] (temp/humidity, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mic 98583.png|link=MIC 98583|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MIC 98583]] (temp/humidity, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (also: light-/soundlevelmeter; RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Silabs si7005usb dgl eb top.jpg|link=SiLabs Si7005USB-Dongle|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[SiLabs Si7005USB-Dongle]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anemometers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Mastech ms6252b.png|link=MASTECH MS6252B|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MASTECH MS6252B]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Light meters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Lutron YK-2005LX.png|link=Lutron YK-2005LX|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Lutron YK-2005LX]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energy meters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Actaris_a14c5_teleinfo.png|link=EDF Teleinfo|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[EDF Teleinfo]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DAQs ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Ni usb 6008.png|link=NI USB-6008|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[NI USB-6008]] (8/2 analog inputs/outputs, 12 digital I/Os)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dataloggers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:EL-USB-CO.png|link=Lascar Electronics EL-USB-CO|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lascar Electronics EL-USB-CO]] (carbon monoxide (CO) logger, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gsg_indoor_air_monitor.png|link=GSG Indoor Air Monitor|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[GSG Indoor Air Monitor]] (air quality monitor, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Maul_studio_i.png|link=MAUL studio i|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MAUL studio i]] (weighing scale, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft co-20.png|link=Voltcraft CO-20|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft CO-20]] (air quality monitor, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Function generators ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Hantek DDS-3X25 top.png|link=Hantek DDS-3X25|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek DDS-3X25]] (25MHz, PC-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Siglent sdg1010 device front 8116.png|link=Siglent SDG1010|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Siglent SDG1010]] (10MHz, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RF receivers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|link=Per Vices Noctar|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Per Vices Noctar]] (100kHz-4GHz, IQ modulator/demodulator, PCIe)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spectrum analyzers ==&lt;br /&gt;
&lt;br /&gt;
TODO.&lt;br /&gt;
&lt;br /&gt;
== Power supplies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Sigrok logo no text transparent 512.png|link=ATTEN_ATZ9711|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ATTEN ATZ9711]] (DC electronic load, 150W/0~30A/0~150V, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Atten PPS3203T-3S.png|link=Atten PPS3203T-3S|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Atten PPS3203T-3S]] (3ch, 2*0-32V, 1*0-6V at 0-3A, USB&amp;amp;RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Manson hcs3202.png|link=Manson HCS-3202|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Manson HCS-3202]] (1ch, 1-36V/0-10A, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:PS3005D front on.JPG|link=Velleman PS3005D|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Velleman PS3005D]] (1ch, 0-30V/0-5A, USB&amp;amp;RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GPIB interfaces ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Beiming_s82357.png|link=Beiming S82357|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Beiming S82357]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:ICS 488-USB.png|link=ICS 488-USB|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ICS 488-USB]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:GPIB-USB 82357B clone.png|link=GPIB-USB 82357B clone|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[GPIB-USB 82357B clone]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:NI GPIB-ENET.png|link=National Instruments GPIB-ENET|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[National Instruments GPIB-ENET]] (hardware-based, Ethernet)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:NI GPIB-USB-HS.png|link=National Instruments GPIB-USB-HS|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[National Instruments GPIB-USB-HS]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Prologix-usb.png|link=Prologix GPIB-USB|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Prologix GPIB-USB]] (firmware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Potential other candidates ==&lt;br /&gt;
&lt;br /&gt;
If you own any other logic analyzers, oscilloscopes, multimeters, dataloggers, ... and want to add support for them in sigrok (or donate/lend devices to developers), please let us know. We&amp;#039;re always happy to add more hardware support! Join the [https://lists.sourceforge.net/lists/listinfo/sigrok-devel mailing list] or ask on [irc://chat.freenode.net/sigrok IRC #sigrok] if you want to help out.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VS5202D&amp;diff=8378</id>
		<title>Rigol VS5202D</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VS5202D&amp;diff=8378"/>
		<updated>2014-01-05T23:14:02Z</updated>

		<summary type="html">&lt;p&gt;Martling: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Rigol_VS5202D.png|thumb|right|Rigol VS5202D]]&lt;br /&gt;
&lt;br /&gt;
The [http://rigol.com/ Rigol VS5202D] is a 2 channel analog and 16 channel digital, 200 MHz, USB- and Ethernet-based oscilloscope/logic analyzer.&lt;br /&gt;
&lt;br /&gt;
See [[Rigol VS5202D/Info]] for some more details (such as &amp;#039;&amp;#039;&amp;#039;lsusb -vvv&amp;#039;&amp;#039;&amp;#039; output) on the device.&lt;br /&gt;
&lt;br /&gt;
See [[Rigol VS5000 Series]] for information common to all devices in this series.&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Rigol VS5202D front.jpg&lt;br /&gt;
File:Rigol VS5202D back.jpg&lt;br /&gt;
File:Rigol VS5202D PCB top.jpg&lt;br /&gt;
File:Rigol VS5202D PCB bottom.jpg&lt;br /&gt;
File:Rigol VS5202D CPU.jpg&lt;br /&gt;
File:Rigol VS5202D ethernet-USB.jpg&lt;br /&gt;
File:Rigol VS5202D analog frontend.jpg&lt;br /&gt;
File:Rigol VS5202D analog op-amps.jpg&lt;br /&gt;
File:Rigol VS5202D analog.jpg&lt;br /&gt;
File:Rigol VS5202D analog EPCS1N.jpg&lt;br /&gt;
File:Rigol VS5202D logic.jpg&lt;br /&gt;
File:Rigol VS5202D logic EPCS1N.jpg&lt;br /&gt;
File:Rigol VS5202D PCB power.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 1.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 2.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 3.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 4.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 5.jpg&lt;br /&gt;
File:Rigol VS5202D accessories.jpg&lt;br /&gt;
File:Rigol VS5202D digital pod.jpg&lt;br /&gt;
File:Rigol VS5202D digital pod connectors.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Logic analyzer]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Mixed-signal oscilloscope]]&lt;br /&gt;
[[Category:Planned]]&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VS5000_series&amp;diff=8375</id>
		<title>Rigol VS5000 series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VS5000_series&amp;diff=8375"/>
		<updated>2014-01-05T23:12:04Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Rigol_VS5202D.png|thumb|right|Rigol VS5000 series]]&lt;br /&gt;
&lt;br /&gt;
The [http://rigol.com/ Rigol VS5000] series are 2 channel, 20-200Mhz USB/Ethernet oscilloscopes. Some models also include a 16 channel logic analyzer.&lt;br /&gt;
&lt;br /&gt;
The device is [http://int.rigol.com/prodserv/Discontinued%20products/ discontinued by Rigol], but you can find the basic specs e.g. [http://www.batronix.com/shop/oscilloscopes/Rigol-VS5202D.html here].&lt;br /&gt;
&lt;br /&gt;
== Models ==&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;
! Model &lt;br /&gt;
! Analog Bandwith&lt;br /&gt;
! Logic Analyzer&lt;br /&gt;
! Time Base Range&lt;br /&gt;
|-&lt;br /&gt;
| VS5022&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 25 MHz&lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 20ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5022D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5042&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; |  40 MHz&lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 10ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5042D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5062&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot;  | 60 MHz&lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 5ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5062D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5102&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; |  100 MHz &lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 2ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5102D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5202&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; |  200 MHz &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Rigol VS5202D | VS5202D]]&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ● &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;CPU&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.analog.com/static/imported-files/data_sheets/ADSP-BF531_BF532_BF533.pdf Analog Devices ADSP-BF531] Blackfin CPU&lt;br /&gt;
* [http://www.skhynix.com/products/consumer/view.jsp?info.ramKind=01&amp;amp;info.serialNo=HY57V281620FTP&amp;amp;posMap=EOL Hynix HY57V281620FTP] 16MB DRAM&lt;br /&gt;
* [http://www.spansion.com/Products/Parallel-Flash/Pages/Spansion%20GL.aspx Spansion S29GL032A] 4MB flash&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Analog acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone/overview/cyc-overview.html Altera Cyclone EP1C6] 6000-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logic acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone2/overview/cy2-overview.html Altera Cyclone II EP2C5] 4600-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ethernet interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.davicom.com.tw/userfile/24247/DM9000EPProductBrief_v1.0.pdf Davicom DM9000EP] 10/100 ethernet controller&lt;br /&gt;
* 25MHz oscillator&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;USB interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.plxtech.com/products/usbcontrollers/net2272 PLX NetChip NET2272] USB 2.0 controller&lt;br /&gt;
* 130MHz oscillator&lt;br /&gt;
&lt;br /&gt;
== TCP Protocol ==&lt;br /&gt;
&lt;br /&gt;
The device listens on TCP port 19, and implements an SCPI based protocol compatible with that of the [[Rigol DS1000 Series]]. Responses received from the device is prefixed with a 32-bit, little-endian length field. The transport is implemented in hardware/common/scpi_tcp.c,&lt;br /&gt;
and the protocol by the rigol-ds driver.&lt;br /&gt;
&lt;br /&gt;
== USB Protocol ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Work in progress.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The Rigol communication protocol only uses the USB control and bulk transfer. Control is for sending setup and request smaller amounts of data. Bulk transfers is returned by the Rigol box with setup and image data.&lt;br /&gt;
&lt;br /&gt;
All control transfers interesting for us has request type set to &amp;#039;&amp;#039;&amp;#039;0xc0&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
The request field in the control packets is what tells us which command &lt;br /&gt;
is actually sent.&lt;br /&gt;
&lt;br /&gt;
All descriptions below should have both request type and request set to proper&lt;br /&gt;
values, obvious from the headlines what it should be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packet types ===&lt;br /&gt;
This information is completely reverse engineered by hand.&lt;br /&gt;
&lt;br /&gt;
==== Read answer (request = 0x00) ====&lt;br /&gt;
Commands ending with a question mark (&amp;#039;?&amp;#039; ASCII 0x3f) returns answer in two control transfers.&lt;br /&gt;
&lt;br /&gt;
First control transfer is to query the size of the data to be returned. &lt;br /&gt;
That is done by value set to 0. One byte of data is returned in the data field&lt;br /&gt;
by this operation which is the size of the string the Rigol box wants to return.&lt;br /&gt;
&lt;br /&gt;
Second control transfer has value set to 1. The buffer, allocated to the size&lt;br /&gt;
just read, is also sent along the command to be filled with the data. The &lt;br /&gt;
returned data is an ASCII string.&lt;br /&gt;
&lt;br /&gt;
==== Write command (request = 0x01) ====&lt;br /&gt;
Commands from the PC program to the Rigol box is sent as text strings.&lt;br /&gt;
Which commands that are available are listed in the [http://www.tequipment.net/pdf/Rigol/VS5000_programming.pdf &amp;#039;&amp;#039;&amp;#039;Programming Guide&amp;#039;&amp;#039;&amp;#039;] from Rigol.&lt;br /&gt;
&lt;br /&gt;
Each character is sent in a control message with the value set to the ASCII character to be sent. Each ASCII string is terminated with a carriage return  (0x0d, &amp;#039;\r&amp;#039;), which terminates the transmission.&lt;br /&gt;
&lt;br /&gt;
==== Request waveform data (Request = 0x04) ====&lt;br /&gt;
When waveform data is requested to be retrieved a control message is sent.&lt;br /&gt;
The index field of the setup data is a bitmask on which channels to be requested. It is encoded as bit 0 meaning Channel 1, bit 1 meaning Channel 2, bit 2 meaning Logic Channel 0, bit 3 meaning Logic Channel 1 etc.&lt;br /&gt;
&lt;br /&gt;
The 4 byte data field of the control packet sent back as an ack contains number of bytes to be returned by bulk messages. It is encoded LSB first.&lt;br /&gt;
&lt;br /&gt;
After that a series of bulk transfers occurs, with up to 4096 bytes in each transfer, until number of bytes given before is transferred. The first transfer can be (and usually, but not always, is) empty. The first returned data packet has a 780 byte header.&lt;br /&gt;
&lt;br /&gt;
===== Data header =====&lt;br /&gt;
Last 8 bytes of header are identical to the ones returned by [[#SETUP DSO? (Request = 0x06)|SETUP DSO? (Request = 0x06)]]. Mostly contains zeroes so maybe can be omitted, however it does seem to contain some meaningful bytes, the meaning of which is as of yet unclear.&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;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x01 when trigger is &amp;quot;Single&amp;quot;, 0x03 when Normal.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 0x201-?&lt;br /&gt;
| 0x03 when trigger &amp;quot;Normal&amp;quot;, number of bytes correlates to number of bulk transfers to return&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0x304-0x30B&lt;br /&gt;
| Identical to last 8 bytes of [[#SETUP DSO? (Request = 0x06)|&amp;quot;SETUP DSO?&amp;quot; packet]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Unknown control transfer (Request = 0x05) ====&lt;br /&gt;
This control transfer is unknown, but it occurs when stop has been pressed and streaming of big bulk blocks is terminated. All encoding in the control transfers are as described by request 0x04 above. The index field is always zero.&lt;br /&gt;
&lt;br /&gt;
Returns 0x1000 or 0x080000 (the currently selected memory depth). After this request is called, bulk transfers occur the same way they would after [[#Request waveform data (Request = 0x04)|request 0x04]], except the data header is not present.&lt;br /&gt;
&lt;br /&gt;
==== SETUP DSO? (Request = 0x06) ====&lt;br /&gt;
After this control transfer a bulk transfer occurs with 780 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:DSO? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
When called in [[#Stop reading waveform data|stop sequence]] returns an empty bulk transfer at first, after which the bulk transfer is reissued and returns the 780 bytes of data.&lt;br /&gt;
&lt;br /&gt;
==== SETUP LA? (Request = 0x0c) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 260 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:LA? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
==== SETUP ALT? (Request = 0x0d) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 396 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:ALT? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Transfer sequences ===&lt;br /&gt;
&lt;br /&gt;
==== Turn-on sequence ====&lt;br /&gt;
# *IDN?&lt;br /&gt;
# :INFO:FPGA?&lt;br /&gt;
# :STOP&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
==== Turn-off sequence ====&lt;br /&gt;
Nothing special.&lt;br /&gt;
&lt;br /&gt;
==== Start reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# :RUN&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP DSO? (waiting for something?)&lt;br /&gt;
# Request waveform data.&lt;br /&gt;
# The data is started get transferred using bulk transfer.&lt;br /&gt;
&lt;br /&gt;
==== Stop reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :STOP&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# Request waveform data, which returns with size 0.&lt;br /&gt;
# Unknown transfer, which returns with waveform data without data header.&lt;br /&gt;
# The 8192 byte of data is bulked up.&lt;br /&gt;
# :INFO:EUQP?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
&lt;br /&gt;
==== Command sequences ====&lt;br /&gt;
# Command&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data blocks ===&lt;br /&gt;
&lt;br /&gt;
==== 260 bytes block ====&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;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| Logic analyzer off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| Logic analyzer available&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| Logic analyzer channel 0 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Logic analyzer channel 1 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| Logic analyzer channel 2 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 5&lt;br /&gt;
| Logic analyzer channel 3 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 6&lt;br /&gt;
| Logic analyzer channel 4 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 7&lt;br /&gt;
| Logic analyzer channel 5 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Logic analyzer channel 6 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| Logic analyzer channel 7 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 10&lt;br /&gt;
| Logic analyzer channel 8 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 11&lt;br /&gt;
| Logic analyzer channel 9 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Logic analyzer channel 10 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 13&lt;br /&gt;
| Logic analyzer channel 11 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 14&lt;br /&gt;
| Logic analyzer channel 12 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
| Logic analyzer channel 13 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 16&lt;br /&gt;
| Logic analyzer channel 14 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 17&lt;br /&gt;
| Logic analyzer channel 15 off/on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 396 bytes block ====&lt;br /&gt;
No information&lt;br /&gt;
&lt;br /&gt;
==== 780 bytes block ====&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;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Analogue 1; OFF = 0, ON chan1 = 1, ON chan2 = 2 (bitmask?)\\&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Analogue 1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 32 &lt;br /&gt;
| Coupling chan1; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 44&lt;br /&gt;
| Bandwidth Limit chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 46&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 90&lt;br /&gt;
| Analogue 2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 108&lt;br /&gt;
| Coupling chan2; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 120&lt;br /&gt;
| Bandwidth Limit chan2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 122&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 448&lt;br /&gt;
| Acquire type; Normal = 0, Average = 1, Peak = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 456&lt;br /&gt;
| Acquire average; 2 = 1, 4 = 2, 8 = 3, 16 = 4, 32 = 5, 64 = 6, 128 = 7, 256 = 8&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 520&lt;br /&gt;
| Trigger mode; Edge = 0, Pulse = 1, Slope = 2, Video = 3, Alternate = ?, Pattern = 5, Duration = 6 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The image information bulk transfer ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Logic analyzer]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Mixed-signal oscilloscope]]&lt;br /&gt;
[[Category:Supported]]&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VS5000_series&amp;diff=8374</id>
		<title>Rigol VS5000 series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VS5000_series&amp;diff=8374"/>
		<updated>2014-01-05T23:11:07Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* TCP Protocol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Rigol_VS5202D.png|thumb|right|Rigol VS5000 series]]&lt;br /&gt;
&lt;br /&gt;
The [http://rigol.com/ Rigol VS5000] series are 2 channel, 20-200Mhz USB/Ethernet oscilloscopes. Some models also include a 16 channel logic analyzer.&lt;br /&gt;
&lt;br /&gt;
The device is [http://int.rigol.com/prodserv/Discontinued%20products/ discontinued by Rigol], but you can find the basic specs e.g. [http://www.batronix.com/shop/oscilloscopes/Rigol-VS5202D.html here].&lt;br /&gt;
&lt;br /&gt;
== Models ==&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;
! Model &lt;br /&gt;
! Analog Bandwith&lt;br /&gt;
! Logic Analyzer&lt;br /&gt;
! Time Base Range&lt;br /&gt;
|-&lt;br /&gt;
| VS5022&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 25 MHz&lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 20ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5022D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5042&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; |  40 MHz&lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 10ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5042D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5062&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot;  | 60 MHz&lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 5ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5062D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5102&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; |  100 MHz &lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 2ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5102D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5202&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; |  200 MHz &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Rigol VS52202D | VS5202D]]&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ● &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;CPU&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.analog.com/static/imported-files/data_sheets/ADSP-BF531_BF532_BF533.pdf Analog Devices ADSP-BF531] Blackfin CPU&lt;br /&gt;
* [http://www.skhynix.com/products/consumer/view.jsp?info.ramKind=01&amp;amp;info.serialNo=HY57V281620FTP&amp;amp;posMap=EOL Hynix HY57V281620FTP] 16MB DRAM&lt;br /&gt;
* [http://www.spansion.com/Products/Parallel-Flash/Pages/Spansion%20GL.aspx Spansion S29GL032A] 4MB flash&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Analog acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone/overview/cyc-overview.html Altera Cyclone EP1C6] 6000-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logic acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone2/overview/cy2-overview.html Altera Cyclone II EP2C5] 4600-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ethernet interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.davicom.com.tw/userfile/24247/DM9000EPProductBrief_v1.0.pdf Davicom DM9000EP] 10/100 ethernet controller&lt;br /&gt;
* 25MHz oscillator&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;USB interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.plxtech.com/products/usbcontrollers/net2272 PLX NetChip NET2272] USB 2.0 controller&lt;br /&gt;
* 130MHz oscillator&lt;br /&gt;
&lt;br /&gt;
== TCP Protocol ==&lt;br /&gt;
&lt;br /&gt;
The device listens on TCP port 19, and implements an SCPI based protocol compatible with that of the [[Rigol DS1000 Series]]. Responses received from the device is prefixed with a 32-bit, little-endian length field. The transport is implemented in hardware/common/scpi_tcp.c,&lt;br /&gt;
and the protocol by the rigol-ds driver.&lt;br /&gt;
&lt;br /&gt;
== USB Protocol ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Work in progress.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The Rigol communication protocol only uses the USB control and bulk transfer. Control is for sending setup and request smaller amounts of data. Bulk transfers is returned by the Rigol box with setup and image data.&lt;br /&gt;
&lt;br /&gt;
All control transfers interesting for us has request type set to &amp;#039;&amp;#039;&amp;#039;0xc0&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
The request field in the control packets is what tells us which command &lt;br /&gt;
is actually sent.&lt;br /&gt;
&lt;br /&gt;
All descriptions below should have both request type and request set to proper&lt;br /&gt;
values, obvious from the headlines what it should be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packet types ===&lt;br /&gt;
This information is completely reverse engineered by hand.&lt;br /&gt;
&lt;br /&gt;
==== Read answer (request = 0x00) ====&lt;br /&gt;
Commands ending with a question mark (&amp;#039;?&amp;#039; ASCII 0x3f) returns answer in two control transfers.&lt;br /&gt;
&lt;br /&gt;
First control transfer is to query the size of the data to be returned. &lt;br /&gt;
That is done by value set to 0. One byte of data is returned in the data field&lt;br /&gt;
by this operation which is the size of the string the Rigol box wants to return.&lt;br /&gt;
&lt;br /&gt;
Second control transfer has value set to 1. The buffer, allocated to the size&lt;br /&gt;
just read, is also sent along the command to be filled with the data. The &lt;br /&gt;
returned data is an ASCII string.&lt;br /&gt;
&lt;br /&gt;
==== Write command (request = 0x01) ====&lt;br /&gt;
Commands from the PC program to the Rigol box is sent as text strings.&lt;br /&gt;
Which commands that are available are listed in the [http://www.tequipment.net/pdf/Rigol/VS5000_programming.pdf &amp;#039;&amp;#039;&amp;#039;Programming Guide&amp;#039;&amp;#039;&amp;#039;] from Rigol.&lt;br /&gt;
&lt;br /&gt;
Each character is sent in a control message with the value set to the ASCII character to be sent. Each ASCII string is terminated with a carriage return  (0x0d, &amp;#039;\r&amp;#039;), which terminates the transmission.&lt;br /&gt;
&lt;br /&gt;
==== Request waveform data (Request = 0x04) ====&lt;br /&gt;
When waveform data is requested to be retrieved a control message is sent.&lt;br /&gt;
The index field of the setup data is a bitmask on which channels to be requested. It is encoded as bit 0 meaning Channel 1, bit 1 meaning Channel 2, bit 2 meaning Logic Channel 0, bit 3 meaning Logic Channel 1 etc.&lt;br /&gt;
&lt;br /&gt;
The 4 byte data field of the control packet sent back as an ack contains number of bytes to be returned by bulk messages. It is encoded LSB first.&lt;br /&gt;
&lt;br /&gt;
After that a series of bulk transfers occurs, with up to 4096 bytes in each transfer, until number of bytes given before is transferred. The first transfer can be (and usually, but not always, is) empty. The first returned data packet has a 780 byte header.&lt;br /&gt;
&lt;br /&gt;
===== Data header =====&lt;br /&gt;
Last 8 bytes of header are identical to the ones returned by [[#SETUP DSO? (Request = 0x06)|SETUP DSO? (Request = 0x06)]]. Mostly contains zeroes so maybe can be omitted, however it does seem to contain some meaningful bytes, the meaning of which is as of yet unclear.&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;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x01 when trigger is &amp;quot;Single&amp;quot;, 0x03 when Normal.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 0x201-?&lt;br /&gt;
| 0x03 when trigger &amp;quot;Normal&amp;quot;, number of bytes correlates to number of bulk transfers to return&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0x304-0x30B&lt;br /&gt;
| Identical to last 8 bytes of [[#SETUP DSO? (Request = 0x06)|&amp;quot;SETUP DSO?&amp;quot; packet]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Unknown control transfer (Request = 0x05) ====&lt;br /&gt;
This control transfer is unknown, but it occurs when stop has been pressed and streaming of big bulk blocks is terminated. All encoding in the control transfers are as described by request 0x04 above. The index field is always zero.&lt;br /&gt;
&lt;br /&gt;
Returns 0x1000 or 0x080000 (the currently selected memory depth). After this request is called, bulk transfers occur the same way they would after [[#Request waveform data (Request = 0x04)|request 0x04]], except the data header is not present.&lt;br /&gt;
&lt;br /&gt;
==== SETUP DSO? (Request = 0x06) ====&lt;br /&gt;
After this control transfer a bulk transfer occurs with 780 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:DSO? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
When called in [[#Stop reading waveform data|stop sequence]] returns an empty bulk transfer at first, after which the bulk transfer is reissued and returns the 780 bytes of data.&lt;br /&gt;
&lt;br /&gt;
==== SETUP LA? (Request = 0x0c) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 260 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:LA? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
==== SETUP ALT? (Request = 0x0d) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 396 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:ALT? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Transfer sequences ===&lt;br /&gt;
&lt;br /&gt;
==== Turn-on sequence ====&lt;br /&gt;
# *IDN?&lt;br /&gt;
# :INFO:FPGA?&lt;br /&gt;
# :STOP&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
==== Turn-off sequence ====&lt;br /&gt;
Nothing special.&lt;br /&gt;
&lt;br /&gt;
==== Start reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# :RUN&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP DSO? (waiting for something?)&lt;br /&gt;
# Request waveform data.&lt;br /&gt;
# The data is started get transferred using bulk transfer.&lt;br /&gt;
&lt;br /&gt;
==== Stop reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :STOP&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# Request waveform data, which returns with size 0.&lt;br /&gt;
# Unknown transfer, which returns with waveform data without data header.&lt;br /&gt;
# The 8192 byte of data is bulked up.&lt;br /&gt;
# :INFO:EUQP?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
&lt;br /&gt;
==== Command sequences ====&lt;br /&gt;
# Command&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data blocks ===&lt;br /&gt;
&lt;br /&gt;
==== 260 bytes block ====&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;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| Logic analyzer off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| Logic analyzer available&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| Logic analyzer channel 0 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Logic analyzer channel 1 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| Logic analyzer channel 2 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 5&lt;br /&gt;
| Logic analyzer channel 3 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 6&lt;br /&gt;
| Logic analyzer channel 4 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 7&lt;br /&gt;
| Logic analyzer channel 5 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Logic analyzer channel 6 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| Logic analyzer channel 7 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 10&lt;br /&gt;
| Logic analyzer channel 8 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 11&lt;br /&gt;
| Logic analyzer channel 9 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Logic analyzer channel 10 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 13&lt;br /&gt;
| Logic analyzer channel 11 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 14&lt;br /&gt;
| Logic analyzer channel 12 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
| Logic analyzer channel 13 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 16&lt;br /&gt;
| Logic analyzer channel 14 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 17&lt;br /&gt;
| Logic analyzer channel 15 off/on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 396 bytes block ====&lt;br /&gt;
No information&lt;br /&gt;
&lt;br /&gt;
==== 780 bytes block ====&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;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Analogue 1; OFF = 0, ON chan1 = 1, ON chan2 = 2 (bitmask?)\\&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Analogue 1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 32 &lt;br /&gt;
| Coupling chan1; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 44&lt;br /&gt;
| Bandwidth Limit chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 46&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 90&lt;br /&gt;
| Analogue 2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 108&lt;br /&gt;
| Coupling chan2; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 120&lt;br /&gt;
| Bandwidth Limit chan2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 122&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 448&lt;br /&gt;
| Acquire type; Normal = 0, Average = 1, Peak = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 456&lt;br /&gt;
| Acquire average; 2 = 1, 4 = 2, 8 = 3, 16 = 4, 32 = 5, 64 = 6, 128 = 7, 256 = 8&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 520&lt;br /&gt;
| Trigger mode; Edge = 0, Pulse = 1, Slope = 2, Video = 3, Alternate = ?, Pattern = 5, Duration = 6 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The image information bulk transfer ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Logic analyzer]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Mixed-signal oscilloscope]]&lt;br /&gt;
[[Category:Supported]]&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VS5000_series&amp;diff=8373</id>
		<title>Rigol VS5000 series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VS5000_series&amp;diff=8373"/>
		<updated>2014-01-05T23:10:34Z</updated>

		<summary type="html">&lt;p&gt;Martling: Created page with &amp;quot;Rigol VS5000 series  The [http://rigol.com/ Rigol VS5000] series are 2 channel, 20-200Mhz USB/Ethernet oscilloscopes. Some models also i...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Rigol_VS5202D.png|thumb|right|Rigol VS5000 series]]&lt;br /&gt;
&lt;br /&gt;
The [http://rigol.com/ Rigol VS5000] series are 2 channel, 20-200Mhz USB/Ethernet oscilloscopes. Some models also include a 16 channel logic analyzer.&lt;br /&gt;
&lt;br /&gt;
The device is [http://int.rigol.com/prodserv/Discontinued%20products/ discontinued by Rigol], but you can find the basic specs e.g. [http://www.batronix.com/shop/oscilloscopes/Rigol-VS5202D.html here].&lt;br /&gt;
&lt;br /&gt;
== Models ==&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;
! Model &lt;br /&gt;
! Analog Bandwith&lt;br /&gt;
! Logic Analyzer&lt;br /&gt;
! Time Base Range&lt;br /&gt;
|-&lt;br /&gt;
| VS5022&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 25 MHz&lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 20ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5022D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5042&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; |  40 MHz&lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 10ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5042D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5062&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot;  | 60 MHz&lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 5ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5062D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5102&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; |  100 MHz &lt;br /&gt;
| &lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align:center&amp;quot; | 2ns/div &amp;amp;ndash; 50s/div&lt;br /&gt;
|-&lt;br /&gt;
| VS5102D&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ●&lt;br /&gt;
|-&lt;br /&gt;
| VS5202&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; |  200 MHz &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Rigol VS52202D | VS5202D]]&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; | ● &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;CPU&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.analog.com/static/imported-files/data_sheets/ADSP-BF531_BF532_BF533.pdf Analog Devices ADSP-BF531] Blackfin CPU&lt;br /&gt;
* [http://www.skhynix.com/products/consumer/view.jsp?info.ramKind=01&amp;amp;info.serialNo=HY57V281620FTP&amp;amp;posMap=EOL Hynix HY57V281620FTP] 16MB DRAM&lt;br /&gt;
* [http://www.spansion.com/Products/Parallel-Flash/Pages/Spansion%20GL.aspx Spansion S29GL032A] 4MB flash&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Analog acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone/overview/cyc-overview.html Altera Cyclone EP1C6] 6000-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logic acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone2/overview/cy2-overview.html Altera Cyclone II EP2C5] 4600-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ethernet interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.davicom.com.tw/userfile/24247/DM9000EPProductBrief_v1.0.pdf Davicom DM9000EP] 10/100 ethernet controller&lt;br /&gt;
* 25MHz oscillator&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;USB interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.plxtech.com/products/usbcontrollers/net2272 PLX NetChip NET2272] USB 2.0 controller&lt;br /&gt;
* 130MHz oscillator&lt;br /&gt;
&lt;br /&gt;
== TCP Protocol ==&lt;br /&gt;
&lt;br /&gt;
The device listens on TCP port 19, and implements an SCPI based protocol compatible with that of the [[Rigol DS1000 series]]. Responses received from the device is prefixed with a 32-bit, little-endian length field. The transport is implemented in hardware/common/scpi_tcp.c,&lt;br /&gt;
and the protocol by the rigol-ds driver.&lt;br /&gt;
&lt;br /&gt;
== USB Protocol ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Work in progress.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The Rigol communication protocol only uses the USB control and bulk transfer. Control is for sending setup and request smaller amounts of data. Bulk transfers is returned by the Rigol box with setup and image data.&lt;br /&gt;
&lt;br /&gt;
All control transfers interesting for us has request type set to &amp;#039;&amp;#039;&amp;#039;0xc0&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
The request field in the control packets is what tells us which command &lt;br /&gt;
is actually sent.&lt;br /&gt;
&lt;br /&gt;
All descriptions below should have both request type and request set to proper&lt;br /&gt;
values, obvious from the headlines what it should be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packet types ===&lt;br /&gt;
This information is completely reverse engineered by hand.&lt;br /&gt;
&lt;br /&gt;
==== Read answer (request = 0x00) ====&lt;br /&gt;
Commands ending with a question mark (&amp;#039;?&amp;#039; ASCII 0x3f) returns answer in two control transfers.&lt;br /&gt;
&lt;br /&gt;
First control transfer is to query the size of the data to be returned. &lt;br /&gt;
That is done by value set to 0. One byte of data is returned in the data field&lt;br /&gt;
by this operation which is the size of the string the Rigol box wants to return.&lt;br /&gt;
&lt;br /&gt;
Second control transfer has value set to 1. The buffer, allocated to the size&lt;br /&gt;
just read, is also sent along the command to be filled with the data. The &lt;br /&gt;
returned data is an ASCII string.&lt;br /&gt;
&lt;br /&gt;
==== Write command (request = 0x01) ====&lt;br /&gt;
Commands from the PC program to the Rigol box is sent as text strings.&lt;br /&gt;
Which commands that are available are listed in the [http://www.tequipment.net/pdf/Rigol/VS5000_programming.pdf &amp;#039;&amp;#039;&amp;#039;Programming Guide&amp;#039;&amp;#039;&amp;#039;] from Rigol.&lt;br /&gt;
&lt;br /&gt;
Each character is sent in a control message with the value set to the ASCII character to be sent. Each ASCII string is terminated with a carriage return  (0x0d, &amp;#039;\r&amp;#039;), which terminates the transmission.&lt;br /&gt;
&lt;br /&gt;
==== Request waveform data (Request = 0x04) ====&lt;br /&gt;
When waveform data is requested to be retrieved a control message is sent.&lt;br /&gt;
The index field of the setup data is a bitmask on which channels to be requested. It is encoded as bit 0 meaning Channel 1, bit 1 meaning Channel 2, bit 2 meaning Logic Channel 0, bit 3 meaning Logic Channel 1 etc.&lt;br /&gt;
&lt;br /&gt;
The 4 byte data field of the control packet sent back as an ack contains number of bytes to be returned by bulk messages. It is encoded LSB first.&lt;br /&gt;
&lt;br /&gt;
After that a series of bulk transfers occurs, with up to 4096 bytes in each transfer, until number of bytes given before is transferred. The first transfer can be (and usually, but not always, is) empty. The first returned data packet has a 780 byte header.&lt;br /&gt;
&lt;br /&gt;
===== Data header =====&lt;br /&gt;
Last 8 bytes of header are identical to the ones returned by [[#SETUP DSO? (Request = 0x06)|SETUP DSO? (Request = 0x06)]]. Mostly contains zeroes so maybe can be omitted, however it does seem to contain some meaningful bytes, the meaning of which is as of yet unclear.&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;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x01 when trigger is &amp;quot;Single&amp;quot;, 0x03 when Normal.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 0x201-?&lt;br /&gt;
| 0x03 when trigger &amp;quot;Normal&amp;quot;, number of bytes correlates to number of bulk transfers to return&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0x304-0x30B&lt;br /&gt;
| Identical to last 8 bytes of [[#SETUP DSO? (Request = 0x06)|&amp;quot;SETUP DSO?&amp;quot; packet]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Unknown control transfer (Request = 0x05) ====&lt;br /&gt;
This control transfer is unknown, but it occurs when stop has been pressed and streaming of big bulk blocks is terminated. All encoding in the control transfers are as described by request 0x04 above. The index field is always zero.&lt;br /&gt;
&lt;br /&gt;
Returns 0x1000 or 0x080000 (the currently selected memory depth). After this request is called, bulk transfers occur the same way they would after [[#Request waveform data (Request = 0x04)|request 0x04]], except the data header is not present.&lt;br /&gt;
&lt;br /&gt;
==== SETUP DSO? (Request = 0x06) ====&lt;br /&gt;
After this control transfer a bulk transfer occurs with 780 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:DSO? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
When called in [[#Stop reading waveform data|stop sequence]] returns an empty bulk transfer at first, after which the bulk transfer is reissued and returns the 780 bytes of data.&lt;br /&gt;
&lt;br /&gt;
==== SETUP LA? (Request = 0x0c) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 260 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:LA? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
==== SETUP ALT? (Request = 0x0d) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 396 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:ALT? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Transfer sequences ===&lt;br /&gt;
&lt;br /&gt;
==== Turn-on sequence ====&lt;br /&gt;
# *IDN?&lt;br /&gt;
# :INFO:FPGA?&lt;br /&gt;
# :STOP&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
==== Turn-off sequence ====&lt;br /&gt;
Nothing special.&lt;br /&gt;
&lt;br /&gt;
==== Start reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# :RUN&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP DSO? (waiting for something?)&lt;br /&gt;
# Request waveform data.&lt;br /&gt;
# The data is started get transferred using bulk transfer.&lt;br /&gt;
&lt;br /&gt;
==== Stop reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :STOP&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# Request waveform data, which returns with size 0.&lt;br /&gt;
# Unknown transfer, which returns with waveform data without data header.&lt;br /&gt;
# The 8192 byte of data is bulked up.&lt;br /&gt;
# :INFO:EUQP?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
&lt;br /&gt;
==== Command sequences ====&lt;br /&gt;
# Command&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data blocks ===&lt;br /&gt;
&lt;br /&gt;
==== 260 bytes block ====&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;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| Logic analyzer off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| Logic analyzer available&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| Logic analyzer channel 0 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Logic analyzer channel 1 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| Logic analyzer channel 2 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 5&lt;br /&gt;
| Logic analyzer channel 3 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 6&lt;br /&gt;
| Logic analyzer channel 4 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 7&lt;br /&gt;
| Logic analyzer channel 5 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Logic analyzer channel 6 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| Logic analyzer channel 7 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 10&lt;br /&gt;
| Logic analyzer channel 8 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 11&lt;br /&gt;
| Logic analyzer channel 9 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Logic analyzer channel 10 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 13&lt;br /&gt;
| Logic analyzer channel 11 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 14&lt;br /&gt;
| Logic analyzer channel 12 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
| Logic analyzer channel 13 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 16&lt;br /&gt;
| Logic analyzer channel 14 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 17&lt;br /&gt;
| Logic analyzer channel 15 off/on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 396 bytes block ====&lt;br /&gt;
No information&lt;br /&gt;
&lt;br /&gt;
==== 780 bytes block ====&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;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Analogue 1; OFF = 0, ON chan1 = 1, ON chan2 = 2 (bitmask?)\\&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Analogue 1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 32 &lt;br /&gt;
| Coupling chan1; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 44&lt;br /&gt;
| Bandwidth Limit chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 46&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 90&lt;br /&gt;
| Analogue 2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 108&lt;br /&gt;
| Coupling chan2; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 120&lt;br /&gt;
| Bandwidth Limit chan2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 122&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 448&lt;br /&gt;
| Acquire type; Normal = 0, Average = 1, Peak = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 456&lt;br /&gt;
| Acquire average; 2 = 1, 4 = 2, 8 = 3, 16 = 4, 32 = 5, 64 = 6, 128 = 7, 256 = 8&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 520&lt;br /&gt;
| Trigger mode; Edge = 0, Pulse = 1, Slope = 2, Video = 3, Alternate = ?, Pattern = 5, Duration = 6 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The image information bulk transfer ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Logic analyzer]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Mixed-signal oscilloscope]]&lt;br /&gt;
[[Category:Supported]]&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_DS2072&amp;diff=8371</id>
		<title>Rigol DS2072</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_DS2072&amp;diff=8371"/>
		<updated>2014-01-05T23:01:54Z</updated>

		<summary type="html">&lt;p&gt;Martling: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox oscilloscope&lt;br /&gt;
| image               = [[File:Rigol-ds2072 mugshot.png|180px]]&lt;br /&gt;
| name                = Rigol DS2072&lt;br /&gt;
| status              = supported&lt;br /&gt;
| source_code_dir     = rigol-ds&lt;br /&gt;
| channels            = 2&lt;br /&gt;
| samplerate          = 2GSa/s (1ch), 1GSa/s (2ch)&lt;br /&gt;
| bandwidth           = 70MHz (upgradable up to 300 MHz)&lt;br /&gt;
| vertical_resolution = 8bits&lt;br /&gt;
| triggers            = edge, pulse, runt, windows, nth edge, slope, video, pattern, delay, timeout, duration, setup/hold, RS232/UART, I²C, SPI, CAN, USB&lt;br /&gt;
| input_impedance     = 1MΩ‖16pF 300V RMS CAT I&lt;br /&gt;
| memory              = 56Mpts (mode/ch-dependent)&lt;br /&gt;
| display             = 8&amp;quot; 800x480, 160K colors&lt;br /&gt;
| connectivity        = USB host/device, ethernet, trigger out, pass/fail out&lt;br /&gt;
| features            = math: +, &amp;amp;mdash;, x, /, FFT, vertical sensitivity: 500µV/div - 10V/div&lt;br /&gt;
| website             = [http://www.rigolna.com/products/digital-oscilloscopes/ds2000/ds2072/ rigolna.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The [http://www.rigolna.com/products/digital-oscilloscopes/ds2000/ds2072/ Rigol DS2072] is a USB-based, 2-channel oscilloscope with an analog bandwidth of 70MHz and 2GS/s sampling rate.&lt;br /&gt;
&lt;br /&gt;
See [[Rigol DS2072/Info]] for more details (such as &amp;#039;&amp;#039;&amp;#039;lsusb -v&amp;#039;&amp;#039;&amp;#039; output) about the device.&lt;br /&gt;
&lt;br /&gt;
See [[Rigol DS2000 Series]] for information common to all devices in this series.&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Rigol_DS2072_front.jpg|&amp;lt;small&amp;gt;Device, front&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol_DS2072_back.jpg|&amp;lt;small&amp;gt;Device, back&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol_DS2072_left.jpg|&amp;lt;small&amp;gt;Connectors on left side&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol_DS2072_right.jpg|&amp;lt;small&amp;gt;Device, right side&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol_DS2072_waveform.jpg|&amp;lt;small&amp;gt;Device showing a waveform&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== More Info ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Supported]]&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Supported_hardware&amp;diff=8367</id>
		<title>Supported hardware</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Supported_hardware&amp;diff=8367"/>
		<updated>2014-01-05T22:45:52Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Oscilloscopes */ Refer to DS2000 series rather than DS2072, update DS1000 series bandwidth.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;sigrok is intended as a flexible, cross-platform, and &amp;#039;&amp;#039;&amp;#039;hardware-independent&amp;#039;&amp;#039;&amp;#039; software suite, i.e., it supports various devices from many different vendors.&lt;br /&gt;
&lt;br /&gt;
Here is a list of currently supported devices (various stages of completeness) and devices we plan to support in the near future.&lt;br /&gt;
&lt;br /&gt;
The lists are sorted by category (&amp;lt;span style=&amp;quot;background-color: lime&amp;quot;&amp;gt;supported&amp;lt;/span&amp;gt;: [[:Category:Supported|{{PAGESINCATEGORY:Supported|pages}}]], &amp;lt;span style=&amp;quot;background-color: orange&amp;quot;&amp;gt;in progress&amp;lt;/span&amp;gt;: [[:Category:In progress|{{PAGESINCATEGORY:In progress|pages}}]], &amp;lt;span style=&amp;quot;background-color: red&amp;quot;&amp;gt;planned&amp;lt;/span&amp;gt;: [[:Category:Planned|{{PAGESINCATEGORY:Planned|pages}}]]), and alphabetically within those categories.&lt;br /&gt;
&lt;br /&gt;
== Logic analyzers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:ARMFLY MINI LOGIC.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ARMFLY Mini-Logic]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigma2_2.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ASIX SIGMA]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology_usb_interface_v26.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Braintechnology USB Interface V2.x]] (8/16ch, 24/12MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology_usb_lps.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Braintechnology USB-LPS]] (8/16ch, 24/12MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Chronovu la8 front.png|link=ChronoVu LA8|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ChronoVu LA8]] (8ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Cwav_usbee_sx.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[CWAV USBee SX]] (8ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Buspirate_v3.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Dangerous Prototypes Buspirate]] (5ch, 1MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Eeelec xla esla100.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[EE Electronics ESLA100]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ikalogic_scanalogic2.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[IKALOGIC Scanalogic-2]] (4ch, 20MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ikalogic scanaplus mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[IKALOGIC ScanaPLUS]] (9ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Kingst kqs3506 la16100.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[KingST KQS3506-LA16100]] (16ch, 100/50/32/16MHz @ 3/6/9/16ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Lcsoft-miniboard-front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lcsoft Mini Board]] (8/16ch, 24/12MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:logic-shrimp-front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Logic Shrimp]] (4ch, 20MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mcu123 saleae logic clone.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MCU123 Saleae Logic clone]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Usbee_ax_clone_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MCU123 USBee AX Pro clone]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Openbench logic sniffer front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Openbench Logic Sniffer]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Robomotic buglogic3.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Robomotic BugLogic 3]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Robomotic_minilogic.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Robomotic MiniLogic]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Saleae Logic.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Saleae Logic]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Saleae_Logic16_bottom.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Saleae Logic16]] (16ch, 100/50/32/16MHz @ 3/6/9/16ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Wayengineer saleae16.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[WayEngineer Saleae16]] (16ch, 100/50/32/16MHz @ 3/6/9/16ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus Logic Cube.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ZEROPLUS Logic Cube LAP-C(16032)]] (16ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus_lap-16128u.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ZEROPLUS LAP-16128U]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Chronovu la16.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[ChronoVu LA16]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rockylogic_ant8.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[RockyLogic Ant8]] (8ch, 500MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:RockyLogic Ant18e.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[RockyLogic Ant18e]] (8ch, 1GHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sysclk lwla1034 mugshot.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Sysclk LWLA1034]] (34ch, 125MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Acute_pkla1216.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Acute PKLA-1216]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek 4032l mugshot.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek 4032L]] (32ch, 400MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ideofy_la_08.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Ideofy LA-08]] (8ch, 96/60/30MHz @ 2/4/8ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Intronix Logicport.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Intronix Logicport LA1034]] (34ch, 500MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Link Instruments LA-5580]] (80ch, 500MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Microchip_pickit2.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Microchip PICkit2]] (3ch, 1MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Minila parport.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MiniLA]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Minila_mockup.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MiniLA Mockup]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Noname_la16_mugshot.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Noname LA16]] (16ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sysclk lwla1016.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Sysclk LWLA1016]] (16ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sysclk lwla2034 mugshot.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Sysclk LWLA2034]] (34ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Techtools_digiview_dv1-100.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[TechTools DigiView DV1-100]] (18ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Xmos xtag2.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[XMOS XTAG-2]] (?ch, 50MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ZEROPLUS Logic Cube LAP-C(322000)]] (32ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zlg_la1032.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ZLG LA1032]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mixed-signal devices ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=105px heights=105px&amp;gt;&lt;br /&gt;
File:Armfly_ax_pro.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ARMFLY AX-Pro]]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; (8ch, 24MHz; 2ch analog, 24MSa/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Esla201a.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[EE Electronics ESLA201A]]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; (8ch, 24MHz; 2ch analog, 24MSa/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Xzl studio ax mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[XZL_Studio AX]]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; (8ch, 24MHz; 2ch analog, 24MSa/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:BitScope BS10.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[BitScope BS10]] (8ch, 40MHz; 2ch analog, 20MSa/s, ? BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Link Instruments MSO-19 front.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Link Instruments MSO-19]] (8ch, 200MHz; 1ch analog, 200MSa/s, 60MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Agilent_MSO7104A.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Agilent MSO7104A]] (16ch, ?; 4ch analog, 2GSa/s, 100MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digilent_analog_discovery.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Digilent Analog Discovery]] (16ch, 100MHz; 2ch analog, 100MSa/s, 5MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek_1008C.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek 1008C]] (8ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Meilhaus_mephisto_scope1.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Meilhaus MEphisto Scope1]] (16ch, 100kHz; 2ch analog, 1MSa/s, 500kHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Polabs_poscope_basic2.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PoLabs PoScope Basic2]] (16ch, 8MHz; 2ch analog, 200kSa/s, ? BW)&amp;lt;/small&amp;gt; &lt;br /&gt;
File:QA100.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[QuantAsylum QA100]] (12ch; 2ch analog)&amp;lt;/small&amp;gt; &lt;br /&gt;
File:Rigol_VS5202D.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Rigol VS5202D]] (16ch, 200MHz; 2ch analog)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[XZL_Studio DX]] (16ch, 24MHz; 2ch analog)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Only the logic analyzer functionality is supported so far, analog support is work in progress.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oscilloscopes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=100px heights=100px&amp;gt;&lt;br /&gt;
File:Agilent DSO1014A.png|link=Agilent DSO1014A|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent DSO1014A]] (4ch, 2GS/s, 100MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke_Scopemeter_199B.png|link=Fluke ScopeMeter 199B|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Fluke ScopeMeter 199B]] (2ch, 2.5GS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hameg hmo1524.png|link=Hameg HMO1524|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Hameg HMO1524]] (4ch, 2GS/s, 150MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hameg HMO2024.png|link=Hameg HMO2024|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Hameg HMO2024]] (4ch, 2GS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek DSO-2090.png|link=Hantek DSO-2090|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-2090]] (2ch, 100MS/s, 40MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol DS1052E.png|link=Rigol DS1000 Series|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Rigol DS1000 Series]] (2ch, 1GS/s, 50-150MHz BW, 16ch optional LA)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol-ds2072 mugshot.png|link=Rigol DS2000 Series|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Rigol DS2000 Series]] (2ch, 2GS/s, 70-200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Focussz_fosc21_mugshot.png|link=Focussz Fosc21|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Focussz Fosc21]] (2ch, 8kS/s, 3kHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek dso2250 mugshot.png|link=Hantek DSO-2250|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-2250]] (2ch, 250MS/s, 100MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek dso-5200a device front.png|link=Hantek DSO-5200A|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-5200A]] (2ch, 250MS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:OsciPrime.png|link=Nexus-Computing OsciPrime|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Nexus-Computing OsciPrime]] (2ch, ?MS/s, 3.3MHz-8MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Velleman PCSU1000.png|link=Velleman PCSU1000|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Velleman PCSU1000]] (2ch, 1GS/s, 50MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|link=Hantek DSO-1200|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-1200]] (2ch, 500MS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke scopemeter123.png|link=Fluke ScopeMeter 123|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Fluke ScopeMeter 123]] (2ch, 25MS/s, 20MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Picoscope 2203.png|link=Pico Technology PicoScope 2203|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 2203]] (40/20MS/s, 5MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:PicoScope_2205.png|link=Pico Technology PicoScope 2205|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 2205]] (200/100MS/s, 25MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Picoscope 3206.png|link=Pico Technology PicoScope 3206|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 3206]] (200/100MS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Picoscope 5203.png|link=Pico Technology PicoScope 5203|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 5203]] (1/0.5GS/s, 250MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Usbduxfast.png|link=Incite Technology USB-DUXfast|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Incite Technology USB-DUXfast]] (16ch, 3MHz, ? BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:UNI-T UTD2042C.png|link=UNI-T UTD2042C|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UTD2042C]] (2ch, 500MS/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft dso-220 usb.png|link=Voltcraft DSO-220|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DSO-220]] (2ch, 60MS/s, 20MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft DSO-3062C.png|link=Voltcraft DSO-3062C|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DSO-3062C]] (2ch, 1GS/s, 60MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Multimeters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|link=Agilent U1231A|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent U1231A]] (6000 counts, USB/Bluetooth)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Agilent U1232A.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent U1232A]] (6000 counts, USB/Bluetooth)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent U1233A]] (6000 counts, USB/Bluetooth)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[BBC Goertz Metrawatt M2110]] (30000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Bm_857_mugshot_500000.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Brymen BM857]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digitek_dt4000zc_device_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Digitek DT4000ZC]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke 187.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Fluke 187/189]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke 287.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Fluke 287/289]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gmc metrahit 14a logo.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Gossen Metrawatt Metrahit 14A]] (3100 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gossen Metrawatt Metrahit 16I small.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Gossen Metrawatt Metrahit 16I]] (3100 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gossen Metrawatt Metrahit 18S small.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Gossen Metrawatt Metrahit 18S]] (31000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:100px_Idm103n.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ISO-TECH IDM103N]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mastech mas345 device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MASTECH MAS345]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metex m4650cr mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Metex M-4650CR]] (20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Norma dm950.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Norma DM950]] (21000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce-pce-dm32.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-DM32]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metex_me-31.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[PeakTech 3410]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Peaktech 4370 device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[PeakTech 4370]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rs_22_168_mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[RadioShack 22-168]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rs_22-805_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[RadioShack 22-805]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:radioshack_22_812_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[RadioShack 22-812]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Siemens B1105 small.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Siemens B1105]] (310000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tecpel dmm8061.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Tecpel DMM-8061]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tp4000zc_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[TekPower TP4000ZC]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7745.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7745]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ut60e_-_front_-_alpha.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT60E]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni-t ut61b mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61B]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni-t ut61c mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61C]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni t ut61d device.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61D]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Old ver front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61E]] (22000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Va_va18b.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[V&amp;amp;A VA18B]] (6000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Va va40b mugshot.png|link=VA40B|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[V&amp;amp;A VA40B]] (6000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Victor 86c device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Victor 86C]] (4000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Victor 70C.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Victor 70C]] (4000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft_M-3650D_transparent.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-3650D]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m4650cr.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-4650CR]] (20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc820 device.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-820]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc830.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-830]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc840 device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-840]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Tenma 72-1016.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-1016]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7730.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7730]] (20000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7732.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7732]] (40000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7750.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7750]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-9380A.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-9380A]] (40000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m-3650cr.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-3650CR]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Appa 107.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[APPA 107]] (4000 / 20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digitek dt8000.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Digitek DT8000]] (8000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digitek dt80000.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Digitek DT80000]] (80000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Escort 179 device front.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Escort 179]] (10000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gossen metrahit 30m.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Gossen-Metrawatt METRAHIT 30M]] (1200000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:800px-Mastech m9803r device front.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MASTECH M9803R]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metrix mx53.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Metrix MX53]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metrix mx56c.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Metrix MX56C]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Protek 6500]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m3890dt usb.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-3890DT]] (4000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m4660a device front.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-4660A]] (20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc920.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-920]] (40000/4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc940.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-940]] (40000/4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LCR meters ==&lt;br /&gt;
&lt;br /&gt;
TODO.&lt;br /&gt;
&lt;br /&gt;
== Sound level meters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:CEM DT-8852.png|link=CEM DT-8852|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[CEM DT-8852]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Colead SL-5868P.png|link=Colead SL-5868P|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Colead SL-5868P]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Kecheng KC-330B.png|link=Kecheng KC-330B|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Kecheng KC-330B]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tondaj sl-814.png|link=Tondaj SL-814|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Tondaj SL-814]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft_DL-161S.png|link=Voltcraft DL-161S|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-161S]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (also: light-/thermo-/hygrometer; RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft_dl_160s.png|link=Voltcraft DL-160S|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-160S]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Thermometers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:rs55ii.png|link=APPA 55II|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[APPA 55II]] (2xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:EL-USB-2.png|link=Lascar Electronics EL-USB-2|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lascar Electronics EL-USB-2]] (1xtemp, 1xhum, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mic 98581.png|link=MIC 98581|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MIC 98581]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mic 98583.png|link=MIC 98583|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MIC 98583]] (1xtemp, 1xhum, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni-t ut325 front.png|link=UNI-T UT325|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT325]] (2xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft k204.png|link=Voltcraft K204|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft K204]] (4xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Elitech rc3.png|link=Elitech RC-3|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Elitech RC-3]] (1xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (1xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rding temper front.png|link=RDing TEMPer|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rding temper gold device front.png|link=RDing TEMPer Gold|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer Gold]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rding temper1 device front.png|link=RDing TEMPer1|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer1]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pcsensor_temper1k2.png|link=RDing TEMPer1K2|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer1K2]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft dl-120th.png|link=Voltcraft DL-120TH|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-120TH]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft dl-140th.png|link=Voltcraft DL-140TH|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-140TH]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hygrometers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:EL-USB-2.png|link=Lascar Electronics EL-USB-2|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lascar Electronics EL-USB-2]] (temp/humidity, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mic 98583.png|link=MIC 98583|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MIC 98583]] (temp/humidity, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (also: light-/soundlevelmeter; RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Silabs si7005usb dgl eb top.jpg|link=SiLabs Si7005USB-Dongle|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[SiLabs Si7005USB-Dongle]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anemometers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Mastech ms6252b.png|link=MASTECH MS6252B|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MASTECH MS6252B]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Light meters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Lutron YK-2005LX.png|link=Lutron YK-2005LX|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Lutron YK-2005LX]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energy meters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Actaris_a14c5_teleinfo.png|link=EDF Teleinfo|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[EDF Teleinfo]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DAQs ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Ni usb 6008.png|link=NI USB-6008|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[NI USB-6008]] (8/2 analog inputs/outputs, 12 digital I/Os)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dataloggers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:EL-USB-CO.png|link=Lascar Electronics EL-USB-CO|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lascar Electronics EL-USB-CO]] (carbon monoxide (CO) logger, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gsg_indoor_air_monitor.png|link=GSG Indoor Air Monitor|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[GSG Indoor Air Monitor]] (air quality monitor, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Maul_studio_i.png|link=MAUL studio i|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MAUL studio i]] (weighing scale, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft co-20.png|link=Voltcraft CO-20|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft CO-20]] (air quality monitor, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Function generators ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Hantek DDS-3X25 top.png|link=Hantek DDS-3X25|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek DDS-3X25]] (25MHz, PC-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Siglent sdg1010 device front 8116.png|link=Siglent SDG1010|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Siglent SDG1010]] (10MHz, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RF receivers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|link=Per Vices Noctar|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Per Vices Noctar]] (100kHz-4GHz, IQ modulator/demodulator, PCIe)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spectrum analyzers ==&lt;br /&gt;
&lt;br /&gt;
TODO.&lt;br /&gt;
&lt;br /&gt;
== Power supplies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Sigrok logo no text transparent 512.png|link=ATTEN_ATZ9711|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ATTEN ATZ9711]] (DC electronic load, 150W/0~30A/0~150V, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Atten PPS3203T-3S.png|link=Atten PPS3203T-3S|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Atten PPS3203T-3S]] (3ch, 2*0-32V, 1*0-6V at 0-3A, USB&amp;amp;RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Manson hcs3202.png|link=Manson HCS-3202|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Manson HCS-3202]] (1ch, 1-36V/0-10A, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:PS3005D front on.JPG|link=Velleman PS3005D|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Velleman PS3005D]] (1ch, 0-30V/0-5A, USB&amp;amp;RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GPIB interfaces ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Beiming_s82357.png|link=Beiming S82357|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Beiming S82357]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:ICS 488-USB.png|link=ICS 488-USB|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ICS 488-USB]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:GPIB-USB 82357B clone.png|link=GPIB-USB 82357B clone|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[GPIB-USB 82357B clone]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:NI GPIB-ENET.png|link=National Instruments GPIB-ENET|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[National Instruments GPIB-ENET]] (hardware-based, Ethernet)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:NI GPIB-USB-HS.png|link=National Instruments GPIB-USB-HS|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[National Instruments GPIB-USB-HS]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Prologix-usb.png|link=Prologix GPIB-USB|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Prologix GPIB-USB]] (firmware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Potential other candidates ==&lt;br /&gt;
&lt;br /&gt;
If you own any other logic analyzers, oscilloscopes, multimeters, dataloggers, ... and want to add support for them in sigrok (or donate/lend devices to developers), please let us know. We&amp;#039;re always happy to add more hardware support! Join the [https://lists.sourceforge.net/lists/listinfo/sigrok-devel mailing list] or ask on [irc://chat.freenode.net/sigrok IRC #sigrok] if you want to help out.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_DS2000_series&amp;diff=8366</id>
		<title>Rigol DS2000 series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_DS2000_series&amp;diff=8366"/>
		<updated>2014-01-05T22:44:23Z</updated>

		<summary type="html">&lt;p&gt;Martling: Created page with &amp;quot;{{Infobox oscilloscope | image               = 180px | name                = Rigol DS2000 Series | status              = supported | source_c...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox oscilloscope&lt;br /&gt;
| image               = [[File:Rigol-ds2072 mugshot.png|180px]]&lt;br /&gt;
| name                = Rigol DS2000 Series&lt;br /&gt;
| status              = supported&lt;br /&gt;
| source_code_dir     = rigol-ds&lt;br /&gt;
| channels            = 2&lt;br /&gt;
| samplerate          = 2GSa/s (1ch), 1GSa/s (2ch)&lt;br /&gt;
| bandwidth           = 70-200MHz (depending on model)&lt;br /&gt;
| vertical_resolution = 8bits&lt;br /&gt;
| triggers            = edge, pulse, runt, windows, nth edge, slope, video, pattern, delay, timeout, duration, setup/hold, RS232/UART, I²C, SPI, CAN, USB&lt;br /&gt;
| input_impedance     = 1MΩ‖16pF 300V RMS CAT I&lt;br /&gt;
| memory              = 56Mpts (mode/ch-dependent)&lt;br /&gt;
| display             = 8&amp;quot; 800x480, 160K colors&lt;br /&gt;
| connectivity        = USB host/device, ethernet (LXI), trigger out, pass/fail out&lt;br /&gt;
| features            = math: +, &amp;amp;mdash;, x, /, FFT, vertical sensitivity: 500µV/div - 10V/div&lt;br /&gt;
| website             = [http://www.rigolna.com/products/digital-oscilloscopes/ds2000/ rigolna.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The [http://www.rigolna.com/products/digital-oscilloscopes/ds2000/ Rigol DS2000 Series] are 2-channel oscilloscopes with an analog bandwidth of 70-200MHz and 2GS/s sampling rate.&lt;br /&gt;
&lt;br /&gt;
Except for small software differences all models in the series are identical.&lt;br /&gt;
&lt;br /&gt;
There exist two versions of the hardware, version 1 and version 2. Version 2 has a redesigned PCB which is prepared for additional modules, a signal generator and apparently a logic analyzer. Additionally version 2 hardware has the hardware fitted to switch the input impedance to 50 ohms. This is only accessible through SCPI commands, the option in the menu is disabled (as of firmware version 01.01.00.02).&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Model || Bandwidth&lt;br /&gt;
|-&lt;br /&gt;
|| [[Rigol DS2072 | DS2072]] || 70MHz&lt;br /&gt;
|-&lt;br /&gt;
|| DS2102 || 100MHz&lt;br /&gt;
|-&lt;br /&gt;
|| DS2202 || 200MHz&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The device uses [[USBTMC]] or LXI via its ethernet port for communication with a host PC. The protocol is based on SCPI commands.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.eevblog.com/forum/testgear/first-impressions-and-review-of-the-rigol-ds2072-ds2000-series-dso/ EEVblog forums: Review of the Rigol DS2072]&lt;br /&gt;
* [http://www.eevblog.com/2012/09/26/eevblog-360-rigol-ds2000-oscilloscope-teardown/ EEVblog: Teardown video of the Rigol DS2202]&lt;br /&gt;
* [http://www.flickr.com/photos/eevblog/sets/72157631618295437/ High resolution images of the innards of Rigol DS2202 from EEVblog]&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Supported]]&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Supported_hardware&amp;diff=8365</id>
		<title>Supported hardware</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Supported_hardware&amp;diff=8365"/>
		<updated>2014-01-05T22:19:23Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Oscilloscopes */  Link to Rigol DS1000 series instead of individual models.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;sigrok is intended as a flexible, cross-platform, and &amp;#039;&amp;#039;&amp;#039;hardware-independent&amp;#039;&amp;#039;&amp;#039; software suite, i.e., it supports various devices from many different vendors.&lt;br /&gt;
&lt;br /&gt;
Here is a list of currently supported devices (various stages of completeness) and devices we plan to support in the near future.&lt;br /&gt;
&lt;br /&gt;
The lists are sorted by category (&amp;lt;span style=&amp;quot;background-color: lime&amp;quot;&amp;gt;supported&amp;lt;/span&amp;gt;: [[:Category:Supported|{{PAGESINCATEGORY:Supported|pages}}]], &amp;lt;span style=&amp;quot;background-color: orange&amp;quot;&amp;gt;in progress&amp;lt;/span&amp;gt;: [[:Category:In progress|{{PAGESINCATEGORY:In progress|pages}}]], &amp;lt;span style=&amp;quot;background-color: red&amp;quot;&amp;gt;planned&amp;lt;/span&amp;gt;: [[:Category:Planned|{{PAGESINCATEGORY:Planned|pages}}]]), and alphabetically within those categories.&lt;br /&gt;
&lt;br /&gt;
== Logic analyzers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:ARMFLY MINI LOGIC.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ARMFLY Mini-Logic]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigma2_2.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ASIX SIGMA]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology_usb_interface_v26.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Braintechnology USB Interface V2.x]] (8/16ch, 24/12MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Braintechnology_usb_lps.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Braintechnology USB-LPS]] (8/16ch, 24/12MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Chronovu la8 front.png|link=ChronoVu LA8|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ChronoVu LA8]] (8ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Cwav_usbee_sx.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[CWAV USBee SX]] (8ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Buspirate_v3.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Dangerous Prototypes Buspirate]] (5ch, 1MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Eeelec xla esla100.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[EE Electronics ESLA100]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ikalogic_scanalogic2.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[IKALOGIC Scanalogic-2]] (4ch, 20MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ikalogic scanaplus mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[IKALOGIC ScanaPLUS]] (9ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Kingst kqs3506 la16100.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[KingST KQS3506-LA16100]] (16ch, 100/50/32/16MHz @ 3/6/9/16ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Lcsoft-miniboard-front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lcsoft Mini Board]] (8/16ch, 24/12MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:logic-shrimp-front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Logic Shrimp]] (4ch, 20MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mcu123 saleae logic clone.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MCU123 Saleae Logic clone]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Usbee_ax_clone_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MCU123 USBee AX Pro clone]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Openbench logic sniffer front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Openbench Logic Sniffer]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Robomotic buglogic3.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Robomotic BugLogic 3]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Robomotic_minilogic.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Robomotic MiniLogic]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Saleae Logic.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Saleae Logic]] (8ch, 24MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Saleae_Logic16_bottom.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Saleae Logic16]] (16ch, 100/50/32/16MHz @ 3/6/9/16ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Wayengineer saleae16.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[WayEngineer Saleae16]] (16ch, 100/50/32/16MHz @ 3/6/9/16ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus Logic Cube.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ZEROPLUS Logic Cube LAP-C(16032)]] (16ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zeroplus_lap-16128u.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ZEROPLUS LAP-16128U]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Chronovu la16.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[ChronoVu LA16]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rockylogic_ant8.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[RockyLogic Ant8]] (8ch, 500MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:RockyLogic Ant18e.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[RockyLogic Ant18e]] (8ch, 1GHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sysclk lwla1034 mugshot.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Sysclk LWLA1034]] (34ch, 125MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Acute_pkla1216.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Acute PKLA-1216]] (16ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek 4032l mugshot.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek 4032L]] (32ch, 400MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ideofy_la_08.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Ideofy LA-08]] (8ch, 96/60/30MHz @ 2/4/8ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Intronix Logicport.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Intronix Logicport LA1034]] (34ch, 500MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Link Instruments LA-5580]] (80ch, 500MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Microchip_pickit2.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Microchip PICkit2]] (3ch, 1MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Minila parport.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MiniLA]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Minila_mockup.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MiniLA Mockup]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Noname_la16_mugshot.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Noname LA16]] (16ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sysclk lwla1016.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Sysclk LWLA1016]] (16ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sysclk lwla2034 mugshot.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Sysclk LWLA2034]] (34ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Techtools_digiview_dv1-100.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[TechTools DigiView DV1-100]] (18ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Xmos xtag2.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[XMOS XTAG-2]] (?ch, 50MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ZEROPLUS Logic Cube LAP-C(322000)]] (32ch, 200MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Zlg_la1032.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ZLG LA1032]] (32ch, 100MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mixed-signal devices ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=105px heights=105px&amp;gt;&lt;br /&gt;
File:Armfly_ax_pro.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ARMFLY AX-Pro]]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; (8ch, 24MHz; 2ch analog, 24MSa/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Esla201a.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[EE Electronics ESLA201A]]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; (8ch, 24MHz; 2ch analog, 24MSa/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Xzl studio ax mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[XZL_Studio AX]]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; (8ch, 24MHz; 2ch analog, 24MSa/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:BitScope BS10.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[BitScope BS10]] (8ch, 40MHz; 2ch analog, 20MSa/s, ? BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Link Instruments MSO-19 front.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Link Instruments MSO-19]] (8ch, 200MHz; 1ch analog, 200MSa/s, 60MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Agilent_MSO7104A.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Agilent MSO7104A]] (16ch, ?; 4ch analog, 2GSa/s, 100MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digilent_analog_discovery.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Digilent Analog Discovery]] (16ch, 100MHz; 2ch analog, 100MSa/s, 5MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek_1008C.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek 1008C]] (8ch)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Meilhaus_mephisto_scope1.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Meilhaus MEphisto Scope1]] (16ch, 100kHz; 2ch analog, 1MSa/s, 500kHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Polabs_poscope_basic2.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PoLabs PoScope Basic2]] (16ch, 8MHz; 2ch analog, 200kSa/s, ? BW)&amp;lt;/small&amp;gt; &lt;br /&gt;
File:QA100.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[QuantAsylum QA100]] (12ch; 2ch analog)&amp;lt;/small&amp;gt; &lt;br /&gt;
File:Rigol_VS5202D.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Rigol VS5202D]] (16ch, 200MHz; 2ch analog)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[XZL_Studio DX]] (16ch, 24MHz; 2ch analog)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Only the logic analyzer functionality is supported so far, analog support is work in progress.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oscilloscopes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=100px heights=100px&amp;gt;&lt;br /&gt;
File:Agilent DSO1014A.png|link=Agilent DSO1014A|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent DSO1014A]] (4ch, 2GS/s, 100MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke_Scopemeter_199B.png|link=Fluke ScopeMeter 199B|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Fluke ScopeMeter 199B]] (2ch, 2.5GS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hameg hmo1524.png|link=Hameg HMO1524|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Hameg HMO1524]] (4ch, 2GS/s, 150MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hameg HMO2024.png|link=Hameg HMO2024|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Hameg HMO2024]] (4ch, 2GS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek DSO-2090.png|link=Hantek DSO-2090|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-2090]] (2ch, 100MS/s, 40MHz)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol DS1052E.png|link=Rigol DS1000 Series|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Rigol DS1000 Series]] (2ch, 1GS/s, 50MHz BW, 16ch optional LA)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rigol-ds2072 mugshot.png|link=Rigol DS2072|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Rigol DS2072]] (2ch, 2GS/s, 70MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Focussz_fosc21_mugshot.png|link=Focussz Fosc21|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Focussz Fosc21]] (2ch, 8kS/s, 3kHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek dso2250 mugshot.png|link=Hantek DSO-2250|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-2250]] (2ch, 250MS/s, 100MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Hantek dso-5200a device front.png|link=Hantek DSO-5200A|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-5200A]] (2ch, 250MS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:OsciPrime.png|link=Nexus-Computing OsciPrime|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Nexus-Computing OsciPrime]] (2ch, ?MS/s, 3.3MHz-8MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Velleman PCSU1000.png|link=Velleman PCSU1000|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Velleman PCSU1000]] (2ch, 1GS/s, 50MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|link=Hantek DSO-1200|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek DSO-1200]] (2ch, 500MS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke scopemeter123.png|link=Fluke ScopeMeter 123|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Fluke ScopeMeter 123]] (2ch, 25MS/s, 20MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Picoscope 2203.png|link=Pico Technology PicoScope 2203|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 2203]] (40/20MS/s, 5MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:PicoScope_2205.png|link=Pico Technology PicoScope 2205|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 2205]] (200/100MS/s, 25MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Picoscope 3206.png|link=Pico Technology PicoScope 3206|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 3206]] (200/100MS/s, 200MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Picoscope 5203.png|link=Pico Technology PicoScope 5203|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Pico Technology PicoScope 5203]] (1/0.5GS/s, 250MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Usbduxfast.png|link=Incite Technology USB-DUXfast|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Incite Technology USB-DUXfast]] (16ch, 3MHz, ? BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:UNI-T UTD2042C.png|link=UNI-T UTD2042C|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UTD2042C]] (2ch, 500MS/s, 40MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft dso-220 usb.png|link=Voltcraft DSO-220|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DSO-220]] (2ch, 60MS/s, 20MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft DSO-3062C.png|link=Voltcraft DSO-3062C|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DSO-3062C]] (2ch, 1GS/s, 60MHz BW)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Multimeters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|link=Agilent U1231A|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent U1231A]] (6000 counts, USB/Bluetooth)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Agilent U1232A.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent U1232A]] (6000 counts, USB/Bluetooth)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Agilent U1233A]] (6000 counts, USB/Bluetooth)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[BBC Goertz Metrawatt M2110]] (30000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Bm_857_mugshot_500000.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Brymen BM857]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digitek_dt4000zc_device_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Digitek DT4000ZC]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke 187.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Fluke 187/189]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Fluke 287.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Fluke 287/289]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gmc metrahit 14a logo.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Gossen Metrawatt Metrahit 14A]] (3100 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gossen Metrawatt Metrahit 16I small.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Gossen Metrawatt Metrahit 16I]] (3100 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gossen Metrawatt Metrahit 18S small.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Gossen Metrawatt Metrahit 18S]] (31000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:100px_Idm103n.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[ISO-TECH IDM103N]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mastech mas345 device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MASTECH MAS345]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metex m4650cr mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Metex M-4650CR]] (20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Norma dm950.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Norma DM950]] (21000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce-pce-dm32.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-DM32]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metex_me-31.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[PeakTech 3410]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Peaktech 4370 device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[PeakTech 4370]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rs_22_168_mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[RadioShack 22-168]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rs_22-805_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[RadioShack 22-805]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:radioshack_22_812_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[RadioShack 22-812]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Siemens B1105 small.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Siemens B1105]] (310000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tecpel dmm8061.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Tecpel DMM-8061]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tp4000zc_front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[TekPower TP4000ZC]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7745.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7745]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Ut60e_-_front_-_alpha.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT60E]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni-t ut61b mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61B]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni-t ut61c mugshot.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61C]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni t ut61d device.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61D]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Old ver front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT61E]] (22000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Va_va18b.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[V&amp;amp;A VA18B]] (6000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Va va40b mugshot.png|link=VA40B|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[V&amp;amp;A VA40B]] (6000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Victor 86c device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Victor 86C]] (4000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Victor 70C.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Victor 70C]] (4000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft_M-3650D_transparent.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-3650D]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m4650cr.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-4650CR]] (20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc820 device.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-820]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc830.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-830]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc840 device front.png|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-840]] (4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Tenma 72-1016.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-1016]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7730.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7730]] (20000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7732.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7732]] (40000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-7750.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-7750]] (6000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tenma 72-9380A.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Tenma 72-9380A]] (40000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m-3650cr.png|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-3650CR]] (2000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:Appa 107.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[APPA 107]] (4000 / 20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digitek dt8000.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Digitek DT8000]] (8000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Digitek dt80000.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Digitek DT80000]] (80000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Escort 179 device front.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Escort 179]] (10000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gossen metrahit 30m.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Gossen-Metrawatt METRAHIT 30M]] (1200000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:800px-Mastech m9803r device front.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MASTECH M9803R]] (4000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metrix mx53.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Metrix MX53]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Metrix mx56c.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Metrix MX56C]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Protek 6500]] (50000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m3890dt usb.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-3890DT]] (4000 counts, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft m4660a device front.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft M-4660A]] (20000 counts, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc920.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-920]] (40000/4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft vc940.png|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft VC-940]] (40000/4000 counts, RS232/USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LCR meters ==&lt;br /&gt;
&lt;br /&gt;
TODO.&lt;br /&gt;
&lt;br /&gt;
== Sound level meters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:CEM DT-8852.png|link=CEM DT-8852|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[CEM DT-8852]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Colead SL-5868P.png|link=Colead SL-5868P|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Colead SL-5868P]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Kecheng KC-330B.png|link=Kecheng KC-330B|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Kecheng KC-330B]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Tondaj sl-814.png|link=Tondaj SL-814|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Tondaj SL-814]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft_DL-161S.png|link=Voltcraft DL-161S|[[File:Nuvola Orange.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-161S]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (also: light-/thermo-/hygrometer; RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft_dl_160s.png|link=Voltcraft DL-160S|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-160S]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Thermometers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:rs55ii.png|link=APPA 55II|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[APPA 55II]] (2xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:EL-USB-2.png|link=Lascar Electronics EL-USB-2|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lascar Electronics EL-USB-2]] (1xtemp, 1xhum, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mic 98581.png|link=MIC 98581|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MIC 98581]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mic 98583.png|link=MIC 98583|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MIC 98583]] (1xtemp, 1xhum, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Uni-t ut325 front.png|link=UNI-T UT325|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[UNI-T UT325]] (2xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft k204.png|link=Voltcraft K204|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft K204]] (4xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Elitech rc3.png|link=Elitech RC-3|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Elitech RC-3]] (1xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (1xtemp, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rding temper front.png|link=RDing TEMPer|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rding temper gold device front.png|link=RDing TEMPer Gold|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer Gold]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Rding temper1 device front.png|link=RDing TEMPer1|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer1]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pcsensor_temper1k2.png|link=RDing TEMPer1K2|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[RDing TEMPer1K2]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft dl-120th.png|link=Voltcraft DL-120TH|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-120TH]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft dl-140th.png|link=Voltcraft DL-140TH|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft DL-140TH]] (1xtemp, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hygrometers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:EL-USB-2.png|link=Lascar Electronics EL-USB-2|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lascar Electronics EL-USB-2]] (temp/humidity, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Mic 98583.png|link=MIC 98583|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[MIC 98583]] (temp/humidity, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (also: light-/soundlevelmeter; RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Silabs si7005usb dgl eb top.jpg|link=SiLabs Si7005USB-Dongle|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[SiLabs Si7005USB-Dongle]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anemometers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Mastech ms6252b.png|link=MASTECH MS6252B|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MASTECH MS6252B]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Light meters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Lutron YK-2005LX.png|link=Lutron YK-2005LX|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Lutron YK-2005LX]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Pce_pce-222_front.png|link=PCE PCE-222|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[PCE PCE-222]] (RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Energy meters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Actaris_a14c5_teleinfo.png|link=EDF Teleinfo|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[EDF Teleinfo]] (USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DAQs ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Ni usb 6008.png|link=NI USB-6008|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[NI USB-6008]] (8/2 analog inputs/outputs, 12 digital I/Os)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dataloggers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:EL-USB-CO.png|link=Lascar Electronics EL-USB-CO|[[File:Nuvola OK.png|16px]] &amp;lt;small&amp;gt;[[Lascar Electronics EL-USB-CO]] (carbon monoxide (CO) logger, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Gsg_indoor_air_monitor.png|link=GSG Indoor Air Monitor|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[GSG Indoor Air Monitor]] (air quality monitor, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Maul_studio_i.png|link=MAUL studio i|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[MAUL studio i]] (weighing scale, RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Voltcraft co-20.png|link=Voltcraft CO-20|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Voltcraft CO-20]] (air quality monitor, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Function generators ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Hantek DDS-3X25 top.png|link=Hantek DDS-3X25|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Hantek DDS-3X25]] (25MHz, PC-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Siglent sdg1010 device front 8116.png|link=Siglent SDG1010|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Siglent SDG1010]] (10MHz, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RF receivers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Sigrok_logo_no_text_transparent_512.png|link=Per Vices Noctar|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Per Vices Noctar]] (100kHz-4GHz, IQ modulator/demodulator, PCIe)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spectrum analyzers ==&lt;br /&gt;
&lt;br /&gt;
TODO.&lt;br /&gt;
&lt;br /&gt;
== Power supplies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Sigrok logo no text transparent 512.png|link=ATTEN_ATZ9711|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ATTEN ATZ9711]] (DC electronic load, 150W/0~30A/0~150V, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Atten PPS3203T-3S.png|link=Atten PPS3203T-3S|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Atten PPS3203T-3S]] (3ch, 2*0-32V, 1*0-6V at 0-3A, USB&amp;amp;RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Manson hcs3202.png|link=Manson HCS-3202|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Manson HCS-3202]] (1ch, 1-36V/0-10A, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:PS3005D front on.JPG|link=Velleman PS3005D|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Velleman PS3005D]] (1ch, 0-30V/0-5A, USB&amp;amp;RS232)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GPIB interfaces ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot;&amp;gt;&lt;br /&gt;
File:Beiming_s82357.png|link=Beiming S82357|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Beiming S82357]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:ICS 488-USB.png|link=ICS 488-USB|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[ICS 488-USB]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:GPIB-USB 82357B clone.png|link=GPIB-USB 82357B clone|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[GPIB-USB 82357B clone]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:NI GPIB-ENET.png|link=National Instruments GPIB-ENET|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[National Instruments GPIB-ENET]] (hardware-based, Ethernet)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:NI GPIB-USB-HS.png|link=National Instruments GPIB-USB-HS|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[National Instruments GPIB-USB-HS]] (hardware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
File:Prologix-usb.png|link=Prologix GPIB-USB|[[File:Nuvola Red.png|16px]] &amp;lt;small&amp;gt;[[Prologix GPIB-USB]] (firmware-based, USB)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Potential other candidates ==&lt;br /&gt;
&lt;br /&gt;
If you own any other logic analyzers, oscilloscopes, multimeters, dataloggers, ... and want to add support for them in sigrok (or donate/lend devices to developers), please let us know. We&amp;#039;re always happy to add more hardware support! Join the [https://lists.sourceforge.net/lists/listinfo/sigrok-devel mailing list] or ask on [irc://chat.freenode.net/sigrok IRC #sigrok] if you want to help out.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_DS1000_series&amp;diff=8364</id>
		<title>Rigol DS1000 series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_DS1000_series&amp;diff=8364"/>
		<updated>2014-01-05T22:16:01Z</updated>

		<summary type="html">&lt;p&gt;Martling: Created page with &amp;quot;{{Infobox oscilloscope | image               = 180px | name                = Rigol DS1000 series | status              = supported | source_code_dir...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox oscilloscope&lt;br /&gt;
| image               = [[File:Rigol DS1052E.png|180px]]&lt;br /&gt;
| name                = Rigol DS1000 series&lt;br /&gt;
| status              = supported&lt;br /&gt;
| source_code_dir     = rigol-ds&lt;br /&gt;
| channels            = 2 analog (all models), 16 digital (D models only)&lt;br /&gt;
| samplerate          = 1GSa/s (1ch), 500MSa/s (2ch)&lt;br /&gt;
| samplerate_equiv    = 10GSa/s&lt;br /&gt;
| bandwidth           = 50-150MHz (depending on model)&lt;br /&gt;
| vertical_resolution = 8bits&lt;br /&gt;
| triggers            = edge, pulse width, slope, video, pattern, continuous time, alternate&lt;br /&gt;
| input_impedance     = 1MΩ‖15pF 300V RMS CAT I&lt;br /&gt;
| memory              = 1Mpts (mode/ch-dependent)&lt;br /&gt;
| display             = 5.7&amp;quot; QVGA (320x240), 64K colors&lt;br /&gt;
| connectivity        = USB host/device, RS232, pass/fail out&lt;br /&gt;
| features            = math: + / &amp;amp;mdash; / x / FFT, vertical sensitivity: 2mV/div - 10V/div&lt;br /&gt;
| website             = [http://www.rigolna.com/products/digital-oscilloscopes/ rigolna.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;Rigol DS1000 series&amp;#039;&amp;#039;&amp;#039; are 50-150MHz, 1GSa/s, 2-channel digital storage oscilloscopes. The &amp;#039;D&amp;#039; suffixed models also include a 16 channel logic analyzer.&lt;br /&gt;
&lt;br /&gt;
The bandwidth limitations appear to be software-imposed, and devices can be &amp;quot;upgraded&amp;quot; to a model number with a higher bandwidth by changing a firmware setting using undocumented commands in the protocol.&lt;br /&gt;
&lt;br /&gt;
All variants currently appear to have the same USB VID and PID (1ab1:0588).&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Model || Bandwidth || Analog Channels || Digital Channels&lt;br /&gt;
|-&lt;br /&gt;
|| [[Rigol DS1052E | DS1052E]] || 50MHz || 2 || None&lt;br /&gt;
|-&lt;br /&gt;
|| [[Rigol DS1102E | DS1102E]] || 100MHz || 2 || None&lt;br /&gt;
|-&lt;br /&gt;
|| DS1152E || 150MHz || 2 || None&lt;br /&gt;
|-&lt;br /&gt;
|| DS1052D || 50MHz || 2 || 16&lt;br /&gt;
|-&lt;br /&gt;
|| DS1102D || 100MHz || 2 || 16&lt;br /&gt;
|-&lt;br /&gt;
|| DS1152D || 150MHz || 2 || 16&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
All devices in the series support both [[USBTMC]] and RS232 connections. The same SCPI protocol is used over both connections. The serial parameters are 8n1, with baud rate from 9600 to 38400 (configurable in Utility/IO Setting menu on the scope).&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.rigolna.com/pdfs/Programming_Guides/DS1000E_Programming_Guide.pdf DS1000E Programming Guide] (link dead)&lt;br /&gt;
** [http://www.dgkelectronics.com/storage/code/RigolScope/DS1000E_Programming_Guide.pdf Mirror]&lt;br /&gt;
* [http://rigol.codenaschen.de/index.php/Main_Page Rigol Homebrew wiki] (lots of useful info)&lt;br /&gt;
** [http://codenaschen.de/tichyblog/ Developer blog], [http://rigol.codenaschen.de/index.php/General_Information/Software software/protocol/command info]&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Supported]]&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=30C3&amp;diff=7942</id>
		<title>30C3</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=30C3&amp;diff=7942"/>
		<updated>2013-12-31T09:42:49Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Malloc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&amp;#039;re getting together at the annual CCC conference, [https://events.ccc.de/congress/2013/wiki/Main_Page 30C3], for a [https://events.ccc.de/congress/2013/wiki/Assembly:Sigrok sigrok hackathon]. In addition to the usual &amp;quot;whatever we feel like hacking on&amp;quot;, we also have several architectural decision to make, and doing this in person is a lot easier. If you want to be part of the conversation and decision-making process, show up!&lt;br /&gt;
&lt;br /&gt;
In addition to the 4 days of the congress, we will also get together the day before (26 December 2013) for a hopefully less crowded and more productive day. Venue is not yet decided.&lt;br /&gt;
&lt;br /&gt;
What&amp;#039;s decided here is what goes.&lt;br /&gt;
&lt;br /&gt;
== New sigrok file format ==&lt;br /&gt;
[[New sigrok file format]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
* Streamability&lt;br /&gt;
* Add arbitrary data (GUID, length, data)&lt;br /&gt;
* Store annotations&lt;br /&gt;
* Index at the end&lt;br /&gt;
* Use generic GUIDs where possible (colors, probe names, etc)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Improved Configuration Enumeration==&lt;br /&gt;
[[Improved Configuration Enumeration]]&lt;br /&gt;
&lt;br /&gt;
== Filtering/rearranging probes ==&lt;br /&gt;
&amp;lt;s&amp;gt;To sr_filter_probes() or not, that is the question.&lt;br /&gt;
* frontends have probe location info, they pass it to sr_filter_probes() after all&lt;br /&gt;
* very nice for output modules: avoids having to map probe location to bit on &amp;#039;&amp;#039;all&amp;#039;&amp;#039; the modules&lt;br /&gt;
* waste of time for PV, which will soon do its own reformatting of logic data anyway&lt;br /&gt;
* SRD currently needs it, but has a probe mapping mechanism already, so can be adapted&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
* make sr_filter_probes() SR_PRIV&lt;br /&gt;
* sigrok-cli should not call it anymore&lt;br /&gt;
* every output module should call it for itself, since some may be fine without rearranged probes -- will never be called by (future) output module wrappers.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Driver scan ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
Rethinking how we enumerate and assign drivers to hardware&lt;br /&gt;
* Pre-scan for all resources such as serial ports &amp;amp; USB devices&lt;br /&gt;
* How users/frontends resolve ambiguity&lt;br /&gt;
* How to handle &amp;quot;gateway&amp;quot; devices such as GPIB adapters, networked servers with instruments, etc.&lt;br /&gt;
* Device tree model?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will define a device tree model.&lt;br /&gt;
&lt;br /&gt;
For scan operations, a worker thread will be started for each driver.&lt;br /&gt;
&lt;br /&gt;
Drivers will create device instances and submit them to the device tree (protected by a single mutex).&lt;br /&gt;
&lt;br /&gt;
Thus, scanning will be parallelized.&lt;br /&gt;
&lt;br /&gt;
A pre-scan will perform common enumeration operations to avoid repeated/conflicting work in each driver.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* automated unit tests on commit (SR and SRD)&lt;br /&gt;
* VMs for *BSD, linux dists on kiutl for automated build/unit tests&lt;br /&gt;
* VMs with connected hardware (bert and uwe)?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Yes. Yes we can.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Malloc ==&lt;br /&gt;
&amp;lt;s&amp;gt;Decide whether to continue trying to handle malloc failures in libsigrok. These code paths are never tested, would never be executed anyway due to the realities of virtual memory systems [1], and even if we wanted to we could never do everything right because of the extensive use of glib [2]. So what is the use case we are actually targeting here?&lt;br /&gt;
&lt;br /&gt;
Current glib usage is [[Glib|here]].&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will:&lt;br /&gt;
* &amp;lt;b&amp;gt;use g_malloc for structs, no check required.&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;only use g_try_malloc for allocations which are/could be 1MB or over.&amp;lt;/b&amp;gt;&lt;br /&gt;
All g_try_malloc checks in the entire codebase (all projects) will be changed to conform to these rules.&lt;br /&gt;
* libsigrok&lt;br /&gt;
* libsigrokdecode&lt;br /&gt;
* sigrok-cli&lt;br /&gt;
This will not need to be done before the 0.3.0 release, but is a soft blocker for 0.4.0.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progress ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
An API for allowing frontends to signal &amp;quot;operation in progress&amp;quot; better to the user.&lt;br /&gt;
* Various operations in libsigrok drivers can take a long time. It would be good if frontends could meaningfully handle those (instead of just blocking the UI).&lt;br /&gt;
* There are multiple types of &amp;quot;in progress&amp;quot; states that can happen and that libsigrok should be able to report to frontends:&lt;br /&gt;
** Type 1: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I do know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways a frontend can signal this condition to the user (e.g. show a progressbar from 0%-100%), the exact method to show this is up to the frontend.&lt;br /&gt;
** Type 2: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I don&amp;#039;t know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways for a frontend to signal this condition to the user too (e.g. show a spinning wheel, which only signals &amp;quot;in progress&amp;quot; but no information when the operation will be finished).&lt;br /&gt;
* Which operations can take a longer amount of time to complete?&lt;br /&gt;
** Scan&lt;br /&gt;
*** Example: Various devices have to upload a firmware first before the scan can work, e.g. [[Saleae Logic]] and others. This upload can take a while.&lt;br /&gt;
** Set/get/switch config options&lt;br /&gt;
*** Example: The [[Saleae Logic16]] has to upload a new firmware and/or bitstream when certain config options (number of channels, voltage thresholds, ...) are changed. This is not only at scan time, it can happen at any point when the user changes the options in the frontend.&lt;br /&gt;
** Acquire data from a device&lt;br /&gt;
*** Example: The [[ChronoVu LA8]] will always fill its internal 8MByte buffer with LA samples, and then transfer them over USB. This operation typically takes more than 30 seconds time. This is a &amp;quot;type 1&amp;quot; case, since libsigrok / the driver knows how many samples still have to be transferred until done.&lt;br /&gt;
** Send data to a device&lt;br /&gt;
*** For some write/send operations (e.g. uploading a waveform to a function generator) can also take a lot of time, depending on the device.&lt;br /&gt;
** Probably pretty much any other operation too, depending on driver and hardware.&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We are going to address this by changing the thread model of libsigrok.&lt;br /&gt;
&lt;br /&gt;
Each sdi will have its own worker thread.&lt;br /&gt;
&lt;br /&gt;
Frontend-initiated operations will be queued for the worker thread to execute.&lt;br /&gt;
&lt;br /&gt;
The frontend gets a handle when it submits each operation. The handle can be used to check or wait for an operation&amp;#039;s completion.&lt;br /&gt;
&lt;br /&gt;
At any time, the frontend can request what an sdi is doing, it will get back a data structure with a text description and where applicable a fraction representing progress so far.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
RLE data as the internal currency for sigrok Logic.&lt;br /&gt;
* File Storage: Logic can be most efficiently stored in a planar format, with RLE+Huffman/Golomb Compression.&lt;br /&gt;
* Many devices generate RLE. Those that don&amp;#039;t are not extreme speed.&lt;br /&gt;
* RLE is an efficient format for GUIs rendering logic. Much faster than traversing 100s of uncompressed values.&lt;br /&gt;
* libsigrokdecode needs to move to edge-transition processing for performance reasons.&lt;br /&gt;
** Ergo... can we keep it RLE end to end?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will allow different encodings of logic data in the feed.&lt;br /&gt;
&lt;br /&gt;
We will define a good compromise RLE implementation as one of the options.&lt;br /&gt;
&lt;br /&gt;
Others may be added later.&lt;br /&gt;
&lt;br /&gt;
Clients will make queries for data via libsigrok, which will implement them as necessary.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Pre-release TODO:&lt;br /&gt;
* basic functionality check on every driver against real hardware (if available)&lt;br /&gt;
* public/private API:&lt;br /&gt;
** go through headers&lt;br /&gt;
** go through .so symbol table&lt;br /&gt;
** doxygen&lt;br /&gt;
* NEWS file&lt;br /&gt;
* on release branch: downgrade libusb req to 1.0.9&lt;br /&gt;
* libserialport runtime version checking mechanism&lt;br /&gt;
* replace poll() usage in libserialport with select()&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jenkins ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* libsigrok build (fix copy artifact plugin)&lt;br /&gt;
* doxygen build for sp/sr/srd&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes.&amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=30C3&amp;diff=7914</id>
		<title>30C3</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=30C3&amp;diff=7914"/>
		<updated>2013-12-30T01:08:25Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* New sigrok file format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&amp;#039;re getting together at the annual CCC conference, [https://events.ccc.de/congress/2013/wiki/Main_Page 30C3], for a [https://events.ccc.de/congress/2013/wiki/Assembly:Sigrok sigrok hackathon]. In addition to the usual &amp;quot;whatever we feel like hacking on&amp;quot;, we also have several architectural decision to make, and doing this in person is a lot easier. If you want to be part of the conversation and decision-making process, show up!&lt;br /&gt;
&lt;br /&gt;
In addition to the 4 days of the congress, we will also get together the day before (26 December 2013) for a hopefully less crowded and more productive day. Venue is not yet decided.&lt;br /&gt;
&lt;br /&gt;
What&amp;#039;s decided here is what goes.&lt;br /&gt;
&lt;br /&gt;
== New sigrok file format ==&lt;br /&gt;
[[New sigrok file format]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
* Streamability&lt;br /&gt;
* Add arbitrary data (GUID, length, data)&lt;br /&gt;
* Store annotations&lt;br /&gt;
* Index at the end&lt;br /&gt;
* Use generic GUIDs where possible (colors, probe names, etc)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Improved Configuration Enumeration==&lt;br /&gt;
[[Improved Configuration Enumeration]]&lt;br /&gt;
&lt;br /&gt;
== Filtering/rearranging probes ==&lt;br /&gt;
&amp;lt;s&amp;gt;To sr_filter_probes() or not, that is the question.&lt;br /&gt;
* frontends have probe location info, they pass it to sr_filter_probes() after all&lt;br /&gt;
* very nice for output modules: avoids having to map probe location to bit on &amp;#039;&amp;#039;all&amp;#039;&amp;#039; the modules&lt;br /&gt;
* waste of time for PV, which will soon do its own reformatting of logic data anyway&lt;br /&gt;
* SRD currently needs it, but has a probe mapping mechanism already, so can be adapted&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
* make sr_filter_probes() SR_PRIV&lt;br /&gt;
* sigrok-cli should not call it anymore&lt;br /&gt;
* every output module should call it for itself, since some may be fine without rearranged probes -- will never be called by (future) output module wrappers.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Driver scan ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
Rethinking how we enumerate and assign drivers to hardware&lt;br /&gt;
* Pre-scan for all resources such as serial ports &amp;amp; USB devices&lt;br /&gt;
* How users/frontends resolve ambiguity&lt;br /&gt;
* How to handle &amp;quot;gateway&amp;quot; devices such as GPIB adapters, networked servers with instruments, etc.&lt;br /&gt;
* Device tree model?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will define a device tree model.&lt;br /&gt;
&lt;br /&gt;
For scan operations, a worker thread will be started for each driver.&lt;br /&gt;
&lt;br /&gt;
Drivers will create device instances and submit them to the device tree (protected by a single mutex).&lt;br /&gt;
&lt;br /&gt;
Thus, scanning will be parallelized.&lt;br /&gt;
&lt;br /&gt;
A pre-scan will perform common enumeration operations to avoid repeated/conflicting work in each driver.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* automated unit tests on commit (SR and SRD)&lt;br /&gt;
* VMs for *BSD, linux dists on kiutl for automated build/unit tests&lt;br /&gt;
* VMs with connected hardware (bert and uwe)?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Yes. Yes we can.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Malloc ==&lt;br /&gt;
&amp;lt;s&amp;gt;Decide whether to continue trying to handle malloc failures in libsigrok. These code paths are never tested, would never be executed anyway due to the realities of virtual memory systems [1], and even if we wanted to we could never do everything right because of the extensive use of glib [2]. So what is the use case we are actually targeting here?&lt;br /&gt;
&lt;br /&gt;
Current glib usage is [[Glib|here]].&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will:&lt;br /&gt;
* &amp;lt;b&amp;gt;never check g_malloc returns for structs&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;only check g_try_malloc returns for allocations which are/could be 1MB or over.&amp;lt;/b&amp;gt;&lt;br /&gt;
All g_malloc checks in the entire codebase (all projects) will be changed to conform to these rules.&lt;br /&gt;
* libsigrok&lt;br /&gt;
* libsigrokdecode&lt;br /&gt;
* sigrok-cli&lt;br /&gt;
This will not need to be done before the 0.3.0 release, but is a soft blocker for 0.4.0.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progress ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
An API for allowing frontends to signal &amp;quot;operation in progress&amp;quot; better to the user.&lt;br /&gt;
* Various operations in libsigrok drivers can take a long time. It would be good if frontends could meaningfully handle those (instead of just blocking the UI).&lt;br /&gt;
* There are multiple types of &amp;quot;in progress&amp;quot; states that can happen and that libsigrok should be able to report to frontends:&lt;br /&gt;
** Type 1: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I do know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways a frontend can signal this condition to the user (e.g. show a progressbar from 0%-100%), the exact method to show this is up to the frontend.&lt;br /&gt;
** Type 2: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I don&amp;#039;t know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways for a frontend to signal this condition to the user too (e.g. show a spinning wheel, which only signals &amp;quot;in progress&amp;quot; but no information when the operation will be finished).&lt;br /&gt;
* Which operations can take a longer amount of time to complete?&lt;br /&gt;
** Scan&lt;br /&gt;
*** Example: Various devices have to upload a firmware first before the scan can work, e.g. [[Saleae Logic]] and others. This upload can take a while.&lt;br /&gt;
** Set/get/switch config options&lt;br /&gt;
*** Example: The [[Saleae Logic16]] has to upload a new firmware and/or bitstream when certain config options (number of channels, voltage thresholds, ...) are changed. This is not only at scan time, it can happen at any point when the user changes the options in the frontend.&lt;br /&gt;
** Acquire data from a device&lt;br /&gt;
*** Example: The [[ChronoVu LA8]] will always fill its internal 8MByte buffer with LA samples, and then transfer them over USB. This operation typically takes more than 30 seconds time. This is a &amp;quot;type 1&amp;quot; case, since libsigrok / the driver knows how many samples still have to be transferred until done.&lt;br /&gt;
** Send data to a device&lt;br /&gt;
*** For some write/send operations (e.g. uploading a waveform to a function generator) can also take a lot of time, depending on the device.&lt;br /&gt;
** Probably pretty much any other operation too, depending on driver and hardware.&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We are going to address this by changing the thread model of libsigrok.&lt;br /&gt;
&lt;br /&gt;
Each sdi will have its own worker thread.&lt;br /&gt;
&lt;br /&gt;
Frontend-initiated operations will be queued for the worker thread to execute.&lt;br /&gt;
&lt;br /&gt;
The frontend gets a handle when it submits each operation. The handle can be used to check or wait for an operation&amp;#039;s completion.&lt;br /&gt;
&lt;br /&gt;
At any time, the frontend can request what an sdi is doing, it will get back a data structure with a text description and where applicable a fraction representing progress so far.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
RLE data as the internal currency for sigrok Logic.&lt;br /&gt;
* File Storage: Logic can be most efficiently stored in a planar format, with RLE+Huffman/Golomb Compression.&lt;br /&gt;
* Many devices generate RLE. Those that don&amp;#039;t are not extreme speed.&lt;br /&gt;
* RLE is an efficient format for GUIs rendering logic. Much faster than traversing 100s of uncompressed values.&lt;br /&gt;
* libsigrokdecode needs to move to edge-transition processing for performance reasons.&lt;br /&gt;
** Ergo... can we keep it RLE end to end?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will allow different encodings of logic data in the feed.&lt;br /&gt;
&lt;br /&gt;
We will define a good compromise RLE implementation as one of the options.&lt;br /&gt;
&lt;br /&gt;
Others may be added later.&lt;br /&gt;
&lt;br /&gt;
Clients will make queries for data via libsigrok, which will implement them as necessary.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Pre-release TODO:&lt;br /&gt;
* basic functionality check on every driver against real hardware (if available)&lt;br /&gt;
* public/private API:&lt;br /&gt;
** go through headers&lt;br /&gt;
** go through .so symbol table&lt;br /&gt;
** doxygen&lt;br /&gt;
* NEWS file&lt;br /&gt;
* on release branch: downgrade libusb req to 1.0.9&lt;br /&gt;
* libserialport runtime version checking mechanism&lt;br /&gt;
* replace poll() usage in libserialport with select()&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jenkins ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* libsigrok build (fix copy artifact plugin)&lt;br /&gt;
* doxygen build for sp/sr/srd&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes.&amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=30C3&amp;diff=7913</id>
		<title>30C3</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=30C3&amp;diff=7913"/>
		<updated>2013-12-30T01:08:09Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* New sigrok file format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&amp;#039;re getting together at the annual CCC conference, [https://events.ccc.de/congress/2013/wiki/Main_Page 30C3], for a [https://events.ccc.de/congress/2013/wiki/Assembly:Sigrok sigrok hackathon]. In addition to the usual &amp;quot;whatever we feel like hacking on&amp;quot;, we also have several architectural decision to make, and doing this in person is a lot easier. If you want to be part of the conversation and decision-making process, show up!&lt;br /&gt;
&lt;br /&gt;
In addition to the 4 days of the congress, we will also get together the day before (26 December 2013) for a hopefully less crowded and more productive day. Venue is not yet decided.&lt;br /&gt;
&lt;br /&gt;
What&amp;#039;s decided here is what goes.&lt;br /&gt;
&lt;br /&gt;
== New sigrok file format ==&lt;br /&gt;
[[New sigrok file format]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
- Streamability&lt;br /&gt;
- Add arbitrary data (GUID, length, data)&lt;br /&gt;
- Store annotations&lt;br /&gt;
- Index at the end&lt;br /&gt;
- Use generic GUIDs where possible (colors, probe names, etc)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Improved Configuration Enumeration==&lt;br /&gt;
[[Improved Configuration Enumeration]]&lt;br /&gt;
&lt;br /&gt;
== Filtering/rearranging probes ==&lt;br /&gt;
&amp;lt;s&amp;gt;To sr_filter_probes() or not, that is the question.&lt;br /&gt;
* frontends have probe location info, they pass it to sr_filter_probes() after all&lt;br /&gt;
* very nice for output modules: avoids having to map probe location to bit on &amp;#039;&amp;#039;all&amp;#039;&amp;#039; the modules&lt;br /&gt;
* waste of time for PV, which will soon do its own reformatting of logic data anyway&lt;br /&gt;
* SRD currently needs it, but has a probe mapping mechanism already, so can be adapted&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
* make sr_filter_probes() SR_PRIV&lt;br /&gt;
* sigrok-cli should not call it anymore&lt;br /&gt;
* every output module should call it for itself, since some may be fine without rearranged probes -- will never be called by (future) output module wrappers.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Driver scan ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
Rethinking how we enumerate and assign drivers to hardware&lt;br /&gt;
* Pre-scan for all resources such as serial ports &amp;amp; USB devices&lt;br /&gt;
* How users/frontends resolve ambiguity&lt;br /&gt;
* How to handle &amp;quot;gateway&amp;quot; devices such as GPIB adapters, networked servers with instruments, etc.&lt;br /&gt;
* Device tree model?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will define a device tree model.&lt;br /&gt;
&lt;br /&gt;
For scan operations, a worker thread will be started for each driver.&lt;br /&gt;
&lt;br /&gt;
Drivers will create device instances and submit them to the device tree (protected by a single mutex).&lt;br /&gt;
&lt;br /&gt;
Thus, scanning will be parallelized.&lt;br /&gt;
&lt;br /&gt;
A pre-scan will perform common enumeration operations to avoid repeated/conflicting work in each driver.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* automated unit tests on commit (SR and SRD)&lt;br /&gt;
* VMs for *BSD, linux dists on kiutl for automated build/unit tests&lt;br /&gt;
* VMs with connected hardware (bert and uwe)?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Yes. Yes we can.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Malloc ==&lt;br /&gt;
&amp;lt;s&amp;gt;Decide whether to continue trying to handle malloc failures in libsigrok. These code paths are never tested, would never be executed anyway due to the realities of virtual memory systems [1], and even if we wanted to we could never do everything right because of the extensive use of glib [2]. So what is the use case we are actually targeting here?&lt;br /&gt;
&lt;br /&gt;
Current glib usage is [[Glib|here]].&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will:&lt;br /&gt;
* &amp;lt;b&amp;gt;never check g_malloc returns for structs&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;only check g_try_malloc returns for allocations which are/could be 1MB or over.&amp;lt;/b&amp;gt;&lt;br /&gt;
All g_malloc checks in the entire codebase (all projects) will be changed to conform to these rules.&lt;br /&gt;
* libsigrok&lt;br /&gt;
* libsigrokdecode&lt;br /&gt;
* sigrok-cli&lt;br /&gt;
This will not need to be done before the 0.3.0 release, but is a soft blocker for 0.4.0.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progress ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
An API for allowing frontends to signal &amp;quot;operation in progress&amp;quot; better to the user.&lt;br /&gt;
* Various operations in libsigrok drivers can take a long time. It would be good if frontends could meaningfully handle those (instead of just blocking the UI).&lt;br /&gt;
* There are multiple types of &amp;quot;in progress&amp;quot; states that can happen and that libsigrok should be able to report to frontends:&lt;br /&gt;
** Type 1: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I do know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways a frontend can signal this condition to the user (e.g. show a progressbar from 0%-100%), the exact method to show this is up to the frontend.&lt;br /&gt;
** Type 2: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I don&amp;#039;t know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways for a frontend to signal this condition to the user too (e.g. show a spinning wheel, which only signals &amp;quot;in progress&amp;quot; but no information when the operation will be finished).&lt;br /&gt;
* Which operations can take a longer amount of time to complete?&lt;br /&gt;
** Scan&lt;br /&gt;
*** Example: Various devices have to upload a firmware first before the scan can work, e.g. [[Saleae Logic]] and others. This upload can take a while.&lt;br /&gt;
** Set/get/switch config options&lt;br /&gt;
*** Example: The [[Saleae Logic16]] has to upload a new firmware and/or bitstream when certain config options (number of channels, voltage thresholds, ...) are changed. This is not only at scan time, it can happen at any point when the user changes the options in the frontend.&lt;br /&gt;
** Acquire data from a device&lt;br /&gt;
*** Example: The [[ChronoVu LA8]] will always fill its internal 8MByte buffer with LA samples, and then transfer them over USB. This operation typically takes more than 30 seconds time. This is a &amp;quot;type 1&amp;quot; case, since libsigrok / the driver knows how many samples still have to be transferred until done.&lt;br /&gt;
** Send data to a device&lt;br /&gt;
*** For some write/send operations (e.g. uploading a waveform to a function generator) can also take a lot of time, depending on the device.&lt;br /&gt;
** Probably pretty much any other operation too, depending on driver and hardware.&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We are going to address this by changing the thread model of libsigrok.&lt;br /&gt;
&lt;br /&gt;
Each sdi will have its own worker thread.&lt;br /&gt;
&lt;br /&gt;
Frontend-initiated operations will be queued for the worker thread to execute.&lt;br /&gt;
&lt;br /&gt;
The frontend gets a handle when it submits each operation. The handle can be used to check or wait for an operation&amp;#039;s completion.&lt;br /&gt;
&lt;br /&gt;
At any time, the frontend can request what an sdi is doing, it will get back a data structure with a text description and where applicable a fraction representing progress so far.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
RLE data as the internal currency for sigrok Logic.&lt;br /&gt;
* File Storage: Logic can be most efficiently stored in a planar format, with RLE+Huffman/Golomb Compression.&lt;br /&gt;
* Many devices generate RLE. Those that don&amp;#039;t are not extreme speed.&lt;br /&gt;
* RLE is an efficient format for GUIs rendering logic. Much faster than traversing 100s of uncompressed values.&lt;br /&gt;
* libsigrokdecode needs to move to edge-transition processing for performance reasons.&lt;br /&gt;
** Ergo... can we keep it RLE end to end?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will allow different encodings of logic data in the feed.&lt;br /&gt;
&lt;br /&gt;
We will define a good compromise RLE implementation as one of the options.&lt;br /&gt;
&lt;br /&gt;
Others may be added later.&lt;br /&gt;
&lt;br /&gt;
Clients will make queries for data via libsigrok, which will implement them as necessary.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Pre-release TODO:&lt;br /&gt;
* basic functionality check on every driver against real hardware (if available)&lt;br /&gt;
* public/private API:&lt;br /&gt;
** go through headers&lt;br /&gt;
** go through .so symbol table&lt;br /&gt;
** doxygen&lt;br /&gt;
* NEWS file&lt;br /&gt;
* on release branch: downgrade libusb req to 1.0.9&lt;br /&gt;
* libserialport runtime version checking mechanism&lt;br /&gt;
* replace poll() usage in libserialport with select()&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jenkins ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* libsigrok build (fix copy artifact plugin)&lt;br /&gt;
* doxygen build for sp/sr/srd&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes.&amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=30C3&amp;diff=7912</id>
		<title>30C3</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=30C3&amp;diff=7912"/>
		<updated>2013-12-29T23:58:10Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Compression */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&amp;#039;re getting together at the annual CCC conference, [https://events.ccc.de/congress/2013/wiki/Main_Page 30C3], for a [https://events.ccc.de/congress/2013/wiki/Assembly:Sigrok sigrok hackathon]. In addition to the usual &amp;quot;whatever we feel like hacking on&amp;quot;, we also have several architectural decision to make, and doing this in person is a lot easier. If you want to be part of the conversation and decision-making process, show up!&lt;br /&gt;
&lt;br /&gt;
In addition to the 4 days of the congress, we will also get together the day before (26 December 2013) for a hopefully less crowded and more productive day. Venue is not yet decided.&lt;br /&gt;
&lt;br /&gt;
What&amp;#039;s decided here is what goes.&lt;br /&gt;
&lt;br /&gt;
== New sigrok file format ==&lt;br /&gt;
[[New sigrok file format]]&lt;br /&gt;
&lt;br /&gt;
== Improved Configuration Enumeration==&lt;br /&gt;
[[Improved Configuration Enumeration]]&lt;br /&gt;
&lt;br /&gt;
== Filtering/rearranging probes ==&lt;br /&gt;
&amp;lt;s&amp;gt;To sr_filter_probes() or not, that is the question.&lt;br /&gt;
* frontends have probe location info, they pass it to sr_filter_probes() after all&lt;br /&gt;
* very nice for output modules: avoids having to map probe location to bit on &amp;#039;&amp;#039;all&amp;#039;&amp;#039; the modules&lt;br /&gt;
* waste of time for PV, which will soon do its own reformatting of logic data anyway&lt;br /&gt;
* SRD currently needs it, but has a probe mapping mechanism already, so can be adapted&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
* make sr_filter_probes() SR_PRIV&lt;br /&gt;
* sigrok-cli should not call it anymore&lt;br /&gt;
* every output module should call it for itself, since some may be fine without rearranged probes -- will never be called by (future) output module wrappers.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Driver scan ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
Rethinking how we enumerate and assign drivers to hardware&lt;br /&gt;
* Pre-scan for all resources such as serial ports &amp;amp; USB devices&lt;br /&gt;
* How users/frontends resolve ambiguity&lt;br /&gt;
* How to handle &amp;quot;gateway&amp;quot; devices such as GPIB adapters, networked servers with instruments, etc.&lt;br /&gt;
* Device tree model?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will define a device tree model.&lt;br /&gt;
&lt;br /&gt;
For scan operations, a worker thread will be started for each driver.&lt;br /&gt;
&lt;br /&gt;
Drivers will create device instances and submit them to the device tree (protected by a single mutex).&lt;br /&gt;
&lt;br /&gt;
Thus, scanning will be parallelized.&lt;br /&gt;
&lt;br /&gt;
A pre-scan will perform common enumeration operations to avoid repeated/conflicting work in each driver.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* automated unit tests on commit (SR and SRD)&lt;br /&gt;
* VMs for *BSD, linux dists on kiutl for automated build/unit tests&lt;br /&gt;
* VMs with connected hardware (bert and uwe)?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Yes. Yes we can.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Malloc ==&lt;br /&gt;
&amp;lt;s&amp;gt;Decide whether to continue trying to handle malloc failures in libsigrok. These code paths are never tested, would never be executed anyway due to the realities of virtual memory systems [1], and even if we wanted to we could never do everything right because of the extensive use of glib [2]. So what is the use case we are actually targeting here?&lt;br /&gt;
&lt;br /&gt;
Current glib usage is [[Glib|here]].&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will:&lt;br /&gt;
* &amp;lt;b&amp;gt;never check g_malloc returns for structs&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;only check g_try_malloc returns for allocations which are/could be 1MB or over.&amp;lt;/b&amp;gt;&lt;br /&gt;
All g_malloc checks in the entire codebase (all projects) will be changed to conform to these rules.&lt;br /&gt;
* libsigrok&lt;br /&gt;
* libsigrokdecode&lt;br /&gt;
* sigrok-cli&lt;br /&gt;
This will not need to be done before the 0.3.0 release, but is a soft blocker for 0.4.0.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progress ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
An API for allowing frontends to signal &amp;quot;operation in progress&amp;quot; better to the user.&lt;br /&gt;
* Various operations in libsigrok drivers can take a long time. It would be good if frontends could meaningfully handle those (instead of just blocking the UI).&lt;br /&gt;
* There are multiple types of &amp;quot;in progress&amp;quot; states that can happen and that libsigrok should be able to report to frontends:&lt;br /&gt;
** Type 1: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I do know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways a frontend can signal this condition to the user (e.g. show a progressbar from 0%-100%), the exact method to show this is up to the frontend.&lt;br /&gt;
** Type 2: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I don&amp;#039;t know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways for a frontend to signal this condition to the user too (e.g. show a spinning wheel, which only signals &amp;quot;in progress&amp;quot; but no information when the operation will be finished).&lt;br /&gt;
* Which operations can take a longer amount of time to complete?&lt;br /&gt;
** Scan&lt;br /&gt;
*** Example: Various devices have to upload a firmware first before the scan can work, e.g. [[Saleae Logic]] and others. This upload can take a while.&lt;br /&gt;
** Set/get/switch config options&lt;br /&gt;
*** Example: The [[Saleae Logic16]] has to upload a new firmware and/or bitstream when certain config options (number of channels, voltage thresholds, ...) are changed. This is not only at scan time, it can happen at any point when the user changes the options in the frontend.&lt;br /&gt;
** Acquire data from a device&lt;br /&gt;
*** Example: The [[ChronoVu LA8]] will always fill its internal 8MByte buffer with LA samples, and then transfer them over USB. This operation typically takes more than 30 seconds time. This is a &amp;quot;type 1&amp;quot; case, since libsigrok / the driver knows how many samples still have to be transferred until done.&lt;br /&gt;
** Send data to a device&lt;br /&gt;
*** For some write/send operations (e.g. uploading a waveform to a function generator) can also take a lot of time, depending on the device.&lt;br /&gt;
** Probably pretty much any other operation too, depending on driver and hardware.&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We are going to address this by changing the thread model of libsigrok.&lt;br /&gt;
&lt;br /&gt;
Each sdi will have its own worker thread.&lt;br /&gt;
&lt;br /&gt;
Frontend-initiated operations will be queued for the worker thread to execute.&lt;br /&gt;
&lt;br /&gt;
The frontend gets a handle when it submits each operation. The handle can be used to check or wait for an operation&amp;#039;s completion.&lt;br /&gt;
&lt;br /&gt;
At any time, the frontend can request what an sdi is doing, it will get back a data structure with a text description and where applicable a fraction representing progress so far.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
RLE data as the internal currency for sigrok Logic.&lt;br /&gt;
* File Storage: Logic can be most efficiently stored in a planar format, with RLE+Huffman/Golomb Compression.&lt;br /&gt;
* Many devices generate RLE. Those that don&amp;#039;t are not extreme speed.&lt;br /&gt;
* RLE is an efficient format for GUIs rendering logic. Much faster than traversing 100s of uncompressed values.&lt;br /&gt;
* libsigrokdecode needs to move to edge-transition processing for performance reasons.&lt;br /&gt;
** Ergo... can we keep it RLE end to end?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will allow different encodings of logic data in the feed.&lt;br /&gt;
&lt;br /&gt;
We will define a good compromise RLE implementation as one of the options.&lt;br /&gt;
&lt;br /&gt;
Others may be added later.&lt;br /&gt;
&lt;br /&gt;
Clients will make queries for data via libsigrok, which will implement them as necessary.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Pre-release TODO:&lt;br /&gt;
* basic functionality check on every driver against real hardware (if available)&lt;br /&gt;
* public/private API:&lt;br /&gt;
** go through headers&lt;br /&gt;
** go through .so symbol table&lt;br /&gt;
** doxygen&lt;br /&gt;
* NEWS file&lt;br /&gt;
* on release branch: downgrade libusb req to 1.0.9&lt;br /&gt;
* libserialport runtime version checking mechanism&lt;br /&gt;
* replace poll() usage in libserialport with select()&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jenkins ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* libsigrok build (fix copy artifact plugin)&lt;br /&gt;
* doxygen build for sp/sr/srd&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes.&amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=30C3&amp;diff=7911</id>
		<title>30C3</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=30C3&amp;diff=7911"/>
		<updated>2013-12-29T22:31:30Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Driver scan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&amp;#039;re getting together at the annual CCC conference, [https://events.ccc.de/congress/2013/wiki/Main_Page 30C3], for a [https://events.ccc.de/congress/2013/wiki/Assembly:Sigrok sigrok hackathon]. In addition to the usual &amp;quot;whatever we feel like hacking on&amp;quot;, we also have several architectural decision to make, and doing this in person is a lot easier. If you want to be part of the conversation and decision-making process, show up!&lt;br /&gt;
&lt;br /&gt;
In addition to the 4 days of the congress, we will also get together the day before (26 December 2013) for a hopefully less crowded and more productive day. Venue is not yet decided.&lt;br /&gt;
&lt;br /&gt;
What&amp;#039;s decided here is what goes.&lt;br /&gt;
&lt;br /&gt;
== New sigrok file format ==&lt;br /&gt;
[[New sigrok file format]]&lt;br /&gt;
&lt;br /&gt;
== Improved Configuration Enumeration==&lt;br /&gt;
[[Improved Configuration Enumeration]]&lt;br /&gt;
&lt;br /&gt;
== Filtering/rearranging probes ==&lt;br /&gt;
&amp;lt;s&amp;gt;To sr_filter_probes() or not, that is the question.&lt;br /&gt;
* frontends have probe location info, they pass it to sr_filter_probes() after all&lt;br /&gt;
* very nice for output modules: avoids having to map probe location to bit on &amp;#039;&amp;#039;all&amp;#039;&amp;#039; the modules&lt;br /&gt;
* waste of time for PV, which will soon do its own reformatting of logic data anyway&lt;br /&gt;
* SRD currently needs it, but has a probe mapping mechanism already, so can be adapted&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
* make sr_filter_probes() SR_PRIV&lt;br /&gt;
* sigrok-cli should not call it anymore&lt;br /&gt;
* every output module should call it for itself, since some may be fine without rearranged probes -- will never be called by (future) output module wrappers.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Driver scan ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
Rethinking how we enumerate and assign drivers to hardware&lt;br /&gt;
* Pre-scan for all resources such as serial ports &amp;amp; USB devices&lt;br /&gt;
* How users/frontends resolve ambiguity&lt;br /&gt;
* How to handle &amp;quot;gateway&amp;quot; devices such as GPIB adapters, networked servers with instruments, etc.&lt;br /&gt;
* Device tree model?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will define a device tree model.&lt;br /&gt;
&lt;br /&gt;
For scan operations, a worker thread will be started for each driver.&lt;br /&gt;
&lt;br /&gt;
Drivers will create device instances and submit them to the device tree (protected by a single mutex).&lt;br /&gt;
&lt;br /&gt;
Thus, scanning will be parallelized.&lt;br /&gt;
&lt;br /&gt;
A pre-scan will perform common enumeration operations to avoid repeated/conflicting work in each driver.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* automated unit tests on commit (SR and SRD)&lt;br /&gt;
* VMs for *BSD, linux dists on kiutl for automated build/unit tests&lt;br /&gt;
* VMs with connected hardware (bert and uwe)?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Yes. Yes we can.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Malloc ==&lt;br /&gt;
&amp;lt;s&amp;gt;Decide whether to continue trying to handle malloc failures in libsigrok. These code paths are never tested, would never be executed anyway due to the realities of virtual memory systems [1], and even if we wanted to we could never do everything right because of the extensive use of glib [2]. So what is the use case we are actually targeting here?&lt;br /&gt;
&lt;br /&gt;
Current glib usage is [[Glib|here]].&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will:&lt;br /&gt;
* &amp;lt;b&amp;gt;never check g_malloc returns for structs&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;only check g_try_malloc returns for allocations which are/could be 1MB or over.&amp;lt;/b&amp;gt;&lt;br /&gt;
All g_malloc checks in the entire codebase (all projects) will be changed to conform to these rules.&lt;br /&gt;
* libsigrok&lt;br /&gt;
* libsigrokdecode&lt;br /&gt;
* sigrok-cli&lt;br /&gt;
This will not need to be done before the 0.3.0 release, but is a soft blocker for 0.4.0.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progress ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
An API for allowing frontends to signal &amp;quot;operation in progress&amp;quot; better to the user.&lt;br /&gt;
* Various operations in libsigrok drivers can take a long time. It would be good if frontends could meaningfully handle those (instead of just blocking the UI).&lt;br /&gt;
* There are multiple types of &amp;quot;in progress&amp;quot; states that can happen and that libsigrok should be able to report to frontends:&lt;br /&gt;
** Type 1: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I do know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways a frontend can signal this condition to the user (e.g. show a progressbar from 0%-100%), the exact method to show this is up to the frontend.&lt;br /&gt;
** Type 2: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I don&amp;#039;t know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways for a frontend to signal this condition to the user too (e.g. show a spinning wheel, which only signals &amp;quot;in progress&amp;quot; but no information when the operation will be finished).&lt;br /&gt;
* Which operations can take a longer amount of time to complete?&lt;br /&gt;
** Scan&lt;br /&gt;
*** Example: Various devices have to upload a firmware first before the scan can work, e.g. [[Saleae Logic]] and others. This upload can take a while.&lt;br /&gt;
** Set/get/switch config options&lt;br /&gt;
*** Example: The [[Saleae Logic16]] has to upload a new firmware and/or bitstream when certain config options (number of channels, voltage thresholds, ...) are changed. This is not only at scan time, it can happen at any point when the user changes the options in the frontend.&lt;br /&gt;
** Acquire data from a device&lt;br /&gt;
*** Example: The [[ChronoVu LA8]] will always fill its internal 8MByte buffer with LA samples, and then transfer them over USB. This operation typically takes more than 30 seconds time. This is a &amp;quot;type 1&amp;quot; case, since libsigrok / the driver knows how many samples still have to be transferred until done.&lt;br /&gt;
** Send data to a device&lt;br /&gt;
*** For some write/send operations (e.g. uploading a waveform to a function generator) can also take a lot of time, depending on the device.&lt;br /&gt;
** Probably pretty much any other operation too, depending on driver and hardware.&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We are going to address this by changing the thread model of libsigrok.&lt;br /&gt;
&lt;br /&gt;
Each sdi will have its own worker thread.&lt;br /&gt;
&lt;br /&gt;
Frontend-initiated operations will be queued for the worker thread to execute.&lt;br /&gt;
&lt;br /&gt;
The frontend gets a handle when it submits each operation. The handle can be used to check or wait for an operation&amp;#039;s completion.&lt;br /&gt;
&lt;br /&gt;
At any time, the frontend can request what an sdi is doing, it will get back a data structure with a text description and where applicable a fraction representing progress so far.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
RLE data as the internal currency for sigrok Logic.&lt;br /&gt;
* File Storage: Logic can be most efficiently stored in a planar format, with RLE+Huffman/Golomb Compression.&lt;br /&gt;
* Many devices generate RLE. Those that don&amp;#039;t are not extreme speed.&lt;br /&gt;
* RLE is an efficient format for GUIs rendering logic. Much faster than traversing 100s of uncompressed values.&lt;br /&gt;
* libsigrokdecode needs to move to edge-transition processing for performance reasons.&lt;br /&gt;
** Ergo... can we keep it RLE end to end?&lt;br /&gt;
&lt;br /&gt;
====== Notes ======&lt;br /&gt;
&lt;br /&gt;
# Linux/glibc malloc() fails only when it runs out of address space; you&amp;#039;ll get OOM killed long before malloc() fails.&lt;br /&gt;
# Although glib offers g_try_malloc() which returns NULL on failure, all glib functions that allocate memory internally use g_malloc(), which calls abort() on failure. This is not considered a glib bug and will never be fixed. In many cases it couldn&amp;#039;t even be fixed, without fundamental changes to the glib API, which lacks any mechanisms to signal malloc failure except for the simple g_try_malloc() case.&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Pre-release TODO:&lt;br /&gt;
* basic functionality check on every driver against real hardware (if available)&lt;br /&gt;
* public/private API:&lt;br /&gt;
** go through headers&lt;br /&gt;
** go through .so symbol table&lt;br /&gt;
** doxygen&lt;br /&gt;
* NEWS file&lt;br /&gt;
* on release branch: downgrade libusb req to 1.0.9&lt;br /&gt;
* libserialport runtime version checking mechanism&lt;br /&gt;
* replace poll() usage in libserialport with select()&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jenkins ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* libsigrok build (fix copy artifact plugin)&lt;br /&gt;
* doxygen build for sp/sr/srd&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes.&amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=30C3&amp;diff=7910</id>
		<title>30C3</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=30C3&amp;diff=7910"/>
		<updated>2013-12-29T22:30:28Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Driver scan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&amp;#039;re getting together at the annual CCC conference, [https://events.ccc.de/congress/2013/wiki/Main_Page 30C3], for a [https://events.ccc.de/congress/2013/wiki/Assembly:Sigrok sigrok hackathon]. In addition to the usual &amp;quot;whatever we feel like hacking on&amp;quot;, we also have several architectural decision to make, and doing this in person is a lot easier. If you want to be part of the conversation and decision-making process, show up!&lt;br /&gt;
&lt;br /&gt;
In addition to the 4 days of the congress, we will also get together the day before (26 December 2013) for a hopefully less crowded and more productive day. Venue is not yet decided.&lt;br /&gt;
&lt;br /&gt;
What&amp;#039;s decided here is what goes.&lt;br /&gt;
&lt;br /&gt;
== New sigrok file format ==&lt;br /&gt;
[[New sigrok file format]]&lt;br /&gt;
&lt;br /&gt;
== Improved Configuration Enumeration==&lt;br /&gt;
[[Improved Configuration Enumeration]]&lt;br /&gt;
&lt;br /&gt;
== Filtering/rearranging probes ==&lt;br /&gt;
&amp;lt;s&amp;gt;To sr_filter_probes() or not, that is the question.&lt;br /&gt;
* frontends have probe location info, they pass it to sr_filter_probes() after all&lt;br /&gt;
* very nice for output modules: avoids having to map probe location to bit on &amp;#039;&amp;#039;all&amp;#039;&amp;#039; the modules&lt;br /&gt;
* waste of time for PV, which will soon do its own reformatting of logic data anyway&lt;br /&gt;
* SRD currently needs it, but has a probe mapping mechanism already, so can be adapted&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
* make sr_filter_probes() SR_PRIV&lt;br /&gt;
* sigrok-cli should not call it anymore&lt;br /&gt;
* every output module should call it for itself, since some may be fine without rearranged probes -- will never be called by (future) output module wrappers.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Driver scan ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
Rethinking how we enumerate and assign drivers to hardware&lt;br /&gt;
* Pre-scan for all resources such as serial ports &amp;amp; USB devices&lt;br /&gt;
* How users/frontends resolve ambiguity&lt;br /&gt;
* How to handle &amp;quot;gateway&amp;quot; devices such as GPIB adapters, networked servers with instruments, etc.&lt;br /&gt;
* Device tree model?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will define a device tree model.&lt;br /&gt;
For scan operations, a worker thread will be started for each driver.&lt;br /&gt;
Drivers will create device instances and submit them to the device tree (protected by a single mutex).&lt;br /&gt;
Thus, scanning will be parallelized.&lt;br /&gt;
A pre-scan will perform common enumeration operations to avoid repeated/conflicting work in each driver.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* automated unit tests on commit (SR and SRD)&lt;br /&gt;
* VMs for *BSD, linux dists on kiutl for automated build/unit tests&lt;br /&gt;
* VMs with connected hardware (bert and uwe)?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Yes. Yes we can.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Malloc ==&lt;br /&gt;
&amp;lt;s&amp;gt;Decide whether to continue trying to handle malloc failures in libsigrok. These code paths are never tested, would never be executed anyway due to the realities of virtual memory systems [1], and even if we wanted to we could never do everything right because of the extensive use of glib [2]. So what is the use case we are actually targeting here?&lt;br /&gt;
&lt;br /&gt;
Current glib usage is [[Glib|here]].&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will:&lt;br /&gt;
* &amp;lt;b&amp;gt;never check g_malloc returns for structs&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;only check g_try_malloc returns for allocations which are/could be 1MB or over.&amp;lt;/b&amp;gt;&lt;br /&gt;
All g_malloc checks in the entire codebase (all projects) will be changed to conform to these rules.&lt;br /&gt;
* libsigrok&lt;br /&gt;
* libsigrokdecode&lt;br /&gt;
* sigrok-cli&lt;br /&gt;
This will not need to be done before the 0.3.0 release, but is a soft blocker for 0.4.0.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progress ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
An API for allowing frontends to signal &amp;quot;operation in progress&amp;quot; better to the user.&lt;br /&gt;
* Various operations in libsigrok drivers can take a long time. It would be good if frontends could meaningfully handle those (instead of just blocking the UI).&lt;br /&gt;
* There are multiple types of &amp;quot;in progress&amp;quot; states that can happen and that libsigrok should be able to report to frontends:&lt;br /&gt;
** Type 1: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I do know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways a frontend can signal this condition to the user (e.g. show a progressbar from 0%-100%), the exact method to show this is up to the frontend.&lt;br /&gt;
** Type 2: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I don&amp;#039;t know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways for a frontend to signal this condition to the user too (e.g. show a spinning wheel, which only signals &amp;quot;in progress&amp;quot; but no information when the operation will be finished).&lt;br /&gt;
* Which operations can take a longer amount of time to complete?&lt;br /&gt;
** Scan&lt;br /&gt;
*** Example: Various devices have to upload a firmware first before the scan can work, e.g. [[Saleae Logic]] and others. This upload can take a while.&lt;br /&gt;
** Set/get/switch config options&lt;br /&gt;
*** Example: The [[Saleae Logic16]] has to upload a new firmware and/or bitstream when certain config options (number of channels, voltage thresholds, ...) are changed. This is not only at scan time, it can happen at any point when the user changes the options in the frontend.&lt;br /&gt;
** Acquire data from a device&lt;br /&gt;
*** Example: The [[ChronoVu LA8]] will always fill its internal 8MByte buffer with LA samples, and then transfer them over USB. This operation typically takes more than 30 seconds time. This is a &amp;quot;type 1&amp;quot; case, since libsigrok / the driver knows how many samples still have to be transferred until done.&lt;br /&gt;
** Send data to a device&lt;br /&gt;
*** For some write/send operations (e.g. uploading a waveform to a function generator) can also take a lot of time, depending on the device.&lt;br /&gt;
** Probably pretty much any other operation too, depending on driver and hardware.&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We are going to address this by changing the thread model of libsigrok.&lt;br /&gt;
&lt;br /&gt;
Each sdi will have its own worker thread.&lt;br /&gt;
&lt;br /&gt;
Frontend-initiated operations will be queued for the worker thread to execute.&lt;br /&gt;
&lt;br /&gt;
The frontend gets a handle when it submits each operation. The handle can be used to check or wait for an operation&amp;#039;s completion.&lt;br /&gt;
&lt;br /&gt;
At any time, the frontend can request what an sdi is doing, it will get back a data structure with a text description and where applicable a fraction representing progress so far.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
RLE data as the internal currency for sigrok Logic.&lt;br /&gt;
* File Storage: Logic can be most efficiently stored in a planar format, with RLE+Huffman/Golomb Compression.&lt;br /&gt;
* Many devices generate RLE. Those that don&amp;#039;t are not extreme speed.&lt;br /&gt;
* RLE is an efficient format for GUIs rendering logic. Much faster than traversing 100s of uncompressed values.&lt;br /&gt;
* libsigrokdecode needs to move to edge-transition processing for performance reasons.&lt;br /&gt;
** Ergo... can we keep it RLE end to end?&lt;br /&gt;
&lt;br /&gt;
====== Notes ======&lt;br /&gt;
&lt;br /&gt;
# Linux/glibc malloc() fails only when it runs out of address space; you&amp;#039;ll get OOM killed long before malloc() fails.&lt;br /&gt;
# Although glib offers g_try_malloc() which returns NULL on failure, all glib functions that allocate memory internally use g_malloc(), which calls abort() on failure. This is not considered a glib bug and will never be fixed. In many cases it couldn&amp;#039;t even be fixed, without fundamental changes to the glib API, which lacks any mechanisms to signal malloc failure except for the simple g_try_malloc() case.&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Pre-release TODO:&lt;br /&gt;
* basic functionality check on every driver against real hardware (if available)&lt;br /&gt;
* public/private API:&lt;br /&gt;
** go through headers&lt;br /&gt;
** go through .so symbol table&lt;br /&gt;
** doxygen&lt;br /&gt;
* NEWS file&lt;br /&gt;
* on release branch: downgrade libusb req to 1.0.9&lt;br /&gt;
* libserialport runtime version checking mechanism&lt;br /&gt;
* replace poll() usage in libserialport with select()&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jenkins ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* libsigrok build (fix copy artifact plugin)&lt;br /&gt;
* doxygen build for sp/sr/srd&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes.&amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=30C3&amp;diff=7906</id>
		<title>30C3</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=30C3&amp;diff=7906"/>
		<updated>2013-12-29T22:06:24Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Progress */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&amp;#039;re getting together at the annual CCC conference, [https://events.ccc.de/congress/2013/wiki/Main_Page 30C3], for a [https://events.ccc.de/congress/2013/wiki/Assembly:Sigrok sigrok hackathon]. In addition to the usual &amp;quot;whatever we feel like hacking on&amp;quot;, we also have several architectural decision to make, and doing this in person is a lot easier. If you want to be part of the conversation and decision-making process, show up!&lt;br /&gt;
&lt;br /&gt;
In addition to the 4 days of the congress, we will also get together the day before (26 December 2013) for a hopefully less crowded and more productive day. Venue is not yet decided.&lt;br /&gt;
&lt;br /&gt;
What&amp;#039;s decided here is what goes.&lt;br /&gt;
&lt;br /&gt;
== New sigrok file format ==&lt;br /&gt;
[[New sigrok file format]]&lt;br /&gt;
&lt;br /&gt;
== Improved Configuration Enumeration==&lt;br /&gt;
[[Improved Configuration Enumeration]]&lt;br /&gt;
&lt;br /&gt;
== Filtering/rearranging probes ==&lt;br /&gt;
&amp;lt;s&amp;gt;To sr_filter_probes() or not, that is the question.&lt;br /&gt;
* frontends have probe location info, they pass it to sr_filter_probes() after all&lt;br /&gt;
* very nice for output modules: avoids having to map probe location to bit on &amp;#039;&amp;#039;all&amp;#039;&amp;#039; the modules&lt;br /&gt;
* waste of time for PV, which will soon do its own reformatting of logic data anyway&lt;br /&gt;
* SRD currently needs it, but has a probe mapping mechanism already, so can be adapted&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
* make sr_filter_probes() SR_PRIV&lt;br /&gt;
* sigrok-cli should not call it anymore&lt;br /&gt;
* every output module should call it for itself, since some may be fine without rearranged probes -- will never be called by (future) output module wrappers.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Driver scan ==&lt;br /&gt;
Rethinking how we enumerate and assign drivers to hardware&lt;br /&gt;
* Pre-scan for all resources such as serial ports &amp;amp; USB devices&lt;br /&gt;
* How users/frontends resolve ambiguity&lt;br /&gt;
* How to handle &amp;quot;gateway&amp;quot; devices such as GPIB adapters, networked servers with instruments, etc.&lt;br /&gt;
* Device tree model?&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* automated unit tests on commit (SR and SRD)&lt;br /&gt;
* VMs for *BSD, linux dists on kiutl for automated build/unit tests&lt;br /&gt;
* VMs with connected hardware (bert and uwe)?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Yes. Yes we can.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Malloc ==&lt;br /&gt;
&amp;lt;s&amp;gt;Decide whether to continue trying to handle malloc failures in libsigrok. These code paths are never tested, would never be executed anyway due to the realities of virtual memory systems [1], and even if we wanted to we could never do everything right because of the extensive use of glib [2]. So what is the use case we are actually targeting here?&lt;br /&gt;
&lt;br /&gt;
Current glib usage is [[Glib|here]].&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will:&lt;br /&gt;
* &amp;lt;b&amp;gt;never check g_malloc returns for structs&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;only check g_try_malloc returns for allocations which are/could be 1MB or over.&amp;lt;/b&amp;gt;&lt;br /&gt;
All g_malloc checks in the entire codebase (all projects) will be changed to conform to these rules.&lt;br /&gt;
* libsigrok&lt;br /&gt;
* libsigrokdecode&lt;br /&gt;
* sigrok-cli&lt;br /&gt;
This will not need to be done before the 0.3.0 release, but is a soft blocker for 0.4.0.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progress ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
An API for allowing frontends to signal &amp;quot;operation in progress&amp;quot; better to the user.&lt;br /&gt;
* Various operations in libsigrok drivers can take a long time. It would be good if frontends could meaningfully handle those (instead of just blocking the UI).&lt;br /&gt;
* There are multiple types of &amp;quot;in progress&amp;quot; states that can happen and that libsigrok should be able to report to frontends:&lt;br /&gt;
** Type 1: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I do know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways a frontend can signal this condition to the user (e.g. show a progressbar from 0%-100%), the exact method to show this is up to the frontend.&lt;br /&gt;
** Type 2: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I don&amp;#039;t know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways for a frontend to signal this condition to the user too (e.g. show a spinning wheel, which only signals &amp;quot;in progress&amp;quot; but no information when the operation will be finished).&lt;br /&gt;
* Which operations can take a longer amount of time to complete?&lt;br /&gt;
** Scan&lt;br /&gt;
*** Example: Various devices have to upload a firmware first before the scan can work, e.g. [[Saleae Logic]] and others. This upload can take a while.&lt;br /&gt;
** Set/get/switch config options&lt;br /&gt;
*** Example: The [[Saleae Logic16]] has to upload a new firmware and/or bitstream when certain config options (number of channels, voltage thresholds, ...) are changed. This is not only at scan time, it can happen at any point when the user changes the options in the frontend.&lt;br /&gt;
** Acquire data from a device&lt;br /&gt;
*** Example: The [[ChronoVu LA8]] will always fill its internal 8MByte buffer with LA samples, and then transfer them over USB. This operation typically takes more than 30 seconds time. This is a &amp;quot;type 1&amp;quot; case, since libsigrok / the driver knows how many samples still have to be transferred until done.&lt;br /&gt;
** Send data to a device&lt;br /&gt;
*** For some write/send operations (e.g. uploading a waveform to a function generator) can also take a lot of time, depending on the device.&lt;br /&gt;
** Probably pretty much any other operation too, depending on driver and hardware.&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We are going to address this by changing the thread model of libsigrok.&lt;br /&gt;
&lt;br /&gt;
Each sdi will have its own worker thread.&lt;br /&gt;
&lt;br /&gt;
Frontend-initiated operations will be queued for the worker thread to execute.&lt;br /&gt;
&lt;br /&gt;
The frontend gets a handle when it submits each operation. The handle can be used to check or wait for an operation&amp;#039;s completion.&lt;br /&gt;
&lt;br /&gt;
At any time, the frontend can request what an sdi is doing, it will get back a data structure with a text description and where applicable a fraction representing progress so far.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
RLE data as the internal currency for sigrok Logic.&lt;br /&gt;
* File Storage: Logic can be most efficiently stored in a planar format, with RLE+Huffman/Golomb Compression.&lt;br /&gt;
* Many devices generate RLE. Those that don&amp;#039;t are not extreme speed.&lt;br /&gt;
* RLE is an efficient format for GUIs rendering logic. Much faster than traversing 100s of uncompressed values.&lt;br /&gt;
* libsigrokdecode needs to move to edge-transition processing for performance reasons.&lt;br /&gt;
** Ergo... can we keep it RLE end to end?&lt;br /&gt;
&lt;br /&gt;
====== Notes ======&lt;br /&gt;
&lt;br /&gt;
# Linux/glibc malloc() fails only when it runs out of address space; you&amp;#039;ll get OOM killed long before malloc() fails.&lt;br /&gt;
# Although glib offers g_try_malloc() which returns NULL on failure, all glib functions that allocate memory internally use g_malloc(), which calls abort() on failure. This is not considered a glib bug and will never be fixed. In many cases it couldn&amp;#039;t even be fixed, without fundamental changes to the glib API, which lacks any mechanisms to signal malloc failure except for the simple g_try_malloc() case.&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Pre-release TODO:&lt;br /&gt;
* basic functionality check on every driver against real hardware (if available)&lt;br /&gt;
* public/private API:&lt;br /&gt;
** go through headers&lt;br /&gt;
** go through .so symbol table&lt;br /&gt;
** doxygen&lt;br /&gt;
* NEWS file&lt;br /&gt;
* on release branch: downgrade libusb req to 1.0.9&lt;br /&gt;
* libserialport runtime version checking mechanism&lt;br /&gt;
* replace poll() usage in libserialport with select()&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jenkins ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* libsigrok build (fix copy artifact plugin)&lt;br /&gt;
* doxygen build for sp/sr/srd&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes.&amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=30C3&amp;diff=7905</id>
		<title>30C3</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=30C3&amp;diff=7905"/>
		<updated>2013-12-29T21:12:11Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Jenkins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&amp;#039;re getting together at the annual CCC conference, [https://events.ccc.de/congress/2013/wiki/Main_Page 30C3], for a [https://events.ccc.de/congress/2013/wiki/Assembly:Sigrok sigrok hackathon]. In addition to the usual &amp;quot;whatever we feel like hacking on&amp;quot;, we also have several architectural decision to make, and doing this in person is a lot easier. If you want to be part of the conversation and decision-making process, show up!&lt;br /&gt;
&lt;br /&gt;
In addition to the 4 days of the congress, we will also get together the day before (26 December 2013) for a hopefully less crowded and more productive day. Venue is not yet decided.&lt;br /&gt;
&lt;br /&gt;
What&amp;#039;s decided here is what goes.&lt;br /&gt;
&lt;br /&gt;
== New sigrok file format ==&lt;br /&gt;
[[New sigrok file format]]&lt;br /&gt;
&lt;br /&gt;
== Improved Configuration Enumeration==&lt;br /&gt;
[[Improved Configuration Enumeration]]&lt;br /&gt;
&lt;br /&gt;
== Filtering/rearranging probes ==&lt;br /&gt;
&amp;lt;s&amp;gt;To sr_filter_probes() or not, that is the question.&lt;br /&gt;
* frontends have probe location info, they pass it to sr_filter_probes() after all&lt;br /&gt;
* very nice for output modules: avoids having to map probe location to bit on &amp;#039;&amp;#039;all&amp;#039;&amp;#039; the modules&lt;br /&gt;
* waste of time for PV, which will soon do its own reformatting of logic data anyway&lt;br /&gt;
* SRD currently needs it, but has a probe mapping mechanism already, so can be adapted&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
* make sr_filter_probes() SR_PRIV&lt;br /&gt;
* sigrok-cli should not call it anymore&lt;br /&gt;
* every output module should call it for itself, since some may be fine without rearranged probes -- will never be called by (future) output module wrappers.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Driver scan ==&lt;br /&gt;
Rethinking how we enumerate and assign drivers to hardware&lt;br /&gt;
* Pre-scan for all resources such as serial ports &amp;amp; USB devices&lt;br /&gt;
* How users/frontends resolve ambiguity&lt;br /&gt;
* How to handle &amp;quot;gateway&amp;quot; devices such as GPIB adapters, networked servers with instruments, etc.&lt;br /&gt;
* Device tree model?&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* automated unit tests on commit (SR and SRD)&lt;br /&gt;
* VMs for *BSD, linux dists on kiutl for automated build/unit tests&lt;br /&gt;
* VMs with connected hardware (bert and uwe)?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Yes. Yes we can.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Malloc ==&lt;br /&gt;
&amp;lt;s&amp;gt;Decide whether to continue trying to handle malloc failures in libsigrok. These code paths are never tested, would never be executed anyway due to the realities of virtual memory systems [1], and even if we wanted to we could never do everything right because of the extensive use of glib [2]. So what is the use case we are actually targeting here?&lt;br /&gt;
&lt;br /&gt;
Current glib usage is [[Glib|here]].&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will:&lt;br /&gt;
* &amp;lt;b&amp;gt;never check g_malloc returns for structs&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;only check g_try_malloc returns for allocations which are/could be 1MB or over.&amp;lt;/b&amp;gt;&lt;br /&gt;
All g_malloc checks in the entire codebase (all projects) will be changed to conform to these rules.&lt;br /&gt;
* libsigrok&lt;br /&gt;
* libsigrokdecode&lt;br /&gt;
* sigrok-cli&lt;br /&gt;
This will not need to be done before the 0.3.0 release, but is a soft blocker for 0.4.0.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progress ==&lt;br /&gt;
An API for allowing frontends to signal &amp;quot;operation in progress&amp;quot; better to the user.&lt;br /&gt;
* Various operations in libsigrok drivers can take a long time. It would be good if frontends could meaningfully handle those (instead of just blocking the UI).&lt;br /&gt;
* There are multiple types of &amp;quot;in progress&amp;quot; states that can happen and that libsigrok should be able to report to frontends:&lt;br /&gt;
** Type 1: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I do know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways a frontend can signal this condition to the user (e.g. show a progressbar from 0%-100%), the exact method to show this is up to the frontend.&lt;br /&gt;
** Type 2: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I don&amp;#039;t know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways for a frontend to signal this condition to the user too (e.g. show a spinning wheel, which only signals &amp;quot;in progress&amp;quot; but no information when the operation will be finished).&lt;br /&gt;
* Which operations can take a longer amount of time to complete?&lt;br /&gt;
** Scan&lt;br /&gt;
*** Example: Various devices have to upload a firmware first before the scan can work, e.g. [[Saleae Logic]] and others. This upload can take a while.&lt;br /&gt;
** Set/get/switch config options&lt;br /&gt;
*** Example: The [[Saleae Logic16]] has to upload a new firmware and/or bitstream when certain config options (number of channels, voltage thresholds, ...) are changed. This is not only at scan time, it can happen at any point when the user changes the options in the frontend.&lt;br /&gt;
** Acquire data from a device&lt;br /&gt;
*** Example: The [[ChronoVu LA8]] will always fill its internal 8MByte buffer with LA samples, and then transfer them over USB. This operation typically takes more than 30 seconds time. This is a &amp;quot;type 1&amp;quot; case, since libsigrok / the driver knows how many samples still have to be transferred until done.&lt;br /&gt;
** Send data to a device&lt;br /&gt;
*** For some write/send operations (e.g. uploading a waveform to a function generator) can also take a lot of time, depending on the device.&lt;br /&gt;
** Probably pretty much any other operation too, depending on driver and hardware.&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
RLE data as the internal currency for sigrok Logic.&lt;br /&gt;
* File Storage: Logic can be most efficiently stored in a planar format, with RLE+Huffman/Golomb Compression.&lt;br /&gt;
* Many devices generate RLE. Those that don&amp;#039;t are not extreme speed.&lt;br /&gt;
* RLE is an efficient format for GUIs rendering logic. Much faster than traversing 100s of uncompressed values.&lt;br /&gt;
* libsigrokdecode needs to move to edge-transition processing for performance reasons.&lt;br /&gt;
** Ergo... can we keep it RLE end to end?&lt;br /&gt;
&lt;br /&gt;
====== Notes ======&lt;br /&gt;
&lt;br /&gt;
# Linux/glibc malloc() fails only when it runs out of address space; you&amp;#039;ll get OOM killed long before malloc() fails.&lt;br /&gt;
# Although glib offers g_try_malloc() which returns NULL on failure, all glib functions that allocate memory internally use g_malloc(), which calls abort() on failure. This is not considered a glib bug and will never be fixed. In many cases it couldn&amp;#039;t even be fixed, without fundamental changes to the glib API, which lacks any mechanisms to signal malloc failure except for the simple g_try_malloc() case.&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Pre-release TODO:&lt;br /&gt;
* basic functionality check on every driver against real hardware (if available)&lt;br /&gt;
* public/private API:&lt;br /&gt;
** go through headers&lt;br /&gt;
** go through .so symbol table&lt;br /&gt;
** doxygen&lt;br /&gt;
* NEWS file&lt;br /&gt;
* on release branch: downgrade libusb req to 1.0.9&lt;br /&gt;
* libserialport runtime version checking mechanism&lt;br /&gt;
* replace poll() usage in libserialport with select()&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jenkins ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* libsigrok build (fix copy artifact plugin)&lt;br /&gt;
* doxygen build for sp/sr/srd&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes.&amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=30C3&amp;diff=7854</id>
		<title>30C3</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=30C3&amp;diff=7854"/>
		<updated>2013-12-26T21:36:39Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&amp;#039;re getting together at the annual CCC conference, [https://events.ccc.de/congress/2013/wiki/Main_Page 30C3], for a [https://events.ccc.de/congress/2013/wiki/Assembly:Sigrok sigrok hackathon]. In addition to the usual &amp;quot;whatever we feel like hacking on&amp;quot;, we also have several architectural decision to make, and doing this in person is a lot easier. If you want to be part of the conversation and decision-making process, show up!&lt;br /&gt;
&lt;br /&gt;
In addition to the 4 days of the congress, we will also get together the day before (26 December 2013) for a hopefully less crowded and more productive day. Venue is not yet decided.&lt;br /&gt;
&lt;br /&gt;
What&amp;#039;s decided here is what goes.&lt;br /&gt;
&lt;br /&gt;
== New sigrok file format ==&lt;br /&gt;
[[New sigrok file format]]&lt;br /&gt;
&lt;br /&gt;
== Improved Configuration Enumeration==&lt;br /&gt;
[[Improved Configuration Enumeration]]&lt;br /&gt;
&lt;br /&gt;
== Filtering/rearranging probes ==&lt;br /&gt;
&amp;lt;s&amp;gt;To sr_filter_probes() or not, that is the question.&lt;br /&gt;
* frontends have probe location info, they pass it to sr_filter_probes() after all&lt;br /&gt;
* very nice for output modules: avoids having to map probe location to bit on &amp;#039;&amp;#039;all&amp;#039;&amp;#039; the modules&lt;br /&gt;
* waste of time for PV, which will soon do its own reformatting of logic data anyway&lt;br /&gt;
* SRD currently needs it, but has a probe mapping mechanism already, so can be adapted&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
* make sr_filter_probes() SR_PRIV&lt;br /&gt;
* sigrok-cli should not call it anymore&lt;br /&gt;
* every output module should call it for itself, since some may be fine without rearranged probes -- will never be called by (future) output module wrappers.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Driver scan ==&lt;br /&gt;
Rethinking how we enumerate and assign drivers to hardware&lt;br /&gt;
* Pre-scan for all resources such as serial ports &amp;amp; USB devices&lt;br /&gt;
* How users/frontends resolve ambiguity&lt;br /&gt;
* How to handle &amp;quot;gateway&amp;quot; devices such as GPIB adapters, networked servers with instruments, etc.&lt;br /&gt;
* Device tree model?&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&amp;lt;s&amp;gt;&lt;br /&gt;
* automated unit tests on commit (SR and SRD)&lt;br /&gt;
* VMs for *BSD, linux dists on kiutl for automated build/unit tests&lt;br /&gt;
* VMs with connected hardware (bert and uwe)?&lt;br /&gt;
&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Yes. Yes we can.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Malloc ==&lt;br /&gt;
&amp;lt;s&amp;gt;Decide whether to continue trying to handle malloc failures in libsigrok. These code paths are never tested, would never be executed anyway due to the realities of virtual memory systems [1], and even if we wanted to we could never do everything right because of the extensive use of glib [2]. So what is the use case we are actually targeting here?&lt;br /&gt;
&lt;br /&gt;
Current glib usage is [[Glib|here]].&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
We will:&lt;br /&gt;
* &amp;lt;b&amp;gt;never check g_malloc returns for structs&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;only check g_try_malloc returns for allocations which are/could be 1MB or over.&amp;lt;/b&amp;gt;&lt;br /&gt;
All g_malloc checks in the entire codebase (all projects) will be changed to conform to these rules.&lt;br /&gt;
* libsigrok&lt;br /&gt;
* libsigrokdecode&lt;br /&gt;
* sigrok-cli&lt;br /&gt;
This will not need to be done before the 0.3.0 release, but is a soft blocker for 0.4.0.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progress ==&lt;br /&gt;
An API for allowing frontends to signal &amp;quot;operation in progress&amp;quot; better to the user.&lt;br /&gt;
* Various operations in libsigrok drivers can take a long time. It would be good if frontends could meaningfully handle those (instead of just blocking the UI).&lt;br /&gt;
* There are multiple types of &amp;quot;in progress&amp;quot; states that can happen and that libsigrok should be able to report to frontends:&lt;br /&gt;
** Type 1: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I do know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways a frontend can signal this condition to the user (e.g. show a progressbar from 0%-100%), the exact method to show this is up to the frontend.&lt;br /&gt;
** Type 2: &amp;#039;&amp;#039;&amp;#039;Operation in progress, but I don&amp;#039;t know when it will be finished&amp;#039;&amp;#039;&amp;#039;. There are various ways for a frontend to signal this condition to the user too (e.g. show a spinning wheel, which only signals &amp;quot;in progress&amp;quot; but no information when the operation will be finished).&lt;br /&gt;
* Which operations can take a longer amount of time to complete?&lt;br /&gt;
** Scan&lt;br /&gt;
*** Example: Various devices have to upload a firmware first before the scan can work, e.g. [[Saleae Logic]] and others. This upload can take a while.&lt;br /&gt;
** Set/get/switch config options&lt;br /&gt;
*** Example: The [[Saleae Logic16]] has to upload a new firmware and/or bitstream when certain config options (number of channels, voltage thresholds, ...) are changed. This is not only at scan time, it can happen at any point when the user changes the options in the frontend.&lt;br /&gt;
** Acquire data from a device&lt;br /&gt;
*** Example: The [[ChronoVu LA8]] will always fill its internal 8MByte buffer with LA samples, and then transfer them over USB. This operation typically takes more than 30 seconds time. This is a &amp;quot;type 1&amp;quot; case, since libsigrok / the driver knows how many samples still have to be transferred until done.&lt;br /&gt;
** Send data to a device&lt;br /&gt;
*** For some write/send operations (e.g. uploading a waveform to a function generator) can also take a lot of time, depending on the device.&lt;br /&gt;
** Probably pretty much any other operation too, depending on driver and hardware.&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
RLE data as the internal currency for sigrok Logic.&lt;br /&gt;
* File Storage: Logic can be most efficiently stored in a planar format, with RLE+Huffman/Golomb Compression.&lt;br /&gt;
* Many devices generate RLE. Those that don&amp;#039;t are not extreme speed.&lt;br /&gt;
* RLE is an efficient format for GUIs rendering logic. Much faster than traversing 100s of uncompressed values.&lt;br /&gt;
* libsigrokdecode needs to move to edge-transition processing for performance reasons.&lt;br /&gt;
** Ergo... can we keep it RLE end to end?&lt;br /&gt;
&lt;br /&gt;
====== Notes ======&lt;br /&gt;
&lt;br /&gt;
# Linux/glibc malloc() fails only when it runs out of address space; you&amp;#039;ll get OOM killed long before malloc() fails.&lt;br /&gt;
# Although glib offers g_try_malloc() which returns NULL on failure, all glib functions that allocate memory internally use g_malloc(), which calls abort() on failure. This is not considered a glib bug and will never be fixed. In many cases it couldn&amp;#039;t even be fixed, without fundamental changes to the glib API, which lacks any mechanisms to signal malloc failure except for the simple g_try_malloc() case.&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
Pre-release TODO:&lt;br /&gt;
* basic functionality check on every driver against real hardware (if available)&lt;br /&gt;
* public/private API:&lt;br /&gt;
** go through headers&lt;br /&gt;
** go through .so symbol table&lt;br /&gt;
** doxygen&lt;br /&gt;
* NEWS file&lt;br /&gt;
* on release branch: downgrade libusb req to 1.0.9&lt;br /&gt;
* libserialport runtime version checking mechanism&lt;br /&gt;
* replace poll() usage in libserialport with select()&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jenkins ==&lt;br /&gt;
* libsigrok build (fix copy artifact plugin)&lt;br /&gt;
* doxygen build for sp/sr/srd&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=TODO&amp;diff=7845</id>
		<title>TODO</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=TODO&amp;diff=7845"/>
		<updated>2013-12-22T22:56:02Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Windows port */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== libsigrok ==&lt;br /&gt;
=== The big pre-release TODO ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;hantek-dso: extract all 5 firmware files.&amp;lt;/s&amp;gt;&lt;br /&gt;
* agilent-dmm: disable unfinished model support&lt;br /&gt;
* nexus-osciprime:&lt;br /&gt;
** finish driver&lt;br /&gt;
** clear up FX2 firmware license situation&lt;br /&gt;
* rigol-ds1xx2: support both channels&lt;br /&gt;
&lt;br /&gt;
=== Next release ===&lt;br /&gt;
&lt;br /&gt;
* SR: check all public API calls to see whether they need an sr_context parameter.&lt;br /&gt;
* SR: add srd_context parameter, and check all public API calls to see whether they need it.&lt;br /&gt;
* remove struct sr_probe.index: g_slist_index() should be used. All LA drivers should be checked on whether they populate this to match.&lt;br /&gt;
* SR, SRD: Use const for all parameters which are not changed by the API call.&lt;br /&gt;
* SR, SRD: There must not be any lib-internal data structures that a frontend can manipulate directly. Internal stuff must be non-accessible, except via our defined API calls.&lt;br /&gt;
&lt;br /&gt;
=== Hardware support ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Support for analog devices, starting with oscilloscopes.&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Add a Hantek DSO-2090 driver.&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Add a tool for firmware extraction of Hantek DSO-2xxx.&amp;lt;/s&amp;gt;&lt;br /&gt;
** &amp;lt;s&amp;gt;Should be written in Python.&amp;lt;/s&amp;gt;&lt;br /&gt;
** &amp;lt;s&amp;gt;Should parse the .sys files (http://www.csn.ul.ie/~caolan/publink/winresdump/winresdump/doc/pefile.html).&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;libudev:&lt;br /&gt;
** &amp;lt;s&amp;gt;Make libudev optional, only build MSO driver if it&amp;#039;s available. If the user enables the MSO driver, but libudev is not available, politely print an error message and exit.&amp;lt;/s&amp;gt;&lt;br /&gt;
** &amp;lt;s&amp;gt;Have OLS driver use libudev if available&amp;lt;/s&amp;gt;&lt;br /&gt;
*** &amp;lt;s&amp;gt;(mrnuke) Is this a good idea? According to [[Openbench Logic Sniffer/Info]], it uses a generic VID:PID. See [http://elco.crsndoo.com/wordpress/2011/03/open-source-cdc-usb-stack-for-pic/].&amp;lt;/s&amp;gt;&lt;br /&gt;
** &amp;lt;s&amp;gt;Find alternative to libudev for Windows and Mac OS X.&amp;lt;/s&amp;gt;&lt;br /&gt;
*** &amp;lt;s&amp;gt;One idea is to implement a generic USB VID:PID to serial port mapping routine, akin to common/serial. On linux, it would use libudev, while on other OS&amp;#039;s this remains to be determined. If for example, libsigrok is build without udev support, then this routine would just return NULL.&amp;lt;/s&amp;gt;&lt;br /&gt;
* Clean up device-specific globals in hardware drivers, to properly permit multiple devices per driver: &amp;lt;s&amp;gt;asix-sigma&amp;lt;/s&amp;gt;, &amp;lt;s&amp;gt;demo&amp;lt;/s&amp;gt;, &amp;lt;s&amp;gt;link-mso19&amp;lt;/s&amp;gt;, &amp;lt;s&amp;gt;openbench-logic-sniffer&amp;lt;/s&amp;gt;, fx2lafw, zeroplus-logic-cube&lt;br /&gt;
* ZEROPLUS driver:&lt;br /&gt;
** Fix implementation to work like the other sigrok drivers wrt acquisition/session handling ([[User:Uwe Hermann|Uwe Hermann]]).&lt;br /&gt;
** handle multiple ZP devices properly: currently all devices share the same device context struct&lt;br /&gt;
** move sr_usb_dev_inst to sr_dev_inst, not device context struct. Currently only the last discovered device has the right USB bus/address, all other discovered devices are just lost.&lt;br /&gt;
* Asix SIGMA driver:&lt;br /&gt;
** support multiple devices properly (currently only one is supported).&lt;br /&gt;
* Chronovu-LA8 driver:&lt;br /&gt;
** support multiple devices properly (currently only one is supported).&lt;br /&gt;
* In order to support the CLI --run option, devices will need to provide their buffer size to the frontend, with a DI option.&lt;br /&gt;
* &amp;lt;s&amp;gt;add &amp;quot;mode=sine&amp;quot; parameter to demo driver, to have it output a sine wave in SR_DF_ANALOG floats&amp;lt;/s&amp;gt;&lt;br /&gt;
* agilent-dmm:&lt;br /&gt;
** &amp;lt;s&amp;gt;factor out serial_readline2 to common/serial.c version&amp;lt;/s&amp;gt;&lt;br /&gt;
** &amp;lt;s&amp;gt;do away with baud rates in profile?&amp;lt;/s&amp;gt;&lt;br /&gt;
** time-limited &amp;lt;s&amp;gt;and continuous mode&amp;lt;/s&amp;gt;&lt;br /&gt;
* fluke-dmm:&lt;br /&gt;
** time-limited &amp;lt;s&amp;gt;and continuous mode&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Input file formats ===&lt;br /&gt;
&lt;br /&gt;
* Add CSV input format support.&lt;br /&gt;
* Add OLS input format support.&lt;br /&gt;
* Add gnuplot input format support ([[User:Uwe Hermann|Uwe Hermann]]).&lt;br /&gt;
* Add Scanalogic input format support ([[User:Uwe Hermann|Uwe Hermann]]).&lt;br /&gt;
&lt;br /&gt;
=== Output file formats ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Basic analog text output: display as float, unit suffix?&amp;lt;/s&amp;gt;&lt;br /&gt;
* All output modules should use the new output API.&lt;br /&gt;
* All output modules should use GString API instead of estimating output size.&lt;br /&gt;
** binary&lt;br /&gt;
** csv&lt;br /&gt;
** chronovu_la8&lt;br /&gt;
** gnuplot&lt;br /&gt;
** &amp;lt;s&amp;gt;ols&amp;lt;/s&amp;gt;&lt;br /&gt;
** text/ascii&lt;br /&gt;
** text/bits&lt;br /&gt;
** text/hex&lt;br /&gt;
** vcd&lt;br /&gt;
* Hex output: Not all lines/columns are of the same length (as they are with real LAs).&lt;br /&gt;
* VCD: All samplenumbers are 0 (instead of the proper samplecount).&lt;br /&gt;
* OLS, gnuplot: Hangs on MinGW for some reasons (not sure if related).&lt;br /&gt;
* CSV: Check if this really works and the syntax is correct. It has various trailing commas, it seems, which should probably be removed.&lt;br /&gt;
* Add Scanalogic output format support ([[User:Uwe Hermann|Uwe Hermann]]).&lt;br /&gt;
* Add output for latex package [http://www.ctan.org/tex-archive/graphics/pgf/contrib/tikz-timing tikz-timing].&lt;br /&gt;
* Add output for browser waveform viewer/editor written in javascript/JSON called [http://code.google.com/p/wavedrom WaveDrom].&lt;br /&gt;
* &amp;lt;s&amp;gt;Have a look at DrawTiming http://drawtiming.sourceforge.net (ImageMagick frontend commandline tool).&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows port ===&lt;br /&gt;
&lt;br /&gt;
* Implement anykey.c replacement.&lt;br /&gt;
* &amp;lt;s&amp;gt;Fix/finish serial port handling code, that&amp;#039;s not working, yet.&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Fix/workaround libusb 1.0 [[Windows]] port issues:&amp;lt;/s&amp;gt;&lt;br /&gt;
** &amp;lt;s&amp;gt;Device renumeration not yet supported (needed for FX2 based LAs).&amp;lt;/s&amp;gt;&lt;br /&gt;
** &amp;lt;s&amp;gt;File descriptor / socket based polling not supported in Windows. Workaround (short-term): Use a thread in sigrok.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
&lt;br /&gt;
* Use glib functions for file handling, not manual fopen/fclose etc., for portability reasons.&lt;br /&gt;
* &amp;lt;s&amp;gt;Factor out input/output file formats to libsigrokfile.&amp;lt;/s&amp;gt;&lt;br /&gt;
* All direct uses of file descriptors in the API should disappear, and GIOChannel should be used instead (portability issues).&lt;br /&gt;
* &amp;lt;s&amp;gt;[http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/tcsetattr.3.html Mac OS X: B460800] is not available it seems. Find the correct header (if any) and/or find a (possibly platform-specific) workaround, or drop this on Mac OS X.&amp;lt;/s&amp;gt;&lt;br /&gt;
* Run the code receiving the samples as quickly as possible, run output format code and other non-timing-critical stuff (protocol decoders) in an extra thread. The problem is nicely visible with FX2-based logic analyzers, the longer an output format takes to produce its output, the better your chances to get &amp;quot;oops, I just lost samples&amp;quot; errors.&lt;br /&gt;
* &amp;lt;s&amp;gt;Change all code to start counting probes at 0, not 1.&amp;lt;/s&amp;gt;&lt;br /&gt;
* Get rid of the use of manual polling of FDs, which is not portable (doesn&amp;#039;t work on [[Windows]]). Use g_poll() instead (which spawns a new thread on Windows).&lt;br /&gt;
* sr_errno:&lt;br /&gt;
** Most functions should return SR_OK or SR_ERR_* (same for SRD_OK etc).&lt;br /&gt;
** Most backend functions return status as an integer, which is SR_OK if all went well, or SR_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;
* &amp;lt;s&amp;gt;Add good Doxygen documentation for (at least) all public functions.&amp;lt;/s&amp;gt;&lt;br /&gt;
* Support specifying the firmware directory at runtime.&lt;br /&gt;
&lt;br /&gt;
=== Before release ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;avoid ABI breakage in the HWCAP enum&amp;lt;/s&amp;gt; (done for all enums. Documentation added in HACKING)&lt;br /&gt;
** &amp;lt;s&amp;gt;assign a number to the first of every section/category in the enum, with 10K or so in between assignments.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libsigrokdecode ==&lt;br /&gt;
&lt;br /&gt;
* Performance: ATM data passed to decode() creates lots of Python objects (-&amp;gt; performance, huge memory usage); find a way to make that more efficient. Use &amp;#039;bytes&amp;#039; and/or &amp;#039;memoryview&amp;#039; and the new Python 3 buffer API (?)&lt;br /&gt;
* Test/implement &amp;#039;&amp;#039;&amp;#039;config&amp;#039;&amp;#039;&amp;#039; PD method etc.&lt;br /&gt;
* Annotations need an additional &amp;#039;type&amp;#039; field, so that PDs/GUIs can differentiate between different output &amp;quot;things&amp;quot;.&lt;br /&gt;
** Types are not yet defined, but could be things like DEFAULT, ERR, WARN, DBG, and others.&lt;br /&gt;
** Best handled with a keyword arg to put(), which defaults to srd.ANN_DEFAULT.&lt;br /&gt;
* Processing raw logic vs. everything else up the stack: (optionally) deliver pre-sampled by clock or rate? &amp;lt;blockquote&amp;gt;Yes, the controller will deliver a clock- or rate-sampled feed instead, if the PD requests this via a configuration option.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;How to pass (and what exactly, and in which format) samples and already decoded protocol packets:&lt;br /&gt;
** From C to Python (i.e. from libsigrokdecode/controller to the lowest-level decoder)&lt;br /&gt;
** From Python to Python (i.e., from one decoder to the next in the stack)&lt;br /&gt;
** From Python to C (i.e., from a decoder back to libsigrokdecode, which then hands it over to the CLI/GUI, which write it to file or display it in the GUI).&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;There will also have to be a type for &amp;quot;sections&amp;quot;, i.e. grouped sets of fields that have something in common -- an EDID block, ethernet frame, etc.&lt;br /&gt;
** Actually not needed: these annotations will cover a larger sample range than its individual fields, so it&amp;#039;s up to the frontend to do something visually interesting with this.&amp;lt;/s&amp;gt;&lt;br /&gt;
* Annotations: replace string with optional list, containing annotations in decreasing length?&lt;br /&gt;
** quick and easy form: &amp;lt;tt&amp;gt;put(ss, es, opid_ann, &amp;quot;something&amp;quot;)&amp;lt;/tt&amp;gt;&lt;br /&gt;
** multiple strings: &amp;lt;tt&amp;gt;put(ss, es, opid_ann, [&amp;quot;something&amp;quot;, &amp;quot;else&amp;quot;, &amp;quot;yet&amp;quot;])&amp;lt;/tt&amp;gt;&lt;br /&gt;
** ...or annotations of decreasing length: &amp;lt;tt&amp;gt;put(ss, es, opid_ann, [&amp;quot;something&amp;quot;, &amp;quot;sth&amp;quot;, &amp;quot;s&amp;quot;])&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Test/implement support for multiple outputs of one PD, and stacking different additional PDs on those outputs.&lt;br /&gt;
* Test/implement multiple inputs support.&lt;br /&gt;
* &amp;lt;s&amp;gt;srd: Python implementation details should be removed from the API.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== sigrok-cli ==&lt;br /&gt;
&lt;br /&gt;
* Support for printing/selecting &amp;#039;&amp;#039;&amp;#039;one or more&amp;#039;&amp;#039;&amp;#039; specific annotation types for output.&lt;br /&gt;
* &amp;lt;s&amp;gt;enforce input/output options in PDs: don&amp;#039;t send logic if PD only accepts i2c etc.&amp;lt;/s&amp;gt; figure out what to do with inputs[] and outputs[] (1-wire case)&lt;br /&gt;
* Python exception handling in libsrd: add full traceback support with srd_dbg()&lt;br /&gt;
* Make specification of triggering capabilities more detailed, so that frontends/GUIs can auto-generate GUI forms out of that metadata.&lt;br /&gt;
* Add a --run option, which just starts sampling with the supplied or default samplerate. Contrary to --time or --samples you don&amp;#039;t need to explicitly specify a duration or number of samples here, that&amp;#039;s automatically determined by the available memory of the logic analyzer and the selected samplerate. Devices that can stream continuously will do so, others will just fill a buffer and then stop.&lt;br /&gt;
** TODO: Similar to --continuous? Merge both?&lt;br /&gt;
* &amp;lt;s&amp;gt;sigrokdecode probe name matching on level 0 decoders: if the probe names supplied on the cmdline for acquisition or supplied from .sr file match the probes a level 0 PD requires &amp;#039;&amp;#039;&amp;#039;exactly&amp;#039;&amp;#039;&amp;#039;, fill in the probemap accordingly. In all other cases, throw up an error if a level 0 PD has required probes but none were specified as arguments.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== fx2lafw ==&lt;br /&gt;
&lt;br /&gt;
* Analog sampling: 1-channel, 2-channel, voltage meter&lt;br /&gt;
* Trigger pin&lt;br /&gt;
* Clock input&lt;br /&gt;
* Clock output&lt;br /&gt;
* Frequency/pulse counter&lt;br /&gt;
* Signal generator&lt;br /&gt;
* Fix power consumption during enumeration. &lt;br /&gt;
** Non-LP FX2&amp;#039;s consume more than 100mA during enumeration. This is outside of the USB specification&lt;br /&gt;
** Official workaround is to enumerate first as full-speed, then as high-speed. This is overkill for sigrok.&lt;br /&gt;
** Investigate putting the CPU to sleep (except for processing interrupts) until enumerated.&lt;br /&gt;
&lt;br /&gt;
== pulseview ==&lt;br /&gt;
*&amp;lt;strike&amp;gt;Add signal naming&amp;lt;/strike&amp;gt;&lt;br /&gt;
*&amp;lt;strike&amp;gt;Add signal arrangement&amp;lt;/strike&amp;gt;&lt;br /&gt;
*&amp;lt;strike&amp;gt;Selection/cursors&amp;lt;/strike&amp;gt;&lt;br /&gt;
*&amp;lt;strike&amp;gt;Threaded sampling&amp;lt;/strike&amp;gt;&lt;br /&gt;
*&amp;lt;strike&amp;gt;Support analog&amp;lt;/strike&amp;gt; [Very basic support for analog now present]&lt;br /&gt;
** Support analog signal scaling (Volts/div)&lt;br /&gt;
*&amp;lt;strike&amp;gt;Make a generative property sheet GUI&amp;lt;/strike&amp;gt;&lt;br /&gt;
*&amp;lt;strike&amp;gt;Make it responsive to SIGABRT etc.&amp;lt;/strike&amp;gt;&lt;br /&gt;
*&amp;lt;strike&amp;gt;Proper error reporting instead of qDebug messages&amp;lt;/strike&amp;gt;&lt;br /&gt;
**&amp;lt;strike&amp;gt;When file-open fails&amp;lt;/strike&amp;gt;&lt;br /&gt;
**&amp;lt;strike&amp;gt;When the LA capture fails&amp;lt;/strike&amp;gt;&lt;br /&gt;
*&amp;lt;strike&amp;gt;Tidy up ruler&amp;lt;/strike&amp;gt;&lt;br /&gt;
**&amp;lt;strike&amp;gt;Add some graphical refinements.&amp;lt;/strike&amp;gt;&lt;br /&gt;
**&amp;lt;strike&amp;gt;Stop numbers colliding at high zoom ([http://sigrok.org/bugzilla/show_bug.cgi?id=44 bug 44])&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Have some way to configure driver parameters. i.e. serial port for RS-232 devices.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Have some way to configure libsigrok* debug level&amp;lt;/strike&amp;gt;&lt;br /&gt;
*Add save [Working, but held up by changes needed to sigrok-cli and libsigrok]&lt;br /&gt;
**Add progress reporting&lt;br /&gt;
*Deduplicate property setting functionality between SamplingBar and DeviceOptions - make SamplingBar a properties container&lt;br /&gt;
*Analog support&lt;br /&gt;
**Add signal v-scale control.&lt;br /&gt;
**Add interpolation (cosine? sinc? some kind of interpolation filter?)&lt;br /&gt;
**&amp;lt;strike&amp;gt;Add index for fast drawing zoomed-out view.&amp;lt;/strike&amp;gt;&lt;br /&gt;
*Add support for other open/import file formats&lt;br /&gt;
*Add signal decoding&lt;br /&gt;
*Add signal overview&lt;br /&gt;
*Add triggering&lt;br /&gt;
*Signal groups&lt;br /&gt;
*Paint speed profiling information.&lt;br /&gt;
*Code documentation&lt;br /&gt;
*Transition coding&lt;br /&gt;
*Migrate to Qt5 and C++11?&lt;br /&gt;
** Wait for Debian &amp;#039;&amp;#039;&amp;#039;wheezy&amp;#039;&amp;#039;&amp;#039; release before using any C++11 features&lt;br /&gt;
*Store config with QSettings&lt;br /&gt;
&lt;br /&gt;
== sigrok-qt ==&lt;br /&gt;
&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== sigrok-gtk ==&lt;br /&gt;
&lt;br /&gt;
* File-&amp;gt;Open: sigrok-gtk should remember the directory of the last file that was opened/loaded, so that you don&amp;#039;t have to browse to the same directory again and again if you load multiple files.&lt;br /&gt;
* sigrok-gtk should remember the last window position/size upon shutdown/restart.&lt;br /&gt;
* A manpage needs to be written for sigrok-gtk ([[User:Uwe Hermann|Uwe Hermann]]).&lt;br /&gt;
* sigrok-gtk needs a time scale (work in progress, haavares on IRC).&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
* Update the relevant wiki API pages with high-level info (details will be in the Doxygen-docs): [[Protocol decoder API]], [[Formats and structures]], [[Hardware driver API]].&lt;br /&gt;
* Make a user-friendly protocol list/lookup page, based on a data-only backend.&lt;br /&gt;
** Integrate these into the list: http://en.wikipedia.org/wiki/Category:Serial_buses.&lt;br /&gt;
* Protocol decoder repository management:&lt;br /&gt;
** manifest file in every PD directory, containing:&lt;br /&gt;
*** list of files to install&lt;br /&gt;
*** list of test dumps in sigrok-dumps&lt;br /&gt;
*** list of output files to match test dump runs&lt;br /&gt;
** to check before accepting PD into repository:&lt;br /&gt;
*** make sure sigrok-dumps has the test files, and the output matches&lt;br /&gt;
*** run PD against memory profiler, make sure it doesn&amp;#039;t go over X&lt;br /&gt;
*** check code coverage againsst test files, make sure it&amp;#039;s 100%&lt;br /&gt;
*** run against pep8 with custom filter list&lt;br /&gt;
** parse TODO items out of PDs, and present them on the website&lt;br /&gt;
* FreeBSD packages/ports.&lt;br /&gt;
&lt;br /&gt;
== Subprojects ==&lt;br /&gt;
* Python bindings for libsigrok and libsigrokdecode.&lt;br /&gt;
== Mugshots ==&lt;br /&gt;
We need better mugshots for the following devices:&lt;br /&gt;
* &amp;lt;s&amp;gt;[[Acute PKLA-1216]] (cropped corner, lens distortion, orange hue)&amp;lt;/s&amp;gt;&lt;br /&gt;
* [[ARMFLY AX-Pro]] (bottom of the device is cropped out)&lt;br /&gt;
* &amp;lt;s&amp;gt;[[Braintechnology USB Interface V2.x]] (orange hue)&amp;lt;/s&amp;gt;&lt;br /&gt;
* [[ChronoVu LA8]] (orange hue, severe lens distortion, uneven lighting)&lt;br /&gt;
* [[ZEROPLUS LAP-16128U]] (Due to its material, this device needs very careful placement of lights. Avoid reflections and dark shadows - those are nearly impossible to fix)&lt;br /&gt;
* &amp;lt;s&amp;gt;[[Microchip PICkit2]] (Color temperature too low; cannot fix from existing png, uneven lighting)&amp;lt;/s&amp;gt;&lt;br /&gt;
* [[Pico Technology PicoScope 2203]]&lt;br /&gt;
* [[Pico Technology PicoScope 2205]]&lt;br /&gt;
* [[RDing TEMPer1K2]] (none of the angles are usable as a &amp;#039;pretty&amp;#039; mugshot)&lt;br /&gt;
* [[Voltcraft DL-120TH]] (Bottom shadow makes it impossible to correctly identify the edge)&lt;br /&gt;
* &amp;lt;s&amp;gt; [[Voltcraft DL-140TH]] &amp;lt;/s&amp;gt;&lt;br /&gt;
* [[Robomotic BugLogic 3]] (Poor contrast)&lt;br /&gt;
* [[MiniLA Mockup]] (severe lens distortion)&lt;br /&gt;
* [[QuantAsylum QA100]] (Huge bright spot -- probably from the camera flash)&lt;br /&gt;
* [[Rigol VS5202D]] (none of the angles are usable as a &amp;#039;pretty&amp;#039; mugshot)&lt;br /&gt;
* &amp;lt;s&amp;gt;[[V&amp;amp;A VA18B]] (mugshot blurry due to excessive perspective and color correction)&amp;lt;/s&amp;gt;&lt;br /&gt;
* [[MASTECH MS6252B]] (The mugshot we currently have is acceptable. The problem is that the blades are underexposed, and will not look well when the background is cropped. Please make sure there is sufficient light on the fan blades; if they are made from the same plastic as the case, they should display the same brightness. This is a more difficult shot due to the shape of the device; it may take some playing around with the lights.)&lt;br /&gt;
* [[Agilent MSO7104A]] (device is tilted and out of focus; applying perspective correction makes the out-of-focus problem evident. Device is also slightly underexposed; looks frightening on a white background)&lt;br /&gt;
&lt;br /&gt;
See [[Picture Guidelines]] for more details.&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Windows&amp;diff=7844</id>
		<title>Windows</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Windows&amp;diff=7844"/>
		<updated>2013-12-22T18:10:11Z</updated>

		<summary type="html">&lt;p&gt;Martling: FIX ALL THE THINGS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:sigrok windows.png|right|thumb|320px|sigrok-qt on Windows]]&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
We intend to fully support all major operating systems in sigrok, including Windows. However, we&amp;#039;re not quite there, yet. Various portability issues need to be addressed still. The tables below list the current Windows status of the various hardware drivers.&lt;br /&gt;
&lt;br /&gt;
=== Supported ===&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;
!Logic analyzer&lt;br /&gt;
!Windows status&lt;br /&gt;
|-&lt;br /&gt;
| [[ASIX SIGMA]]/[[ASIX SIGMA|SIGMA2]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine using libftdi + libusb-0.1-win32 (not runtime-tested yet, though).&lt;br /&gt;
|-&lt;br /&gt;
| [[ChronoVu LA8]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Works fine using libftdi + libusb-0.1-win32.&lt;br /&gt;
|-&lt;br /&gt;
| Demo driver&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Works fine.&lt;br /&gt;
|-&lt;br /&gt;
| [[IKALOGIC ScanaPLUS]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Works fine using libftdi + libusb-0.1-win32.&lt;br /&gt;
|-&lt;br /&gt;
| [[ZEROPLUS Logic Cube LAP-C(16032)]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Works fine using libusb-1.0.&lt;br /&gt;
|-&lt;br /&gt;
| [[ZEROPLUS LAP-16128U ]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should works fine using libusb-1.0 (not runtime-tested yet, though).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Work in progress ===&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;
!Logic analyzer&lt;br /&gt;
!Windows status&lt;br /&gt;
|-&lt;br /&gt;
| [[ARMFLY Mini-Logic ]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[Braintechnology USB Interface V2.x]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[Braintechnology USB-LPS]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[CWAV USBee SX]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[Dangerous Prototypes Buspirate]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[EE Electronics ESLA100]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[IKALOGIC Scanalogic-2]]&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | HID-based, we need to use HIDAPI.&lt;br /&gt;
|-&lt;br /&gt;
| [[Lcsoft Mini Board]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[Logic Shrimp]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[MCU123 Saleae Logic clone]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[MCU123 USBee AX Pro clone]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Works fine.&lt;br /&gt;
|-&lt;br /&gt;
| [[Openbench Logic Sniffer]]&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | Serial port portability fixes required (partially implemented, but unfinished).&lt;br /&gt;
|-&lt;br /&gt;
| [[Robomotic BugLogic 3]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[Robomotic MiniLogic]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[Saleae Logic]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[Link Instruments MSO-19‎]]&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | Doesn&amp;#039;t compile due to libudev dependency. TODO: Make libudev optional.&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Mixed-signal oscilloscope&lt;br /&gt;
!Windows status&lt;br /&gt;
|-&lt;br /&gt;
| [[ARMFLY AX-Pro]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[EE Electronics ESLA201A]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[XZL_Studio AX]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Oscilloscope&lt;br /&gt;
!Windows status&lt;br /&gt;
|-&lt;br /&gt;
| [[Fluke ScopeMeter 199B]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[Hantek DSO-2090]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[Rigol DS1052E]]&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | USB connection not supported yet, serial connection partially working.&lt;br /&gt;
|-&lt;br /&gt;
| [[Rigol DS1102E]]&lt;br /&gt;
| bgcolor=&amp;quot;orange&amp;quot; | USB connection not supported yet, serial connection partially working.&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Multimeter&lt;br /&gt;
!Windows status&lt;br /&gt;
|-&lt;br /&gt;
| All serial port based DMMs&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| All uni-t-dmm based DMMs&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | HID-based, we need to use HIDAPI.&lt;br /&gt;
|-&lt;br /&gt;
| All victor-dmm based DMMs&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | HID-based, we need to use HIDAPI.&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Sound level meter&lt;br /&gt;
!Windows status&lt;br /&gt;
|-&lt;br /&gt;
| [[CEM DT-8852]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[Colead SL-5868P]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[Kecheng KC-330B]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[Tondaj SL-814]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Thermometer&lt;br /&gt;
!Windows status&lt;br /&gt;
|-&lt;br /&gt;
| [[Lascar Electronics EL-USB-2]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[MIC 98581]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[MIC 98583]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[UNI-T UT325]]&lt;br /&gt;
| bgcolor=&amp;quot;red&amp;quot; | HID-based, we need to use HIDAPI.&lt;br /&gt;
|-&lt;br /&gt;
| [[Voltcraft K204]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Hygrometer&lt;br /&gt;
!Windows status&lt;br /&gt;
|-&lt;br /&gt;
| [[Lascar Electronics EL-USB-2]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
|-&lt;br /&gt;
| [[MIC 98583]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Datalogger&lt;br /&gt;
!Windows status&lt;br /&gt;
|-&lt;br /&gt;
| [[Lascar Electronics EL-USB-CO]]&lt;br /&gt;
| bgcolor=&amp;quot;lime&amp;quot; | Should work fine - please test.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Self-extracting installers ==&lt;br /&gt;
&lt;br /&gt;
Work in progress. We don&amp;#039;t provide pre-built installers for [[sigrok-cli]] and [[PulseView]] right now, but will do so in the near future, when a few issues have been sorted out.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;120px&amp;quot; heights=&amp;quot;70px&amp;quot; perrow=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
File:Sigrok windows installer1.jpg&lt;br /&gt;
File:Sigrok windows installer2.jpg&lt;br /&gt;
File:Sigrok windows installer3.jpg&lt;br /&gt;
File:Sigrok windows installer4.jpg&lt;br /&gt;
File:Sigrok windows installer5.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drivers ==&lt;br /&gt;
&lt;br /&gt;
In order to use [[libsigrok]] (via a sigrok frontend) on Windows, you need to install the proper driver for the respective device. The driver shipped with the vendor software is &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; going to work in almost all cases.&lt;br /&gt;
&lt;br /&gt;
You can use the latest [http://sourceforge.net/projects/libwdi/files/zadig/ zadig] utility (from the [http://sourceforge.net/projects/libwdi/ libwdi] project) on Windows to install the respective driver. There are two zadig versions, one for Windows XP, and another one for all other supported Windows versions.&lt;br /&gt;
&lt;br /&gt;
Devices where libsigrok uses libftdi will need the &amp;#039;&amp;#039;&amp;#039;libusb-win32&amp;#039;&amp;#039;&amp;#039; driver, devices where libsigrok uses libusb-1.0 will need the &amp;#039;&amp;#039;&amp;#039;WinUSB&amp;#039;&amp;#039;&amp;#039; driver.&lt;br /&gt;
&lt;br /&gt;
== Building from source ==&lt;br /&gt;
&lt;br /&gt;
See [[Windows/Building]].&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=File:Sigrok-librevisa.svg&amp;diff=7792</id>
		<title>File:Sigrok-librevisa.svg</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=File:Sigrok-librevisa.svg&amp;diff=7792"/>
		<updated>2013-12-09T17:30:52Z</updated>

		<summary type="html">&lt;p&gt;Martling: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Main_Page&amp;diff=7789</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Main_Page&amp;diff=7789"/>
		<updated>2013-12-06T03:14:17Z</updated>

		<summary type="html">&lt;p&gt;Martling: Add libserialport to subprojects list.&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;
&amp;lt;div style=&amp;quot;margin-bottom:1.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 &amp;#039;&amp;#039;&amp;#039;portable, cross-platform, Free/Libre/Open-Source signal analysis software suite&amp;#039;&amp;#039;&amp;#039; that supports various device types, such as [[Supported_hardware#Logic_analyzers|logic analyzers]], [[Supported_hardware#Mixed-signal_devices|MSOs]], [[Supported_hardware#Oscilloscopes|oscilloscopes]], [[Supported_hardware#Multimeters|multimeters]], [[Supported_hardware#LCR meters|LCR meters]], [[Supported_hardware#Sound_level_meters|sound level meters]], [[Supported_hardware#Thermometers|thermometers]], [[Supported_hardware#Hygrometers|hygrometers]], [[Supported_hardware#Anemometers|anemometers]], [[Supported_hardware#Light meters|light meters]], [[Supported_hardware#Energy meters|Energy meters]], [[Supported_hardware#DAQs|DAQs]], [[Supported_hardware#Dataloggers|dataloggers]], [[Supported_hardware#Function_generators|function generators]], [[Supported_hardware#RF receivers|RF receivers]], [[Supported_hardware#Spectrum_analyzers|spectrum analyzers]], [[Supported_hardware#Power_supplies|power supplies]], [[Supported_hardware#GPIB_interfaces|GPIB interfaces]], and more.&lt;br /&gt;
&lt;br /&gt;
It is licensed under the terms of the &amp;#039;&amp;#039;&amp;#039;GNU GPL&amp;#039;&amp;#039;&amp;#039;. Design goals and features include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Broad hardware support&amp;#039;&amp;#039;&amp;#039;. Supports many different logic analyzers, oscilloscopes, multimeters, data loggers etc. from various vendors.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cross-platform&amp;#039;&amp;#039;&amp;#039;. Works on [[Linux]], [[Mac OS X]], [[Windows]], [[FreeBSD]], [[OpenBSD]], [[NetBSD]] (and on x86, ARM, Sparc, PowerPC, ...).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Scriptable protocol decoding&amp;#039;&amp;#039;&amp;#039;. Extendable with stackable [[protocol decoders]] written in Python 3.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;File format support&amp;#039;&amp;#039;&amp;#039;. Supports various [[Input output formats|input/output file formats]] (binary, ASCII, hex, CSV, gnuplot, [http://en.wikipedia.org/wiki/Value_change_dump VCD], ...).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Reusable code&amp;#039;&amp;#039;&amp;#039;. Consists of the [[libsigrok]] and [[libsigrokdecode]] shared libraries which can be used by various frontends/GUIs.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 50%; float: left; margin-bottom: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
{{Box|&lt;br /&gt;
BORDER = #8898bf|&lt;br /&gt;
BACKGROUND = #d1adf6|&lt;br /&gt;
WIDTH = 100%|&lt;br /&gt;
ICON = |&lt;br /&gt;
HEADING = [[File:Sigrok_stone.png]] &amp;lt;span style=&amp;quot;font-variant:small-caps;&amp;quot;&amp;gt;[http://www.sigrok.org/blog News] / [http://www.sigrok.org/blog Blog]&amp;lt;/span&amp;gt;|&lt;br /&gt;
CONTENT =&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
&amp;lt;rss max=13 date=&amp;quot;Y-m-d&amp;quot;&amp;gt;http://sigrok.org/blog/rss.xml&amp;lt;/rss&amp;gt;&lt;br /&gt;
See also: [[Current events]].&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 49%; float: right; margin-bottom: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
{{Box|&lt;br /&gt;
BORDER = #8898bf|&lt;br /&gt;
BACKGROUND = lime|&lt;br /&gt;
WIDTH = 100%|&lt;br /&gt;
ICON = |&lt;br /&gt;
HEADING = [[File:Sigrok_stone.png]] &amp;lt;span style=&amp;quot;font-variant:small-caps;&amp;quot;&amp;gt;Supported hardware&amp;lt;/span&amp;gt; (&amp;lt;small&amp;gt;&amp;lt;span style=&amp;quot;font-variant:normal;&amp;quot;&amp;gt;[[:Category:Device|Browse by category...]]&amp;lt;/span&amp;gt;&amp;lt;/small&amp;gt;)|&lt;br /&gt;
CONTENT =&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
* [[Supported_hardware#Logic_analyzers|Logic analyzers]] ([[Logic analyzer comparison|comparison]])&lt;br /&gt;
* [[Supported_hardware#Mixed-signal_devices|Mixed-signal devices]] ([[Mixed-signal device comparison|comparison]])&lt;br /&gt;
* [[Supported_hardware#Oscilloscopes|Oscilloscopes]] ([[Oscilloscope comparison|comparison]])&lt;br /&gt;
* [[Supported_hardware#Multimeters|Multimeters]] ([[Multimeter comparison|comparison]], [[Device_cables#Multimeters|cables]], [[Multimeter ICs|ICs]])&lt;br /&gt;
* [[Supported_hardware#LCR meters|LCR meters]] ([[LCR meter comparison|comparison]])&lt;br /&gt;
* [[Supported_hardware#Sound_level_meters|Sound level meters]] ([[Sound level meter comparison|comparison]], [[Device_cables#Sound_level_meters|cables]])&lt;br /&gt;
* [[Supported_hardware#Thermometers|Thermometers]] ([[Thermometer comparison|comparison]])&lt;br /&gt;
* [[Supported_hardware#Hygrometers|Hygrometers]] ([[Hygromometer comparison|comparison]])&lt;br /&gt;
* [[Supported_hardware#Anemometers|Anemometers]] ([[Anemometer comparison|comparison]])&lt;br /&gt;
* [[Supported_hardware#Light meters|Light meters]] ([[Light meter comparison|comparison]])&lt;br /&gt;
* [[Supported_hardware#Energy meters|Energy meters]] ([[Energy meter comparison|comparison]])&lt;br /&gt;
* [[Supported_hardware#DAQs|DAQs]] ([[DAQ comparison|comparison]])&lt;br /&gt;
* [[Supported_hardware#Dataloggers|Dataloggers]] ([[Datalogger comparison|comparison]])&lt;br /&gt;
* [[Supported_hardware#Function_generators|Function generators]] ([[Function generator comparison|comparison]])&lt;br /&gt;
* [[Supported_hardware#RF receivers|RF receivers]] ([[RF receiver comparison|comparison]])&lt;br /&gt;
* [[Supported_hardware#Spectrum_analyzers|Spectrum analyzers]] ([[Spectrum analyzer comparison|comparison]])&lt;br /&gt;
* [[Supported_hardware#Power_supplies|Power supplies]] ([[Power supply comparison|comparison]])&lt;br /&gt;
* [[Supported_hardware#GPIB_interfaces|GPIB interfaces]] ([[GPIB interface comparison|comparison]])&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 50%; float: left; margin-bottom: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
{{Box|&lt;br /&gt;
BORDER = #8898bf|&lt;br /&gt;
BACKGROUND = cyan|&lt;br /&gt;
WIDTH = 100%|&lt;br /&gt;
ICON = |&lt;br /&gt;
HEADING = [[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;
CONTENT =&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
[[Building]] &amp;amp;middot; [[Linux]] &amp;amp;middot; [[Mac OS X]] &amp;amp;middot; [[Windows]] &amp;amp;middot; [[FreeBSD]] &amp;amp;middot; [[OpenBSD]] &amp;amp;middot; [[NetBSD]] &amp;amp;middot; [[Android]] &amp;amp;middot; [[Embedded]] &amp;amp;middot; [[Input output formats]] &amp;amp;middot; [[Protocol decoders]] &amp;amp;middot; [[Probe comparison]] &amp;amp;middot; [[GPIB]] &amp;amp;middot; [[Logo]] &amp;amp;middot; [[Press]]&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 49%; float: right; margin-bottom: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
{{Box|&lt;br /&gt;
BORDER = #8898bf|&lt;br /&gt;
BACKGROUND = #ff3333|&lt;br /&gt;
WIDTH = 100%|&lt;br /&gt;
ICON = |&lt;br /&gt;
HEADING = [[File:Sigrok_stone.png]] &amp;lt;span style=&amp;quot;font-variant:small-caps;&amp;quot;&amp;gt;Subprojects&amp;lt;/span&amp;gt;|&lt;br /&gt;
CONTENT =&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
[[libserialport]] &amp;amp;middot; [[libsigrok]] &amp;amp;middot; [[libsigrokdecode]] &amp;amp;middot; [[sigrok-cli]] &amp;amp;middot; [[PulseView]] &amp;amp;middot; [[sigrok-meter]] &amp;lt;!-- &amp;amp;middot; [[sigrok-qt]] &amp;amp;middot; [[sigrok-gtk]] --&amp;gt; &amp;amp;middot; [[fx2lafw]] &amp;amp;middot; [[gpibgrok]] &amp;amp;middot; [[fx2grok]] &amp;amp;middot; [[fpgalafw]] &amp;amp;middot; [[Firmware]] &amp;amp;middot; [[Example dumps]]&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 50%; float: left; margin-bottom: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
{{Box|&lt;br /&gt;
BORDER = #8898bf|&lt;br /&gt;
BACKGROUND = yellow|&lt;br /&gt;
WIDTH = 100%|&lt;br /&gt;
ICON = |&lt;br /&gt;
HEADING = [[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;
CONTENT = &lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
Mailing lists: [https://lists.sourceforge.net/lists/listinfo/sigrok-devel sigrok-devel] ([http://news.gmane.org/gmane.comp.debugging.sigrok.devel archive]), [https://lists.sourceforge.net/lists/listinfo/sigrok-commits sigrok-commits] ([http://sourceforge.net/mailarchive/forum.php?forum_name=sigrok-commits archive]) &amp;amp;middot; IRC: [irc://chat.freenode.net/sigrok #sigrok]&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 49%; float: right; margin-bottom: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
{{Box|&lt;br /&gt;
BORDER = #8898bf|&lt;br /&gt;
BACKGROUND = lightblue|&lt;br /&gt;
WIDTH = 100%|&lt;br /&gt;
ICON = |&lt;br /&gt;
HEADING = [[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;
CONTENT =&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
[[Developers]] &amp;amp;middot; [http://sigrok.org/api/libsigrok/unstable/index.html libsigrok API] &amp;amp;middot; [http://sigrok.org/api/libsigrokdecode/unstable/index.html libsigrokdecode API] &amp;amp;middot; [http://sigrok.org/gitweb/ Browse source code] &amp;amp;middot; [http://sigrok.org/bugzilla/ Bug tracker] &amp;amp;middot; [[Protocol decoder HOWTO]] &amp;amp;middot; [[Protocol decoder API]] &amp;amp;middot; [[Formats and structures]] &amp;amp;middot; [[Hardware driver API]] &amp;amp;middot; [[Portability]] &amp;amp;middot; [[TODO]]&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;margin-top: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;IMPORTANT: Unless explicitly specified otherwise, all contents in this wiki (including text and images) are released under the &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;CC-BY-SA 3.0&amp;lt;/span&amp;gt; license. If you don&amp;#039;t want that, please explicitly specify another free-ish license when adding pages/images!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Libserialport&amp;diff=7788</id>
		<title>Libserialport</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Libserialport&amp;diff=7788"/>
		<updated>2013-12-05T20:40:13Z</updated>

		<summary type="html">&lt;p&gt;Martling: /* Supported operating systems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:libserialport}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;libserialport&amp;#039;&amp;#039;&amp;#039; is a minimal, cross-platform shared library written in C that is intended to take care of the OS-specific details when writing software that uses serial ports.&lt;br /&gt;
&lt;br /&gt;
It is licensed under the terms of the GNU Lesser General Public License, version 3 or later.&lt;br /&gt;
&lt;br /&gt;
== Supported operating systems ==&lt;br /&gt;
&lt;br /&gt;
* Linux&lt;br /&gt;
* Mac OS X&lt;br /&gt;
* Windows&lt;br /&gt;
* Android&lt;br /&gt;
&lt;br /&gt;
== API documentation ==&lt;br /&gt;
&lt;br /&gt;
You can browse the [http://sigrok.org/api/libserialport/unstable/index.html API documentation] of the library online.&lt;br /&gt;
&lt;br /&gt;
== Getting the code ==&lt;br /&gt;
&lt;br /&gt;
 $ &amp;#039;&amp;#039;&amp;#039;git clone git://sigrok.org/libserialport&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
You can also [http://sigrok.org/gitweb/?p=libserialport.git;a=tree browse the source code] via gitweb.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* libudev (only needed on Linux)&lt;br /&gt;
* There are no dependencies at all on other OSes.&lt;br /&gt;
&lt;br /&gt;
== Building from source ==&lt;br /&gt;
&lt;br /&gt;
 $ &amp;#039;&amp;#039;&amp;#039;./autogen.sh&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 $ &amp;#039;&amp;#039;&amp;#039;./configure&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 $ &amp;#039;&amp;#039;&amp;#039;make&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 $ &amp;#039;&amp;#039;&amp;#039;sudo make install&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=30C3&amp;diff=7776</id>
		<title>30C3</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=30C3&amp;diff=7776"/>
		<updated>2013-12-04T09:29:52Z</updated>

		<summary type="html">&lt;p&gt;Martling: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&amp;#039;re getting together at the annual CCC conference, [https://events.ccc.de/congress/2013/wiki/Main_Page 30C3], for a [https://events.ccc.de/congress/2013/wiki/Assembly:Sigrok sigrok hackathon]. In addition to the usual &amp;quot;whatever we feel like hacking on&amp;quot;, we also have several architectural decision to make, and doing this in person is a lot easier. If you want to be part of the conversation and decision-making process, show up!&lt;br /&gt;
&lt;br /&gt;
In addition to the 4 days of the congress, we will also get together the day before (26 December 2013) for a hopefully less crowded and more productive day. Venue is not yet decided.&lt;br /&gt;
&lt;br /&gt;
What&amp;#039;s decided here is what goes.&lt;br /&gt;
&lt;br /&gt;
* [[New sigrok file format]]&lt;br /&gt;
* [[Improved Configuration Enumeration]]&lt;br /&gt;
* To sr_filter_probes() or not, that is the question.&lt;br /&gt;
** frontends have probe location info, they pass it to sr_filter_probes() after all&lt;br /&gt;
** very nice for output modules: avoids having to map probe location to bit on &amp;#039;&amp;#039;all&amp;#039;&amp;#039; the modules&lt;br /&gt;
** waste of time for PV, which will soon do its own reformatting of logic data anyway&lt;br /&gt;
** SRD currently needs it, but has a probe mapping mechanism already, so can be adapted&lt;br /&gt;
* Rethinking how we enumerate and assign drivers to hardware&lt;br /&gt;
** Pre-scan for all resources such as serial ports &amp;amp; USB devices&lt;br /&gt;
** How users/frontends resolve ambiguity&lt;br /&gt;
** How to handle &amp;quot;gateway&amp;quot; devices such as GPIB adapters, networked servers with instruments, etc.&lt;br /&gt;
** Device tree model?&lt;br /&gt;
* Testing&lt;br /&gt;
** automated unit tests on commit (SR and SRD)&lt;br /&gt;
** VMs for *BSD, linux dists on kiutl for automated build/unit tests&lt;br /&gt;
** VMs with connected hardware (bert and uwe)?&lt;br /&gt;
* Malloc&lt;br /&gt;
** Decide whether to continue trying to handle malloc failures in libsigrok. These code paths are never tested, would never be executed anyway due to the realities of virtual memory systems [0], and even if we wanted to we could never do everything right because of the extensive use of glib [1]. So what is the use case we are actually targeting here?&lt;br /&gt;
&lt;br /&gt;
====== Notes ======&lt;br /&gt;
# Linux/glibc malloc() fails only when it runs out of address space; you&amp;#039;ll get OOM killed long before malloc() fails.&lt;br /&gt;
# Although glib offers g_try_malloc() which returns NULL on failure, all glib functions that allocate memory internally use g_malloc(), which calls abort() on failure. This is not considered a glib bug and will never be fixed. In many cases it couldn&amp;#039;t even be fixed, without fundamental changes to the glib API, which lacks any mechanisms to signal malloc failure except for the simple g_try_malloc() case.&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=30C3&amp;diff=7775</id>
		<title>30C3</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=30C3&amp;diff=7775"/>
		<updated>2013-12-04T09:28:04Z</updated>

		<summary type="html">&lt;p&gt;Martling: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&amp;#039;re getting together at the annual CCC conference, [https://events.ccc.de/congress/2013/wiki/Main_Page 30C3], for a [https://events.ccc.de/congress/2013/wiki/Assembly:Sigrok sigrok hackathon]. In addition to the usual &amp;quot;whatever we feel like hacking on&amp;quot;, we also have several architectural decision to make, and doing this in person is a lot easier. If you want to be part of the conversation and decision-making process, show up!&lt;br /&gt;
&lt;br /&gt;
In addition to the 4 days of the congress, we will also get together the day before (26 December 2013) for a hopefully less crowded and more productive day. Venue is not yet decided.&lt;br /&gt;
&lt;br /&gt;
What&amp;#039;s decided here is what goes.&lt;br /&gt;
&lt;br /&gt;
* [[New sigrok file format]]&lt;br /&gt;
* [[Improved Configuration Enumeration]]&lt;br /&gt;
* To sr_filter_probes() or not, that is the question.&lt;br /&gt;
** frontends have probe location info, they pass it to sr_filter_probes() after all&lt;br /&gt;
** very nice for output modules: avoids having to map probe location to bit on &amp;#039;&amp;#039;all&amp;#039;&amp;#039; the modules&lt;br /&gt;
** waste of time for PV, which will soon do its own reformatting of logic data anyway&lt;br /&gt;
** SRD currently needs it, but has a probe mapping mechanism already, so can be adapted&lt;br /&gt;
* Rethinking how we enumerate and assign drivers to hardware&lt;br /&gt;
** Pre-scan for all resources such as serial ports &amp;amp; USB devices&lt;br /&gt;
** How users/frontends resolve ambiguity&lt;br /&gt;
** How to handle &amp;quot;gateway&amp;quot; devices such as GPIB adapters, networked servers with instruments, etc.&lt;br /&gt;
** Device tree model?&lt;br /&gt;
* Testing&lt;br /&gt;
** automated unit tests on commit (SR and SRD)&lt;br /&gt;
** VMs for *BSD, linux dists on kiutl for automated build/unit tests&lt;br /&gt;
** VMs with connected hardware (bert and uwe)?&lt;br /&gt;
* Malloc&lt;br /&gt;
** Decide whether to continue trying to handle malloc failures in libsigrok. These code paths are never tested, would never be executed anyway due to the realities of virtual memory systems [0], and we could never get this all even close to being done right because of the extensive use of glib [1]. So what is the use case we are actually targeting here?&lt;br /&gt;
&lt;br /&gt;
====== Notes ======&lt;br /&gt;
# Linux/glibc malloc() fails only when it runs out of address space; you&amp;#039;ll get OOM killed long before malloc() fails.&lt;br /&gt;
# Although glib offers g_try_malloc() which returns NULL on failure, all glib functions that allocate memory internally use g_malloc(), which calls abort() on failure. This is not considered a glib bug and will never be fixed. In many cases it couldn&amp;#039;t even be fixed, without fundamental changes to the glib API, which lacks any mechanisms to signal malloc failure except for the simple g_try_malloc() case.&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=30C3&amp;diff=7774</id>
		<title>30C3</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=30C3&amp;diff=7774"/>
		<updated>2013-12-04T09:24:36Z</updated>

		<summary type="html">&lt;p&gt;Martling: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&amp;#039;re getting together at the annual CCC conference, [https://events.ccc.de/congress/2013/wiki/Main_Page 30C3], for a [https://events.ccc.de/congress/2013/wiki/Assembly:Sigrok sigrok hackathon]. In addition to the usual &amp;quot;whatever we feel like hacking on&amp;quot;, we also have several architectural decision to make, and doing this in person is a lot easier. If you want to be part of the conversation and decision-making process, show up!&lt;br /&gt;
&lt;br /&gt;
In addition to the 4 days of the congress, we will also get together the day before (26 December 2013) for a hopefully less crowded and more productive day. Venue is not yet decided.&lt;br /&gt;
&lt;br /&gt;
What&amp;#039;s decided here is what goes.&lt;br /&gt;
&lt;br /&gt;
* [[New sigrok file format]]&lt;br /&gt;
* [[Improved Configuration Enumeration]]&lt;br /&gt;
* To sr_filter_probes() or not, that is the question.&lt;br /&gt;
** frontends have probe location info, they pass it to sr_filter_probes() after all&lt;br /&gt;
** very nice for output modules: avoids having to map probe location to bit on &amp;#039;&amp;#039;all&amp;#039;&amp;#039; the modules&lt;br /&gt;
** waste of time for PV, which will soon do its own reformatting of logic data anyway&lt;br /&gt;
** SRD currently needs it, but has a probe mapping mechanism already, so can be adapted&lt;br /&gt;
* Rethinking how we enumerate and assign drivers to hardware&lt;br /&gt;
** Pre-scan for all resources such as serial ports &amp;amp; USB devices&lt;br /&gt;
** How users/frontends resolve ambiguity&lt;br /&gt;
** How to handle &amp;quot;gateway&amp;quot; devices such as GPIB adapters, networked servers with instruments, etc.&lt;br /&gt;
** Device tree model?&lt;br /&gt;
* Testing&lt;br /&gt;
** automated unit tests on commit (SR and SRD)&lt;br /&gt;
** VMs for *BSD, linux dists on kiutl for automated build/unit tests&lt;br /&gt;
** VMs with connected hardware (bert and uwe)?&lt;br /&gt;
* Malloc&lt;br /&gt;
** Decide whether to continue trying to handle malloc failures in libsigrok. These code paths are never tested, would never be executed anyway due to the realities of virtual memory systems [0], and we could never get this right anyway because of the extensive use of glib [1]. What is the use case we are targeting here?&lt;br /&gt;
&lt;br /&gt;
====== Notes ======&lt;br /&gt;
# Linux/glibc malloc() fails only when it runs out of address space; you&amp;#039;ll get OOM killed long before malloc() fails.&lt;br /&gt;
# Although glib offers g_try_malloc() which returns NULL on failure, all glib functions that allocate memory internally use g_malloc(), which calls abort() on failure. This is not considered a glib bug and will never be fixed. In many cases it couldn&amp;#039;t even be fixed, without fundamental changes to the glib API, which lacks any mechanisms to signal malloc failure except for the simple g_try_malloc() case.&lt;/div&gt;</summary>
		<author><name>Martling</name></author>
	</entry>
</feed>