<?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=Fo0bar</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=Fo0bar"/>
	<link rel="alternate" type="text/html" href="https://sigrok.org/wiki/Special:Contributions/Fo0bar"/>
	<updated>2026-04-23T10:59:29Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14108</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14108"/>
		<updated>2019-02-15T23:56:11Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;&lt;br /&gt;
| status              = planned&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode), color display (26x26mm, 128x128px)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
The RDTech &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; (~$12 USD), &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; (~$16 USD) and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; (~$18 USD) are USB load meters which can measure various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. They can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). They also allow graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; are extremely similar, but have several differences:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; supports USB-A male / USB-microB female line, USB-A female load.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; supports USB-A male / USB-microB female / USB-C female line, USB-A female / USB-C female load.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; supports USB-A male / USB-microB female / USB-C female line, USB-A female load.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; supports USB 3.0 data passthrough; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; are USB 2.0 only.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; displays and sends 1mV / 0.1mA live resolution, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; are 10mV / 1mA live resolution.  Note that this is applicable for instantaneous view only; aggregates are the same for all three models.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; is maximum 3A current, &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; is 4A, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; is 5A.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; only supports detection of unknown (normal) charging mode, QC2.0 and QC3.0, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; support detecting additional charging modes.  This does not affect the line/load from negotiating a charging mode, just the meter&amp;#039;s ability to detect it.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; have a switch which lets you turn on and off the Bluetooth functionality.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; is not supported by their Apple app, only &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; is the most fully featured of the three, but is missing USB 3.0 data passthrough (&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; only).  If you have to buy one, get the &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, but if possible get both the &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;.  The &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; is a slightly older product feature-wise.&lt;br /&gt;
&lt;br /&gt;
The meter can be connected to power by plugging it into any one of the supported line inputs (see above; the different line options vary by model).  Besides allowing for different connection options, there is a function within the UI to calculate the impedance of a cable by running a test first directly plugged in to a power supply, then unplugging and running again via the cable.  Otherwise, line functionality is identical no matter which line input you choose.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Bluetooth ==&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, these communicate through serial-over-Bluetooth (RFCOMM); the manufacturer provides apps (for Android, Windows and Apple iOS; downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.  On the C models, the Bluetooth board is a separate layer that connects to the serial pads using pogo pins (&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;) or scissor-spring tension pins (&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;).  &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; has a generic open module board with a Beken BK3231 chipset. &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; have a shielded DX-BT18 module board (which should be compatible with HC-05/HC-06).&lt;br /&gt;
&lt;br /&gt;
There is no Enable pin passed between the Bluetooth board and the main board; the model name is (presumably) programmed into the module in Command mode at the factory, and the module is always in Data mode during normal operation.  Communication between the boards is done at 9600 8-N-1.&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; models - the UM24, UM25 and UM34 are the exact same functionality but *without* Bluetooth communication.  The UM25 and UM34 have pads which you could solder a TTL adapter to (if you disassemble the device) and get the same functionality.  The UM24 has pads, but the firmware does not appear to support communication.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
Approximately 500ms after applying power, the device sends 0xff.  However, this is usually before a Bluetooth connection can be established, so the host end will likely never see it.&lt;br /&gt;
&lt;br /&gt;
1-byte commands are sent to the device, and in the case of 0xf0, the device responds with a 130-byte data dump of the current device status.  All other commands return no acknowledgement.&lt;br /&gt;
&lt;br /&gt;
Each device (&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;) has a similar command and response format, but the commands and responses vary slightly by device type.  These variations are documented below.  Unfortunately this means you will need to know what type of device you are communicating with to take full advantage of it.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit (approximately 0.2 seconds) after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device !! Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; || 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf3 || device control || Go to the previous screen&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xa0 - 0xa9 || device control || Set the selected data group (0-9)&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.30 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || unknown || See below&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage - &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;: millivolts (divide by 1000 to get V), &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;: centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage - &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; tenth-milliamps (divide by 10000 to get A), &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;: milliamps (divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode index, see below&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || unknown || See below&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Charging modes ===&lt;br /&gt;
&lt;br /&gt;
Not all devices support detection of all listed charging modes, but the index between devices is consistent (e.g. index 1 will always be QC2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Index !! Display !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || UNKNOWN || Unknown, or normal (non-custom mode)&lt;br /&gt;
|----&lt;br /&gt;
| 1 || QC2 || Qualcomm Quick Charge 2.0&lt;br /&gt;
|----&lt;br /&gt;
| 2 || QC3 || Qualcomm Quick Charge 3.0&lt;br /&gt;
|----&lt;br /&gt;
| 3 || APP2.4A || Apple, max 2.4 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 4 || APP2.1A || Apple, max 2.1 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 5 || APP1.0A || Apple, max 1.0 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 6 || APP0.5A || Apple, max 0.5 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 7 || DCP1.5A || Dedicated Charging Port, max 1.5 Amp (D+ to D- short)&lt;br /&gt;
|----&lt;br /&gt;
| 8 || SAMSUNG || Samsung (Adaptive Fast Charging?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown response fields ===&lt;br /&gt;
&lt;br /&gt;
Bytes 0+1 and 128+129 are not entirely known yet.  They were believed to be device-specific start/stop markers, but some variations have been observed.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;, all observed units seem to be 0x0963/0xfff1 so far.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, 0x0963/0xfff1 and 0x09c9/0xfff1 have been observed on two different units, but they do not appear to change over time on the specific units themselves.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;, all observed units so far have 0x0d4c as the first two bytes, but the last two bytes vary each time the device is polled.  The values drift up and down over time, but will change completely after a device reset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2019-02-09 16:55:35,150 DEBUG: Start: 0x0d4c, end: 0x79cd&lt;br /&gt;
2019-02-09 16:55:47,837 DEBUG: Start: 0x0d4c, end: 0x75f8&lt;br /&gt;
2019-02-09 16:55:49,031 DEBUG: Start: 0x0d4c, end: 0x78c3&lt;br /&gt;
2019-02-09 16:56:08,855 DEBUG: Start: 0x0d4c, end: 0x7bd9&lt;br /&gt;
[reset]&lt;br /&gt;
2019-02-09 16:58:01,091 DEBUG: Start: 0x0d4c, end: 0x2c2d&lt;br /&gt;
2019-02-09 16:58:52,247 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:10,683 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:29,816 DEBUG: Start: 0x0d4c, end: 0x18ea&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These are most likely checksums of some sort.  Here&amp;#039;s some full sample dumps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0d 4c 01 fe 00 00 00 00 00 00 00 14 00 44 00 00 00 00 00 0b 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 07 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 02 00 04 00 01 86 9f 00 00 68 8c&lt;br /&gt;
0d 4c 01 fe 00 00 00 00 00 00 00 14 00 45 00 00 00 00 00 0b 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 02 00 04 00 01 86 9f 00 00 68 8d&lt;br /&gt;
0d 4c 01 fe 00 00 00 00 00 00 00 15 00 46 00 00 00 00 00 0b 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 02 00 04 00 01 86 9f 00 00 68 8d&lt;br /&gt;
0d 4c 01 fe 00 00 00 00 00 00 00 15 00 46 00 00 00 00 00 0b 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 02 00 04 00 01 86 9f 00 00 68 8d&lt;br /&gt;
0d 4c 01 fc 00 00 00 00 00 00 00 15 00 46 00 00 00 00 00 0b 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 02 00 04 00 01 86 9f 00 00 68 8f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Samples 3 and 4 are identical, but were captured at different times.  Samples 1 and 2 have two bytes different (44 -&amp;gt; 45 earlier and 01 -&amp;gt; 00 later) which should have an identical result if it were a simple sum, but result in 688c -&amp;gt; 688d.  Samples 2 and 3 have two bytes different (14 -&amp;gt; 15 and 45 -&amp;gt; 46, a cumulative difference of 2), but both result in 688d.  Samples 4 and 5 have one byte different (fe -&amp;gt; fc), but result in 688d -&amp;gt; 688f.&lt;br /&gt;
&lt;br /&gt;
All of these suggest some sort of &amp;quot;add if even or subtract if odd&amp;quot; iteration, but I haven&amp;#039;t been able to find a process which results in the expected checksum differences.&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://rdtech.aliexpress.com/store/923042 RDTech AliExpress store]&lt;br /&gt;
* [https://github.com/rfinnie/rdumtool rdumtool - RDTech &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; Bluetooth interface tool] (Python 3)&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Multimeter]]&lt;br /&gt;
[[Category:Planned‏‎]]&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14092</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14092"/>
		<updated>2019-02-10T18:04:52Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: Add info about BT chipsets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;&lt;br /&gt;
| status              = planned&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode), color display (26x26mm, 128x128px)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
The RDTech &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; (~$12 USD), &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; (~$16 USD) and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; (~$18 USD) are USB load meters which can measure various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. They can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). They also allow graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; are extremely similar, but have several differences:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; supports USB-A male / USB-microB female line, USB-A female load.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; supports USB-A male / USB-microB female / USB-C female line, USB-A female / USB-C female load.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; supports USB-A male / USB-microB female / USB-C female line, USB-A female load.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; supports USB 3.0 data passthrough; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; are USB 2.0 only.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; displays and sends 1mV / 0.1mA live resolution, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; are 10mV / 1mA live resolution.  Note that this is applicable for instantaneous view only; aggregates are the same for all three models.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; is maximum 3A current, &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; is 4A, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; is 5A.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; only supports detection of unknown (normal) charging mode, QC2.0 and QC3.0, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; support detecting additional charging modes.  This does not affect the line/load from negotiating a charging mode, just the meter&amp;#039;s ability to detect it.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; have a switch which lets you turn on and off the Bluetooth functionality.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; is not supported by their Apple app, only &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; is the most fully featured of the three, but is missing USB 3.0 data passthrough (&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; only).  If you have to buy one, get the &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, but if possible get both the &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;.  The &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; is a slightly older product feature-wise.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, these communicate through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.  On the C models, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins (&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;) or scissor-spring tension pins (&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;).  &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; has a generic open module board with a Beken BK3231 chipset. &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; have a shielded DX-BT18 module board (which should be compatible with HC-05/HC-06).&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; models - the UM24, UM25 and UM34 are the exact same functionality but *without* Bluetooth communication.  The UM25 and UM34 have pads which you could solder a TTL adapter to (if you disassemble the device) and get the same functionality.  The UM24 has pads, but the firmware does not appear to support communication.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The meter can be connected to power by plugging it into any one of the supported line inputs (see above; the different line options vary by model).  Besides allowing for different connection options, there is a function within the UI to calculate the impedance of a cable by running a test first directly plugged in to a power supply, then unplugging and running again via the cable.  Otherwise, line functionality is identical no matter which line input you choose.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
1-byte commands are sent to the device, and in the case of 0xf0, the device responds with a 130-byte data dump of the current device status.  All other commands return no acknowledgement.&lt;br /&gt;
&lt;br /&gt;
Each device (&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;) has a similar command and response format, but the commands and responses vary slightly by device type.  These variations are documented below.  Unfortunately this means you will need to know what type of device you are communicating with to take full advantage of it.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit (approximately 0.2 seconds) after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device !! Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; || 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf3 || device control || Go to the previous screen&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xa0 - 0xa9 || device control || Set the selected data group (0-9)&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.30 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || unknown || See below&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage - &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;: millivolts (divide by 1000 to get V), &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;: centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage - &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; tenth-milliamps (divide by 10000 to get A), &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;: milliamps (divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode index, see below&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || unknown || See below&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Charging modes ===&lt;br /&gt;
&lt;br /&gt;
Not all devices support detection of all listed charging modes, but the index between devices is consistent (e.g. index 1 will always be QC2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Index !! Display !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || UNKNOWN || Unknown, or normal (non-custom mode)&lt;br /&gt;
|----&lt;br /&gt;
| 1 || QC2 || Qualcomm Quick Charge 2.0&lt;br /&gt;
|----&lt;br /&gt;
| 2 || QC3 || Qualcomm Quick Charge 3.0&lt;br /&gt;
|----&lt;br /&gt;
| 3 || APP2.4A || Apple, max 2.4 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 4 || APP2.1A || Apple, max 2.1 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 5 || APP1.0A || Apple, max 1.0 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 6 || APP0.5A || Apple, max 0.5 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 7 || DCP1.5A || Dedicated Charging Port, max 1.5 Amp (D+ to D- short)&lt;br /&gt;
|----&lt;br /&gt;
| 8 || SAMSUNG || Samsung (Adaptive Fast Charging?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown response fields ===&lt;br /&gt;
&lt;br /&gt;
Bytes 0+1 and 128+129 are not entirely known yet.  They were believed to be device-specific start/stop markers, but some variations have been observed.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;, all observed units seem to be 0x0963/0xfff1 so far.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, 0x0963/0xfff1 and 0x09c9/0xfff1 have been observed on two different units, but they do not appear to change over time on the specific units themselves.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;, all observed units so far have 0x0d4c as the first two bytes, but the last two bytes vary each time the device is polled.  The values drift up and down over time, but will change completely after a device reset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2019-02-09 16:55:35,150 DEBUG: Start: 0x0d4c, end: 0x79cd&lt;br /&gt;
2019-02-09 16:55:47,837 DEBUG: Start: 0x0d4c, end: 0x75f8&lt;br /&gt;
2019-02-09 16:55:49,031 DEBUG: Start: 0x0d4c, end: 0x78c3&lt;br /&gt;
2019-02-09 16:56:08,855 DEBUG: Start: 0x0d4c, end: 0x7bd9&lt;br /&gt;
[reset]&lt;br /&gt;
2019-02-09 16:58:01,091 DEBUG: Start: 0x0d4c, end: 0x2c2d&lt;br /&gt;
2019-02-09 16:58:52,247 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:10,683 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:29,816 DEBUG: Start: 0x0d4c, end: 0x18ea&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These are most likely checksums of some sort.  Here&amp;#039;s some full sample dumps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0d 4c 01 fe 00 00 00 00 00 00 00 14 00 44 00 00 00 00 00 0b 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 07 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 02 00 04 00 01 86 9f 00 00 68 8c&lt;br /&gt;
0d 4c 01 fe 00 00 00 00 00 00 00 14 00 45 00 00 00 00 00 0b 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 02 00 04 00 01 86 9f 00 00 68 8d&lt;br /&gt;
0d 4c 01 fe 00 00 00 00 00 00 00 15 00 46 00 00 00 00 00 0b 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 02 00 04 00 01 86 9f 00 00 68 8d&lt;br /&gt;
0d 4c 01 fe 00 00 00 00 00 00 00 15 00 46 00 00 00 00 00 0b 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 02 00 04 00 01 86 9f 00 00 68 8d&lt;br /&gt;
0d 4c 01 fc 00 00 00 00 00 00 00 15 00 46 00 00 00 00 00 0b 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 02 00 04 00 01 86 9f 00 00 68 8f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Samples 3 and 4 are identical, but were captured at different times.  Samples 1 and 2 have two bytes different (44 -&amp;gt; 45 earlier and 01 -&amp;gt; 00 later) which should have an identical result if it were a simple sum, but result in 688c -&amp;gt; 688d.  Samples 2 and 3 have two bytes different (14 -&amp;gt; 15 and 45 -&amp;gt; 46, a cumulative difference of 2), but both result in 688d.  Samples 4 and 5 have one byte different (fe -&amp;gt; fc), but result in 688d -&amp;gt; 688f.&lt;br /&gt;
&lt;br /&gt;
All of these suggest some sort of &amp;quot;add if even or subtract if odd&amp;quot; iteration, but I haven&amp;#039;t been able to find a process which results in the expected checksum differences.&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://rdtech.aliexpress.com/store/923042 RDTech AliExpress store]&lt;br /&gt;
* [https://github.com/rfinnie/rdumtool rdumtool - RDTech &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; Bluetooth interface tool] (Python 3)&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Multimeter]]&lt;br /&gt;
[[Category:Planned‏‎]]&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14091</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14091"/>
		<updated>2019-02-10T08:47:28Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: /* Unknown response fields */ Checksum speculations&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;&lt;br /&gt;
| status              = planned&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode), color display (26x26mm, 128x128px)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
The RDTech &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; (~$12 USD), &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; (~$16 USD) and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; (~$18 USD) are USB load meters which can measure various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. They can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). They also allow graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; are extremely similar, but have several differences:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; supports USB-A male / USB-microB female line, USB-A female load.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; supports USB-A male / USB-microB female / USB-C female line, USB-A female / USB-C female load.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; supports USB-A male / USB-microB female / USB-C female line, USB-A female load.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; supports USB 3.0 data passthrough; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; are USB 2.0 only.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; displays and sends 1mV / 0.1mA live resolution, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; are 10mV / 1mA live resolution.  Note that this is applicable for instantaneous view only; aggregates are the same for all three models.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; is maximum 3A current, &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; is 4A, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; is 5A.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; only supports detection of unknown (normal) charging mode, QC2.0 and QC3.0, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; support detecting additional charging modes.  This does not affect the line/load from negotiating a charging mode, just the meter&amp;#039;s ability to detect it.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; have a switch which lets you turn on and off the Bluetooth functionality.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; is not supported by their Apple app, only &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; is the most fully featured of the three, but is missing USB 3.0 data passthrough (&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; only).  If you have to buy one, get the &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, but if possible get both the &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;.  The &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; is a slightly older product feature-wise.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, these communicate through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.  On the C models, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins (&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;) or scissor-spring tension pins (&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; models - the UM24, UM25 and UM34 are the exact same functionality but *without* Bluetooth communication.  The UM25 and UM34 have pads which you could solder a TTL adapter to (if you disassemble the device) and get the same functionality.  The UM24 has pads, but the firmware does not appear to support communication.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The meter can be connected to power by plugging it into any one of the supported line inputs (see above; the different line options vary by model).  Besides allowing for different connection options, there is a function within the UI to calculate the impedance of a cable by running a test first directly plugged in to a power supply, then unplugging and running again via the cable.  Otherwise, line functionality is identical no matter which line input you choose.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
1-byte commands are sent to the device, and in the case of 0xf0, the device responds with a 130-byte data dump of the current device status.  All other commands return no acknowledgement.&lt;br /&gt;
&lt;br /&gt;
Each device (&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;) has a similar command and response format, but the commands and responses vary slightly by device type.  These variations are documented below.  Unfortunately this means you will need to know what type of device you are communicating with to take full advantage of it.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit (approximately 0.2 seconds) after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device !! Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; || 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf3 || device control || Go to the previous screen&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xa0 - 0xa9 || device control || Set the selected data group (0-9)&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.30 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || unknown || See below&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage - &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;: millivolts (divide by 1000 to get V), &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;: centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage - &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; tenth-milliamps (divide by 10000 to get A), &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;: milliamps (divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode index, see below&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || unknown || See below&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Charging modes ===&lt;br /&gt;
&lt;br /&gt;
Not all devices support detection of all listed charging modes, but the index between devices is consistent (e.g. index 1 will always be QC2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Index !! Display !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || UNKNOWN || Unknown, or normal (non-custom mode)&lt;br /&gt;
|----&lt;br /&gt;
| 1 || QC2 || Qualcomm Quick Charge 2.0&lt;br /&gt;
|----&lt;br /&gt;
| 2 || QC3 || Qualcomm Quick Charge 3.0&lt;br /&gt;
|----&lt;br /&gt;
| 3 || APP2.4A || Apple, max 2.4 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 4 || APP2.1A || Apple, max 2.1 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 5 || APP1.0A || Apple, max 1.0 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 6 || APP0.5A || Apple, max 0.5 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 7 || DCP1.5A || Dedicated Charging Port, max 1.5 Amp (D+ to D- short)&lt;br /&gt;
|----&lt;br /&gt;
| 8 || SAMSUNG || Samsung (Adaptive Fast Charging?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown response fields ===&lt;br /&gt;
&lt;br /&gt;
Bytes 0+1 and 128+129 are not entirely known yet.  They were believed to be device-specific start/stop markers, but some variations have been observed.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;, all observed units seem to be 0x0963/0xfff1 so far.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, 0x0963/0xfff1 and 0x09c9/0xfff1 have been observed on two different units, but they do not appear to change over time on the specific units themselves.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;, all observed units so far have 0x0d4c as the first two bytes, but the last two bytes vary each time the device is polled.  The values drift up and down over time, but will change completely after a device reset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2019-02-09 16:55:35,150 DEBUG: Start: 0x0d4c, end: 0x79cd&lt;br /&gt;
2019-02-09 16:55:47,837 DEBUG: Start: 0x0d4c, end: 0x75f8&lt;br /&gt;
2019-02-09 16:55:49,031 DEBUG: Start: 0x0d4c, end: 0x78c3&lt;br /&gt;
2019-02-09 16:56:08,855 DEBUG: Start: 0x0d4c, end: 0x7bd9&lt;br /&gt;
[reset]&lt;br /&gt;
2019-02-09 16:58:01,091 DEBUG: Start: 0x0d4c, end: 0x2c2d&lt;br /&gt;
2019-02-09 16:58:52,247 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:10,683 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:29,816 DEBUG: Start: 0x0d4c, end: 0x18ea&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These are most likely checksums of some sort.  Here&amp;#039;s some full sample dumps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0d 4c 01 fe 00 00 00 00 00 00 00 14 00 44 00 00 00 00 00 0b 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 07 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 02 00 04 00 01 86 9f 00 00 68 8c&lt;br /&gt;
0d 4c 01 fe 00 00 00 00 00 00 00 14 00 45 00 00 00 00 00 0b 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 02 00 04 00 01 86 9f 00 00 68 8d&lt;br /&gt;
0d 4c 01 fe 00 00 00 00 00 00 00 15 00 46 00 00 00 00 00 0b 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 02 00 04 00 01 86 9f 00 00 68 8d&lt;br /&gt;
0d 4c 01 fe 00 00 00 00 00 00 00 15 00 46 00 00 00 00 00 0b 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 02 00 04 00 01 86 9f 00 00 68 8d&lt;br /&gt;
0d 4c 01 fc 00 00 00 00 00 00 00 15 00 46 00 00 00 00 00 0b 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 02 00 04 00 01 86 9f 00 00 68 8f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Samples 3 and 4 are identical, but were captured at different times.  Samples 1 and 2 have two bytes different (44 -&amp;gt; 45 earlier and 01 -&amp;gt; 00 later) which should have an identical result if it were a simple sum, but result in 688c -&amp;gt; 688d.  Samples 2 and 3 have two bytes different (14 -&amp;gt; 15 and 45 -&amp;gt; 46, a cumulative difference of 2), but both result in 688d.  Samples 4 and 5 have one byte different (fe -&amp;gt; fc), but result in 688d -&amp;gt; 688f.&lt;br /&gt;
&lt;br /&gt;
All of these suggest some sort of &amp;quot;add if even or subtract if odd&amp;quot; iteration, but I haven&amp;#039;t been able to find a process which results in the expected checksum differences.&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://rdtech.aliexpress.com/store/923042 RDTech AliExpress store]&lt;br /&gt;
* [https://github.com/rfinnie/rdumtool rdumtool - RDTech &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; Bluetooth interface tool] (Python 3)&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Multimeter]]&lt;br /&gt;
[[Category:Planned‏‎]]&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14090</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14090"/>
		<updated>2019-02-10T06:45:47Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: Update explanation of line inputs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;&lt;br /&gt;
| status              = planned&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode), color display (26x26mm, 128x128px)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
The RDTech &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; (~$12 USD), &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; (~$16 USD) and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; (~$18 USD) are USB load meters which can measure various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. They can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). They also allow graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; are extremely similar, but have several differences:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; supports USB-A male / USB-microB female line, USB-A female load.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; supports USB-A male / USB-microB female / USB-C female line, USB-A female / USB-C female load.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; supports USB-A male / USB-microB female / USB-C female line, USB-A female load.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; supports USB 3.0 data passthrough; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; are USB 2.0 only.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; displays and sends 1mV / 0.1mA live resolution, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; are 10mV / 1mA live resolution.  Note that this is applicable for instantaneous view only; aggregates are the same for all three models.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; is maximum 3A current, &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; is 4A, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; is 5A.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; only supports detection of unknown (normal) charging mode, QC2.0 and QC3.0, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; support detecting additional charging modes.  This does not affect the line/load from negotiating a charging mode, just the meter&amp;#039;s ability to detect it.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; have a switch which lets you turn on and off the Bluetooth functionality.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; is not supported by their Apple app, only &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; is the most fully featured of the three, but is missing USB 3.0 data passthrough (&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; only).  If you have to buy one, get the &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, but if possible get both the &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;.  The &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; is a slightly older product feature-wise.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, these communicate through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.  On the C models, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins (&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;) or scissor-spring tension pins (&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; models - the UM24, UM25 and UM34 are the exact same functionality but *without* Bluetooth communication.  The UM25 and UM34 have pads which you could solder a TTL adapter to (if you disassemble the device) and get the same functionality.  The UM24 has pads, but the firmware does not appear to support communication.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The meter can be connected to power by plugging it into any one of the supported line inputs (see above; the different line options vary by model).  Besides allowing for different connection options, there is a function within the UI to calculate the impedance of a cable by running a test first directly plugged in to a power supply, then unplugging and running again via the cable.  Otherwise, line functionality is identical no matter which line input you choose.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
1-byte commands are sent to the device, and in the case of 0xf0, the device responds with a 130-byte data dump of the current device status.  All other commands return no acknowledgement.&lt;br /&gt;
&lt;br /&gt;
Each device (&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;) has a similar command and response format, but the commands and responses vary slightly by device type.  These variations are documented below.  Unfortunately this means you will need to know what type of device you are communicating with to take full advantage of it.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit (approximately 0.2 seconds) after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device !! Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; || 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf3 || device control || Go to the previous screen&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xa0 - 0xa9 || device control || Set the selected data group (0-9)&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.30 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || unknown || See below&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage - &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;: millivolts (divide by 1000 to get V), &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;: centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage - &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; tenth-milliamps (divide by 10000 to get A), &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;: milliamps (divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode index, see below&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || unknown || See below&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Charging modes ===&lt;br /&gt;
&lt;br /&gt;
Not all devices support detection of all listed charging modes, but the index between devices is consistent (e.g. index 1 will always be QC2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Index !! Display !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || UNKNOWN || Unknown, or normal (non-custom mode)&lt;br /&gt;
|----&lt;br /&gt;
| 1 || QC2 || Qualcomm Quick Charge 2.0&lt;br /&gt;
|----&lt;br /&gt;
| 2 || QC3 || Qualcomm Quick Charge 3.0&lt;br /&gt;
|----&lt;br /&gt;
| 3 || APP2.4A || Apple, max 2.4 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 4 || APP2.1A || Apple, max 2.1 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 5 || APP1.0A || Apple, max 1.0 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 6 || APP0.5A || Apple, max 0.5 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 7 || DCP1.5A || Dedicated Charging Port, max 1.5 Amp (D+ to D- short)&lt;br /&gt;
|----&lt;br /&gt;
| 8 || SAMSUNG || Samsung (Adaptive Fast Charging?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown response fields ===&lt;br /&gt;
&lt;br /&gt;
Bytes 0+1 and 128+129 are not entirely known yet.  They were believed to be device-specific start/stop markers, but some variations have been observed.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;, all observed units seem to be 0x0963/0xfff1 so far.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, 0x0963/0xfff1 and 0x09c9/0xfff1 have been observed on two different units, but they do not appear to change over time on the specific units themselves.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;, all observed units so far have 0x0d4c as the first two bytes, but the last two bytes vary each time the device is polled.  The values drift up and down over time, but will change completely after a device reset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2019-02-09 16:55:35,150 DEBUG: Start: 0x0d4c, end: 0x79cd&lt;br /&gt;
2019-02-09 16:55:47,837 DEBUG: Start: 0x0d4c, end: 0x75f8&lt;br /&gt;
2019-02-09 16:55:49,031 DEBUG: Start: 0x0d4c, end: 0x78c3&lt;br /&gt;
2019-02-09 16:56:08,855 DEBUG: Start: 0x0d4c, end: 0x7bd9&lt;br /&gt;
[reset]&lt;br /&gt;
2019-02-09 16:58:01,091 DEBUG: Start: 0x0d4c, end: 0x2c2d&lt;br /&gt;
2019-02-09 16:58:52,247 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:10,683 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:29,816 DEBUG: Start: 0x0d4c, end: 0x18ea&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://rdtech.aliexpress.com/store/923042 RDTech AliExpress store]&lt;br /&gt;
* [https://github.com/rfinnie/rdumtool rdumtool - RDTech &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; Bluetooth interface tool] (Python 3)&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Multimeter]]&lt;br /&gt;
[[Category:Planned‏‎]]&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14089</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14089"/>
		<updated>2019-02-10T06:31:14Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: Stylize model names by their body colors, since the names look very similar and are hard to separate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;&lt;br /&gt;
| status              = planned&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode), color display (26x26mm, 128x128px)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
The RDTech &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; (~$12 USD), &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; (~$16 USD) and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; (~$18 USD) are USB load meters which can measure various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. They can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). They also allow graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; are extremely similar, but have several differences:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; supports USB-A male / USB-microB female line, USB-A female load.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; supports USB-A male / USB-microB female / USB-C female line, USB-A female / USB-C female load.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; supports USB-A male / USB-microB female / USB-C female line, USB-A female load.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; supports USB 3.0 data passthrough; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; are USB 2.0 only.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; displays and sends 1mV / 0.1mA live resolution, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; are 10mV / 1mA live resolution.  Note that this is applicable for instantaneous view only; aggregates are the same for all three models.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; is maximum 3A current, &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; is 4A, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; is 5A.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; only supports detection of unknown (normal) charging mode, QC2.0 and QC3.0, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; support detecting additional charging modes.  This does not affect the line/load from negotiating a charging mode, just the meter&amp;#039;s ability to detect it.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; have a switch which lets you turn on and off the Bluetooth functionality.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; is not supported by their Apple app, only &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; is the most fully featured of the three, but is missing USB 3.0 data passthrough (&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; only).  If you have to buy one, get the &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, but if possible get both the &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;.  The &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; is a slightly older product feature-wise.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, these communicate through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.  On the C models, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins (&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;) or scissor-spring tension pins (&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; models - the UM24, UM25 and UM34 are the exact same functionality but *without* Bluetooth communication.  The UM25 and UM34 have pads which you could solder a TTL adapter to (if you disassemble the device) and get the same functionality.  The UM24 has pads, but the firmware does not appear to support communication.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
1-byte commands are sent to the device, and in the case of 0xf0, the device responds with a 130-byte data dump of the current device status.  All other commands return no acknowledgement.&lt;br /&gt;
&lt;br /&gt;
Each device (&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;) has a similar command and response format, but the commands and responses vary slightly by device type.  These variations are documented below.  Unfortunately this means you will need to know what type of device you are communicating with to take full advantage of it.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit (approximately 0.2 seconds) after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device !! Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; || 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf3 || device control || Go to the previous screen&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xa0 - 0xa9 || device control || Set the selected data group (0-9)&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.30 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; || 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || unknown || See below&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage - &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;: millivolts (divide by 1000 to get V), &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;: centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage - &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt; tenth-milliamps (divide by 10000 to get A), &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;: milliamps (divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode index, see below&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || unknown || See below&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Charging modes ===&lt;br /&gt;
&lt;br /&gt;
Not all devices support detection of all listed charging modes, but the index between devices is consistent (e.g. index 1 will always be QC2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Index !! Display !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || UNKNOWN || Unknown, or normal (non-custom mode)&lt;br /&gt;
|----&lt;br /&gt;
| 1 || QC2 || Qualcomm Quick Charge 2.0&lt;br /&gt;
|----&lt;br /&gt;
| 2 || QC3 || Qualcomm Quick Charge 3.0&lt;br /&gt;
|----&lt;br /&gt;
| 3 || APP2.4A || Apple, max 2.4 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 4 || APP2.1A || Apple, max 2.1 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 5 || APP1.0A || Apple, max 1.0 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 6 || APP0.5A || Apple, max 0.5 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 7 || DCP1.5A || Dedicated Charging Port, max 1.5 Amp (D+ to D- short)&lt;br /&gt;
|----&lt;br /&gt;
| 8 || SAMSUNG || Samsung (Adaptive Fast Charging?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown response fields ===&lt;br /&gt;
&lt;br /&gt;
Bytes 0+1 and 128+129 are not entirely known yet.  They were believed to be device-specific start/stop markers, but some variations have been observed.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;, all observed units seem to be 0x0963/0xfff1 so far.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;, 0x0963/0xfff1 and 0x09c9/0xfff1 have been observed on two different units, but they do not appear to change over time on the specific units themselves.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt;, all observed units so far have 0x0d4c as the first two bytes, but the last two bytes vary each time the device is polled.  The values drift up and down over time, but will change completely after a device reset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2019-02-09 16:55:35,150 DEBUG: Start: 0x0d4c, end: 0x79cd&lt;br /&gt;
2019-02-09 16:55:47,837 DEBUG: Start: 0x0d4c, end: 0x75f8&lt;br /&gt;
2019-02-09 16:55:49,031 DEBUG: Start: 0x0d4c, end: 0x78c3&lt;br /&gt;
2019-02-09 16:56:08,855 DEBUG: Start: 0x0d4c, end: 0x7bd9&lt;br /&gt;
[reset]&lt;br /&gt;
2019-02-09 16:58:01,091 DEBUG: Start: 0x0d4c, end: 0x2c2d&lt;br /&gt;
2019-02-09 16:58:52,247 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:10,683 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:29,816 DEBUG: Start: 0x0d4c, end: 0x18ea&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://rdtech.aliexpress.com/store/923042 RDTech AliExpress store]&lt;br /&gt;
* [https://github.com/rfinnie/rdumtool rdumtool - RDTech &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;UM24C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;UM25C&amp;lt;/span&amp;gt;/&amp;lt;span style=&amp;quot;color:darkorange&amp;quot;&amp;gt;UM34C&amp;lt;/span&amp;gt; Bluetooth interface tool] (Python 3)&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Multimeter]]&lt;br /&gt;
[[Category:Planned‏‎]]&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14088</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14088"/>
		<updated>2019-02-10T06:16:50Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech UM24C/UM25C/UM34C&lt;br /&gt;
| status              = planned&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode), color display (26x26mm, 128x128px)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
The RDTech UM24C (~$12 USD), UM25C (~$16 USD) and UM34C (~$18 USD) are USB load meters which can measure various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. They can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). They also allow graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
The UM24C, UM25C and UM34C are extremely similar, but have several differences:&lt;br /&gt;
&lt;br /&gt;
* UM24C supports USB-A male / USB-microB female line, USB-A female load.&lt;br /&gt;
* UM25C supports USB-A male / USB-microB female / USB-C female line, USB-A female / USB-C female load.&lt;br /&gt;
* UM34C supports USB-A male / USB-microB female / USB-C female line, USB-A female load.&lt;br /&gt;
* UM34C supports USB 3.0 data passthrough; UM24C/UM25C are USB 2.0 only.&lt;br /&gt;
* UM25C displays and sends 1mV / 0.1mA live resolution, UM24C/UM34C are 10mV / 1mA live resolution.  Note that this is applicable for instantaneous view only; aggregates are the same for all three models.&lt;br /&gt;
* UM24C is maximum 3A current, UM34C is 4A, UM25C is 5A.&lt;br /&gt;
* UM24C only supports detection of unknown (normal) charging mode, QC2.0 and QC3.0, UM25C and UM34C support detecting additional charging modes.  This does not affect the line/load from negotiating a charging mode, just the meter&amp;#039;s ability to detect it.&lt;br /&gt;
* UM25C and UM34C have a switch which lets you turn on and off the Bluetooth functionality.&lt;br /&gt;
* UM24C is not supported by their Apple app, only UM25C and UM34C.&lt;br /&gt;
&lt;br /&gt;
The UM25C is the most fully featured of the three, but is missing USB 3.0 data passthrough (UM34C only).  If you have to buy one, get the UM25C, but if possible get both the UM25C and UM34C.  The UM24C is a slightly older product feature-wise.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, these communicate through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.  On the C models, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins (UM24C) or scissor-spring tension pins (UM25C, UM34C).&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; models - the UM24, UM25 and UM34 are the exact same functionality but *without* Bluetooth communication.  The UM25 and UM34 have pads which you could solder a TTL adapter to (if you disassemble the device) and get the same functionality.  The UM24 has pads, but the firmware does not appear to support communication.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
1-byte commands are sent to the device, and in the case of 0xf0, the device responds with a 130-byte data dump of the current device status.  All other commands return no acknowledgement.&lt;br /&gt;
&lt;br /&gt;
Each device (UM24C, UM25C, UM34C) has a similar command and response format, but the commands and responses vary slightly by device type.  These variations are documented below.  Unfortunately this means you will need to know what type of device you are communicating with to take full advantage of it.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit (approximately 0.2 seconds) after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device !! Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C || 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| UM25C/UM34C || 0xf3 || device control || Go to the previous screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| UM25C/UM34C || 0xa0 - 0xa9 || device control || Set the selected data group (0-9)&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.30 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || unknown || See below&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage - UM25C: millivolts (divide by 1000 to get V), UM24C/UM34C: centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage - UM25C tenth-milliamps (divide by 10000 to get A), UM24C/UM34C: milliamps (divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode index, see below&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || unknown || See below&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Charging modes ===&lt;br /&gt;
&lt;br /&gt;
Not all devices support detection of all listed charging modes, but the index between devices is consistent (e.g. index 1 will always be QC2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Index !! Display !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || UNKNOWN || Unknown, or normal (non-custom mode)&lt;br /&gt;
|----&lt;br /&gt;
| 1 || QC2 || Qualcomm Quick Charge 2.0&lt;br /&gt;
|----&lt;br /&gt;
| 2 || QC3 || Qualcomm Quick Charge 3.0&lt;br /&gt;
|----&lt;br /&gt;
| 3 || APP2.4A || Apple, max 2.4 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 4 || APP2.1A || Apple, max 2.1 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 5 || APP1.0A || Apple, max 1.0 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 6 || APP0.5A || Apple, max 0.5 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 7 || DCP1.5A || Dedicated Charging Port, max 1.5 Amp (D+ to D- short)&lt;br /&gt;
|----&lt;br /&gt;
| 8 || SAMSUNG || Samsung (Adaptive Fast Charging?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown response fields ===&lt;br /&gt;
&lt;br /&gt;
Bytes 0+1 and 128+129 are not entirely known yet.  They were believed to be device-specific start/stop markers, but some variations have been observed.&lt;br /&gt;
&lt;br /&gt;
On UM24C, all observed units seem to be 0x0963/0xfff1 so far.&lt;br /&gt;
&lt;br /&gt;
On UM25C, 0x0963/0xfff1 and 0x09c9/0xfff1 have been observed on two different units, but they do not appear to change over time on the specific units themselves.&lt;br /&gt;
&lt;br /&gt;
On UM34C, all observed units so far have 0x0d4c as the first two bytes, but the last two bytes vary each time the device is polled.  The values drift up and down over time, but will change completely after a device reset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2019-02-09 16:55:35,150 DEBUG: Start: 0x0d4c, end: 0x79cd&lt;br /&gt;
2019-02-09 16:55:47,837 DEBUG: Start: 0x0d4c, end: 0x75f8&lt;br /&gt;
2019-02-09 16:55:49,031 DEBUG: Start: 0x0d4c, end: 0x78c3&lt;br /&gt;
2019-02-09 16:56:08,855 DEBUG: Start: 0x0d4c, end: 0x7bd9&lt;br /&gt;
[reset]&lt;br /&gt;
2019-02-09 16:58:01,091 DEBUG: Start: 0x0d4c, end: 0x2c2d&lt;br /&gt;
2019-02-09 16:58:52,247 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:10,683 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:29,816 DEBUG: Start: 0x0d4c, end: 0x18ea&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
=== UM24C ===&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://rdtech.aliexpress.com/store/923042 RDTech AliExpress store]&lt;br /&gt;
* [https://github.com/rfinnie/rdumtool rdumtool - RDTech UM24C/UM25C/UM34C Bluetooth interface tool] (Python 3)&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Multimeter]]&lt;br /&gt;
[[Category:Planned‏‎]]&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14087</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14087"/>
		<updated>2019-02-10T05:12:44Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: Fix typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech UM24C/UM25C/UM34C&lt;br /&gt;
| status              = planned&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode), color display (26x26mm, 128x128px)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
The RDTech UM24C (~$12 USD), UM25C (~$16 USD) and UM34C (~$18 USD) are USB load meters which can measure various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. They can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). They also allow graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
The UM24C, UM25C and UM34C are extremely similar, but have several differences:&lt;br /&gt;
&lt;br /&gt;
* UM24C supports USB-A male / USB-microB female line, USB-A female load.&lt;br /&gt;
* UM25C supports USB-A male / USB-microB female / USB-C female line, USB-A female / USB-C female load.&lt;br /&gt;
* UM34C supports USB-A male / USB-microB female / USB-C female line, USB-A female load.&lt;br /&gt;
* UM34C supports USB 3.0 data passthrough; UM24C/UM25C are USB 2.0 only.&lt;br /&gt;
* UM25C displays and sends 1mV / 0.1mA live resolution, UM24C/UM34C are 10mV / 1mA live resolution.  Note that this is applicable for instantaneous view only; aggregates are the same for all three models.&lt;br /&gt;
* UM24C is maximum 3A current, UM34C is 4A, UM25C is 5A.&lt;br /&gt;
* UM24C only supports detection of unknown (normal) charging mode, QC2.0 and QC3.0, UM25C and UM34C support detecting additional charging modes.  This does not affect the line/load from negotiating a charging mode, just the meter&amp;#039;s ability to detect it.&lt;br /&gt;
* UM24C is not supported by their Apple app, only UM25C and UM34C.&lt;br /&gt;
&lt;br /&gt;
The UM25C is the most fully featured of the three, but is missing USB 3.0 data passthrough (UM34C only).  If you have to buy one, get the UM25C, but if possible get both the UM25C and UM34C.  The UM24C is a slightly older product feature-wise.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, these communicate through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.  On the C models, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins (UM24C) or scissor-spring tension pins (UM25C, UM34C).&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; models - the UM24, UM25 and UM34 are the exact same functionality but *without* Bluetooth communication.  The UM25 and UM34 have pads which you could solder a TTL adapter to (if you disassemble the device) and get the same functionality.  The UM24 has pads, but the firmware does not appear to support communication.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
1-byte commands are sent to the device, and in the case of 0xf0, the device responds with a 130-byte data dump of the current device status.  All other commands return no acknowledgement.&lt;br /&gt;
&lt;br /&gt;
Each device (UM24C, UM25C, UM34C) has a similar command and response format, but the commands and responses vary slightly by device type.  These variations are documented below.  Unfortunately this means you will need to know what type of device you are communicating with to take full advantage of it.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit (approximately 0.2 seconds) after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device !! Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C || 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| UM25C/UM34C || 0xf3 || device control || Go to the previous screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| UM25C/UM34C || 0xa0 - 0xa9 || device control || Set the selected data group (0-9)&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.30 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || unknown || See below&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage - UM25C: millivolts (divide by 1000 to get V), UM24C/UM34C: centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage - UM25C tenth-milliamps (divide by 10000 to get A), UM24C/UM34C: milliamps (divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode index, see below&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || unknown || See below&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Charging modes ===&lt;br /&gt;
&lt;br /&gt;
Not all devices support detection of all listed charging modes, but the index between devices is consistent (e.g. index 1 will always be QC2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Index !! Display !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || UNKNOWN || Unknown, or normal (non-custom mode)&lt;br /&gt;
|----&lt;br /&gt;
| 1 || QC2 || Qualcomm Quick Charge 2.0&lt;br /&gt;
|----&lt;br /&gt;
| 2 || QC3 || Qualcomm Quick Charge 3.0&lt;br /&gt;
|----&lt;br /&gt;
| 3 || APP2.4A || Apple, max 2.4 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 4 || APP2.1A || Apple, max 2.1 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 5 || APP1.0A || Apple, max 1.0 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 6 || APP0.5A || Apple, max 0.5 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 7 || DCP1.5A || Dedicated Charging Port, max 1.5 Amp (D+ to D- short)&lt;br /&gt;
|----&lt;br /&gt;
| 8 || SAMSUNG || Samsung (Adaptive Fast Charging?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown response fields ===&lt;br /&gt;
&lt;br /&gt;
Bytes 0+1 and 128+129 are not entirely known yet.  They were believed to be device-specific start/stop markers, but some variations have been observed.&lt;br /&gt;
&lt;br /&gt;
On UM24C, all observed units seem to be 0x0963/0xfff1 so far.&lt;br /&gt;
&lt;br /&gt;
On UM25C, 0x0963/0xfff1 and 0x09c9/0xfff1 have been observed on two different units, but they do not appear to change over time on the specific units themselves.&lt;br /&gt;
&lt;br /&gt;
On UM34C, all observed units so far have 0x0d4c as the first two bytes, but the last two bytes vary each time the device is polled.  The values drift up and down over time, but will change completely after a device reset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2019-02-09 16:55:35,150 DEBUG: Start: 0x0d4c, end: 0x79cd&lt;br /&gt;
2019-02-09 16:55:47,837 DEBUG: Start: 0x0d4c, end: 0x75f8&lt;br /&gt;
2019-02-09 16:55:49,031 DEBUG: Start: 0x0d4c, end: 0x78c3&lt;br /&gt;
2019-02-09 16:56:08,855 DEBUG: Start: 0x0d4c, end: 0x7bd9&lt;br /&gt;
[reset]&lt;br /&gt;
2019-02-09 16:58:01,091 DEBUG: Start: 0x0d4c, end: 0x2c2d&lt;br /&gt;
2019-02-09 16:58:52,247 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:10,683 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:29,816 DEBUG: Start: 0x0d4c, end: 0x18ea&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
=== UM24C ===&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://rdtech.aliexpress.com/store/923042 RDTech AliExpress store]&lt;br /&gt;
* [https://github.com/rfinnie/rdumtool rdumtool - RDTech UM24C/UM25C/UM34C Bluetooth interface tool] (Python 3)&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Multimeter]]&lt;br /&gt;
[[Category:Planned‏‎]]&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14086</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14086"/>
		<updated>2019-02-10T03:22:04Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: Add general information about all three&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech UM24C/UM25C/UM34C&lt;br /&gt;
| status              = planned&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode), color display (26x26mm, 128x128px)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
The RDTech UM24C (~$12 USD), UM25C (~$16 USD) and UM34C (~$18 USD) are USB load meters which can measure various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. They can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). They also allow graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
The UM24C, UM25C and UM34C are extremely similar, but have several differences:&lt;br /&gt;
&lt;br /&gt;
* UM24C supports USB-A male / USB-microB female line, USB-A female load.&lt;br /&gt;
* UM25C supports USB-A male / USB-microB female / USB-C female line, USB-A female / USB-C female load.&lt;br /&gt;
* UM34C supports USB-A male / USB-microB female / USB-C female line, USB-A female load.&lt;br /&gt;
* UM34C supports USB 3.0 data passthrough; UM24C/UM25C are USB 2.0 only.&lt;br /&gt;
* UM25C displays and sends 1mV / 0.1mA live resolution, UM24C/UM34C are 10mV / 1mA live resolution.  Note that this is applicable for instantaneous view only; aggregates are the same for all three models.&lt;br /&gt;
* UM24C is maximum 3A current, UM34C is 4A, UM25C is 5A.&lt;br /&gt;
* UM24C only supports detection of unknown (normal) charging mode, QC2.0 and QC3.0, UM25C and UM34C support detecting additional charging modes.  This does not affect the line/load from negotiating a charging mode, just the meter&amp;#039;s ability to detect it.&lt;br /&gt;
* UM24C is not supported by their Apple app, only UM25C and UM34C.&lt;br /&gt;
&lt;br /&gt;
The UM25C is the most fully featured of the three, but is missing USB 3.0 data passthrough (UM24C only).  If you have to buy one, get the UM25C, but if possible get both the UM25C and UM34C.  The UM24C is a slightly older product feature-wise.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, these communicate through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.  On the C models, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins (UM24C) or scissor-spring tension pins (UM25C, UM34C).&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; models - the UM24, UM25 and UM34 are the exact same functionality but *without* Bluetooth communication.  The UM25 and UM34 have pads which you could solder a TTL adapter to (if you disassemble the device) and get the same functionality.  The UM24 has pads, but the firmware does not appear to support communication.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
1-byte commands are sent to the device, and in the case of 0xf0, the device responds with a 130-byte data dump of the current device status.  All other commands return no acknowledgement.&lt;br /&gt;
&lt;br /&gt;
Each device (UM24C, UM25C, UM34C) has a similar command and response format, but the commands and responses vary slightly by device type.  These variations are documented below.  Unfortunately this means you will need to know what type of device you are communicating with to take full advantage of it.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit (approximately 0.2 seconds) after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device !! Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C || 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| UM25C/UM34C || 0xf3 || device control || Go to the previous screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| UM25C/UM34C || 0xa0 - 0xa9 || device control || Set the selected data group (0-9)&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.30 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || unknown || See below&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage - UM25C: millivolts (divide by 1000 to get V), UM24C/UM34C: centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage - UM25C tenth-milliamps (divide by 10000 to get A), UM24C/UM34C: milliamps (divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode index, see below&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || unknown || See below&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Charging modes ===&lt;br /&gt;
&lt;br /&gt;
Not all devices support detection of all listed charging modes, but the index between devices is consistent (e.g. index 1 will always be QC2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Index !! Display !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || UNKNOWN || Unknown, or normal (non-custom mode)&lt;br /&gt;
|----&lt;br /&gt;
| 1 || QC2 || Qualcomm Quick Charge 2.0&lt;br /&gt;
|----&lt;br /&gt;
| 2 || QC3 || Qualcomm Quick Charge 3.0&lt;br /&gt;
|----&lt;br /&gt;
| 3 || APP2.4A || Apple, max 2.4 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 4 || APP2.1A || Apple, max 2.1 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 5 || APP1.0A || Apple, max 1.0 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 6 || APP0.5A || Apple, max 0.5 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 7 || DCP1.5A || Dedicated Charging Port, max 1.5 Amp (D+ to D- short)&lt;br /&gt;
|----&lt;br /&gt;
| 8 || SAMSUNG || Samsung (Adaptive Fast Charging?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown response fields ===&lt;br /&gt;
&lt;br /&gt;
Bytes 0+1 and 128+129 are not entirely known yet.  They were believed to be device-specific start/stop markers, but some variations have been observed.&lt;br /&gt;
&lt;br /&gt;
On UM24C, all observed units seem to be 0x0963/0xfff1 so far.&lt;br /&gt;
&lt;br /&gt;
On UM25C, 0x0963/0xfff1 and 0x09c9/0xfff1 have been observed on two different units, but they do not appear to change over time on the specific units themselves.&lt;br /&gt;
&lt;br /&gt;
On UM34C, all observed units so far have 0x0d4c as the first two bytes, but the last two bytes vary each time the device is polled.  The values drift up and down over time, but will change completely after a device reset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2019-02-09 16:55:35,150 DEBUG: Start: 0x0d4c, end: 0x79cd&lt;br /&gt;
2019-02-09 16:55:47,837 DEBUG: Start: 0x0d4c, end: 0x75f8&lt;br /&gt;
2019-02-09 16:55:49,031 DEBUG: Start: 0x0d4c, end: 0x78c3&lt;br /&gt;
2019-02-09 16:56:08,855 DEBUG: Start: 0x0d4c, end: 0x7bd9&lt;br /&gt;
[reset]&lt;br /&gt;
2019-02-09 16:58:01,091 DEBUG: Start: 0x0d4c, end: 0x2c2d&lt;br /&gt;
2019-02-09 16:58:52,247 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:10,683 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:29,816 DEBUG: Start: 0x0d4c, end: 0x18ea&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
=== UM24C ===&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://rdtech.aliexpress.com/store/923042 RDTech AliExpress store]&lt;br /&gt;
* [https://github.com/rfinnie/rdumtool rdumtool - RDTech UM24C/UM25C/UM34C Bluetooth interface tool] (Python 3)&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Multimeter]]&lt;br /&gt;
[[Category:Planned‏‎]]&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14085</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14085"/>
		<updated>2019-02-10T02:01:15Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: /* Response format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech UM24C/UM25C/UM34C&lt;br /&gt;
| status              = planned&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode), color display (26x26mm, 128x128px)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
A ~$13 USB load meter; it measures various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. It can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). It also allows graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, this one communicates through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the UM24&amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; - the UM24 is the version *without* Bluetooth communication, although it&amp;#039;s unclear whether the serial pads are still exposed and functional on that model. On the C model, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
[TODO: Abstract introduction, as most of the above information also applies to the UM25C and UM34C, but list their differences.]&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
1-byte commands are sent to the device, and in the case of 0xf0, the device responds with a 130-byte data dump of the current device status.  All other commands return no acknowledgement.&lt;br /&gt;
&lt;br /&gt;
Each device (UM24C, UM25C, UM34C) has a similar command and response format, but the commands and responses vary slightly by device type.  These variations are documented below.  Unfortunately this means you will need to know what type of device you are communicating with to take full advantage of it.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit (approximately 0.2 seconds) after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device !! Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C || 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| UM25C/UM34C || 0xf3 || device control || Go to the previous screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| UM25C/UM34C || 0xa0 - 0xa9 || device control || Set the selected data group (0-9)&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.30 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || unknown || See below&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage - UM25C: millivolts (divide by 1000 to get V), UM24C/UM34C: centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage - UM25C tenth-milliamps (divide by 10000 to get A), UM24C/UM34C: milliamps (divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode index, see below&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || unknown || See below&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Charging modes ===&lt;br /&gt;
&lt;br /&gt;
Not all devices support detection of all listed charging modes, but the index between devices is consistent (e.g. index 1 will always be QC2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Index !! Display !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || UNKNOWN || Unknown, or normal (non-custom mode)&lt;br /&gt;
|----&lt;br /&gt;
| 1 || QC2 || Qualcomm Quick Charge 2.0&lt;br /&gt;
|----&lt;br /&gt;
| 2 || QC3 || Qualcomm Quick Charge 3.0&lt;br /&gt;
|----&lt;br /&gt;
| 3 || APP2.4A || Apple, max 2.4 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 4 || APP2.1A || Apple, max 2.1 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 5 || APP1.0A || Apple, max 1.0 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 6 || APP0.5A || Apple, max 0.5 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 7 || DCP1.5A || Dedicated Charging Port, max 1.5 Amp (D+ to D- short)&lt;br /&gt;
|----&lt;br /&gt;
| 8 || SAMSUNG || Samsung (Adaptive Fast Charging?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown response fields ===&lt;br /&gt;
&lt;br /&gt;
Bytes 0+1 and 128+129 are not entirely known yet.  They were believed to be device-specific start/stop markers, but some variations have been observed.&lt;br /&gt;
&lt;br /&gt;
On UM24C, all observed units seem to be 0x0963/0xfff1 so far.&lt;br /&gt;
&lt;br /&gt;
On UM25C, 0x0963/0xfff1 and 0x09c9/0xfff1 have been observed on two different units, but they do not appear to change over time on the specific units themselves.&lt;br /&gt;
&lt;br /&gt;
On UM34C, all observed units so far have 0x0d4c as the first two bytes, but the last two bytes vary each time the device is polled.  The values drift up and down over time, but will change completely after a device reset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2019-02-09 16:55:35,150 DEBUG: Start: 0x0d4c, end: 0x79cd&lt;br /&gt;
2019-02-09 16:55:47,837 DEBUG: Start: 0x0d4c, end: 0x75f8&lt;br /&gt;
2019-02-09 16:55:49,031 DEBUG: Start: 0x0d4c, end: 0x78c3&lt;br /&gt;
2019-02-09 16:56:08,855 DEBUG: Start: 0x0d4c, end: 0x7bd9&lt;br /&gt;
[reset]&lt;br /&gt;
2019-02-09 16:58:01,091 DEBUG: Start: 0x0d4c, end: 0x2c2d&lt;br /&gt;
2019-02-09 16:58:52,247 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:10,683 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:29,816 DEBUG: Start: 0x0d4c, end: 0x18ea&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
=== UM24C ===&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://rdtech.aliexpress.com/store/923042 RDTech AliExpress store]&lt;br /&gt;
* [https://github.com/rfinnie/rdumtool rdumtool - RDTech UM24C/UM25C/UM34C Bluetooth interface tool] (Python 3)&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Multimeter]]&lt;br /&gt;
[[Category:Planned‏‎]]&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14084</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14084"/>
		<updated>2019-02-10T01:59:10Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech UM24C/UM25C/UM34C&lt;br /&gt;
| status              = planned&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode), color display (26x26mm, 128x128px)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
A ~$13 USB load meter; it measures various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. It can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). It also allows graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, this one communicates through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the UM24&amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; - the UM24 is the version *without* Bluetooth communication, although it&amp;#039;s unclear whether the serial pads are still exposed and functional on that model. On the C model, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
[TODO: Abstract introduction, as most of the above information also applies to the UM25C and UM34C, but list their differences.]&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
1-byte commands are sent to the device, and in the case of 0xf0, the device responds with a 130-byte data dump of the current device status.  All other commands return no acknowledgement.&lt;br /&gt;
&lt;br /&gt;
Each device (UM24C, UM25C, UM34C) has a similar command and response format, but the commands and responses vary slightly by device type.  These variations are documented below.  Unfortunately this means you will need to know what type of device you are communicating with to take full advantage of it.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit (approximately 0.2 seconds) after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device !! Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C || 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| UM25C/UM34C || 0xf3 || device control || Go to the previous screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| UM25C/UM34C || 0xa0 - 0xa9 || device control || Set the selected data group (0-9)&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.30 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || marker || Start marker (always 0x0963)&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage - UM25C: millivolts (divide by 1000 to get V), UM24C/UM34C: centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage - UM25C tenth-milliamps (divide by 10000 to get A), UM24C/UM34C: milliamps (divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode index, see below&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || marker || Stop marker (always 0xfff1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Charging modes ===&lt;br /&gt;
&lt;br /&gt;
Not all devices support detection of all listed charging modes, but the index between devices is consistent (e.g. index 1 will always be QC2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Index !! Display !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || UNKNOWN || Unknown, or normal (non-custom mode)&lt;br /&gt;
|----&lt;br /&gt;
| 1 || QC2 || Qualcomm Quick Charge 2.0&lt;br /&gt;
|----&lt;br /&gt;
| 2 || QC3 || Qualcomm Quick Charge 3.0&lt;br /&gt;
|----&lt;br /&gt;
| 3 || APP2.4A || Apple, max 2.4 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 4 || APP2.1A || Apple, max 2.1 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 5 || APP1.0A || Apple, max 1.0 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 6 || APP0.5A || Apple, max 0.5 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 7 || DCP1.5A || Dedicated Charging Port, max 1.5 Amp (D+ to D- short)&lt;br /&gt;
|----&lt;br /&gt;
| 8 || SAMSUNG || Samsung (Adaptive Fast Charging?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown response fields ===&lt;br /&gt;
&lt;br /&gt;
Bytes 0+1 and 128+129 are not entirely known yet.  They were believed to be device-specific start/stop markers, but some variations have been observed.&lt;br /&gt;
&lt;br /&gt;
On UM24C, all observed units seem to be 0x0963/0xfff1 so far.&lt;br /&gt;
&lt;br /&gt;
On UM25C, 0x0963/0xfff1 and 0x09c9/0xfff1 have been observed on two different units, but they do not appear to change over time on the specific units themselves.&lt;br /&gt;
&lt;br /&gt;
On UM34C, all observed units so far have 0x0d4c as the first two bytes, but the last two bytes vary each time the device is polled.  The values drift up and down over time, but will change completely after a device reset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2019-02-09 16:55:35,150 DEBUG: Start: 0x0d4c, end: 0x79cd&lt;br /&gt;
2019-02-09 16:55:47,837 DEBUG: Start: 0x0d4c, end: 0x75f8&lt;br /&gt;
2019-02-09 16:55:49,031 DEBUG: Start: 0x0d4c, end: 0x78c3&lt;br /&gt;
2019-02-09 16:56:08,855 DEBUG: Start: 0x0d4c, end: 0x7bd9&lt;br /&gt;
[reset]&lt;br /&gt;
2019-02-09 16:58:01,091 DEBUG: Start: 0x0d4c, end: 0x2c2d&lt;br /&gt;
2019-02-09 16:58:52,247 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:10,683 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:29,816 DEBUG: Start: 0x0d4c, end: 0x18ea&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
=== UM24C ===&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://rdtech.aliexpress.com/store/923042 RDTech AliExpress store]&lt;br /&gt;
* [https://github.com/rfinnie/rdumtool rdumtool - RDTech UM24C/UM25C/UM34C Bluetooth interface tool] (Python 3)&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Multimeter]]&lt;br /&gt;
[[Category:Planned‏‎]]&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM24C&amp;diff=14083</id>
		<title>RDTech UM24C</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM24C&amp;diff=14083"/>
		<updated>2019-02-10T01:56:54Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: Fo0bar moved page RDTech UM24C to RDTech UM series: Now covers UM24C/UM25C/UM34C&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[RDTech UM series]]&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14082</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14082"/>
		<updated>2019-02-10T01:56:54Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: Fo0bar moved page RDTech UM24C to RDTech UM series: Now covers UM24C/UM25C/UM34C&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech UM24C/UM25C/UM34C&lt;br /&gt;
| status              = planned&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode), color display (26x26mm, 128x128px)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
A ~$13 USB load meter; it measures various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. It can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). It also allows graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, this one communicates through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the UM24&amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; - the UM24 is the version *without* Bluetooth communication, although it&amp;#039;s unclear whether the serial pads are still exposed and functional on that model. On the C model, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
[TODO: Abstract introduction, as most of the above information also applies to the UM25C and UM34C, but list their differences.]&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
1-byte commands are sent to the device, and in the case of 0xf0, the device responds with a 130-byte data dump of the current device status.  All other commands return no acknowledgement.&lt;br /&gt;
&lt;br /&gt;
Each device (UM24C, UM25C, UM34C) has a similar command and response format, but the commands and responses vary slightly by device type.  These variations are documented below.  Unfortunately this means you will need to know what type of device you are communicating with to take full advantage of it.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit (approximately 0.2 seconds) after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device !! Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C || 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| UM25C/UM34C || 0xf3 || device control || Go to the previous screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| UM25C/UM34C || 0xa0 - 0xa9 || device control || Set the selected data group (0-9)&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.30 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || marker || Start marker (always 0x0963)&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage - UM25C: millivolts (divide by 1000 to get V), UM24C/UM34C: centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage - UM25C tenth-milliamps (divide by 10000 to get A), UM24C/UM34C: milliamps (divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode index, see below&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || marker || Stop marker (always 0xfff1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Charging modes ===&lt;br /&gt;
&lt;br /&gt;
Not all devices support detection of all listed charging modes, but the index between devices is consistent (e.g. index 1 will always be QC2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Index !! Display !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || UNKNOWN || Unknown, or normal (non-custom mode)&lt;br /&gt;
|----&lt;br /&gt;
| 1 || QC2 || Qualcomm Quick Charge 2.0&lt;br /&gt;
|----&lt;br /&gt;
| 2 || QC3 || Qualcomm Quick Charge 3.0&lt;br /&gt;
|----&lt;br /&gt;
| 3 || APP2.4A || Apple, max 2.4 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 4 || APP2.1A || Apple, max 2.1 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 5 || APP1.0A || Apple, max 1.0 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 6 || APP0.5A || Apple, max 0.5 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 7 || DCP1.5A || Dedicated Charging Port, max 1.5 Amp (D+ to D- short)&lt;br /&gt;
|----&lt;br /&gt;
| 8 || SAMSUNG || Samsung (Adaptive Fast Charging?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown response fields ===&lt;br /&gt;
&lt;br /&gt;
Bytes 0+1 and 128+129 are not entirely known yet.  They were believed to be device-specific start/stop markers, but some variations have been observed.&lt;br /&gt;
&lt;br /&gt;
On UM24C, all observed units seem to be 0x0963/0xfff1 so far.&lt;br /&gt;
&lt;br /&gt;
On UM25C, 0x0963/0xfff1 and 0x09c9/0xfff1 have been observed on two different units, but they do not appear to change over time on the specific units themselves.&lt;br /&gt;
&lt;br /&gt;
On UM34C, all observed units so far have 0x0d4c as the first two bytes, but the last two bytes vary each time the device is polled.  The values drift up and down over time, but will change completely after a device reset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2019-02-09 16:55:35,150 DEBUG: Start: 0x0d4c, end: 0x79cd&lt;br /&gt;
2019-02-09 16:55:47,837 DEBUG: Start: 0x0d4c, end: 0x75f8&lt;br /&gt;
2019-02-09 16:55:49,031 DEBUG: Start: 0x0d4c, end: 0x78c3&lt;br /&gt;
2019-02-09 16:56:08,855 DEBUG: Start: 0x0d4c, end: 0x7bd9&lt;br /&gt;
[reset]&lt;br /&gt;
2019-02-09 16:58:01,091 DEBUG: Start: 0x0d4c, end: 0x2c2d&lt;br /&gt;
2019-02-09 16:58:52,247 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:10,683 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:29,816 DEBUG: Start: 0x0d4c, end: 0x18ea&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
=== UM24C ==&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://rdtech.aliexpress.com/store/923042 RDTech AliExpress store]&lt;br /&gt;
* [https://github.com/rfinnie/rdumtool rdumtool - RDTech UM24C/UM25C/UM34C Bluetooth interface tool] (Python 3)&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Multimeter]]&lt;br /&gt;
[[Category:Planned‏‎]]&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14081</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14081"/>
		<updated>2019-02-10T01:56:20Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: Add UM25C/UM34C information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech UM24C/UM25C/UM34C&lt;br /&gt;
| status              = planned&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode), color display (26x26mm, 128x128px)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
A ~$13 USB load meter; it measures various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. It can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). It also allows graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, this one communicates through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the UM24&amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; - the UM24 is the version *without* Bluetooth communication, although it&amp;#039;s unclear whether the serial pads are still exposed and functional on that model. On the C model, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
[TODO: Abstract introduction, as most of the above information also applies to the UM25C and UM34C, but list their differences.]&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
1-byte commands are sent to the device, and in the case of 0xf0, the device responds with a 130-byte data dump of the current device status.  All other commands return no acknowledgement.&lt;br /&gt;
&lt;br /&gt;
Each device (UM24C, UM25C, UM34C) has a similar command and response format, but the commands and responses vary slightly by device type.  These variations are documented below.  Unfortunately this means you will need to know what type of device you are communicating with to take full advantage of it.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit (approximately 0.2 seconds) after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device !! Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C || 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| UM25C/UM34C || 0xf3 || device control || Go to the previous screen&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| UM25C/UM34C || 0xa0 - 0xa9 || device control || Set the selected data group (0-9)&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.30 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| UM24C/UM25C/UM34C || 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || marker || Start marker (always 0x0963)&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage - UM25C: millivolts (divide by 1000 to get V), UM24C/UM34C: centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage - UM25C tenth-milliamps (divide by 10000 to get A), UM24C/UM34C: milliamps (divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode index, see below&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || marker || Stop marker (always 0xfff1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Charging modes ===&lt;br /&gt;
&lt;br /&gt;
Not all devices support detection of all listed charging modes, but the index between devices is consistent (e.g. index 1 will always be QC2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Index !! Display !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || UNKNOWN || Unknown, or normal (non-custom mode)&lt;br /&gt;
|----&lt;br /&gt;
| 1 || QC2 || Qualcomm Quick Charge 2.0&lt;br /&gt;
|----&lt;br /&gt;
| 2 || QC3 || Qualcomm Quick Charge 3.0&lt;br /&gt;
|----&lt;br /&gt;
| 3 || APP2.4A || Apple, max 2.4 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 4 || APP2.1A || Apple, max 2.1 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 5 || APP1.0A || Apple, max 1.0 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 6 || APP0.5A || Apple, max 0.5 Amp&lt;br /&gt;
|----&lt;br /&gt;
| 7 || DCP1.5A || Dedicated Charging Port, max 1.5 Amp (D+ to D- short)&lt;br /&gt;
|----&lt;br /&gt;
| 8 || SAMSUNG || Samsung (Adaptive Fast Charging?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown response fields ===&lt;br /&gt;
&lt;br /&gt;
Bytes 0+1 and 128+129 are not entirely known yet.  They were believed to be device-specific start/stop markers, but some variations have been observed.&lt;br /&gt;
&lt;br /&gt;
On UM24C, all observed units seem to be 0x0963/0xfff1 so far.&lt;br /&gt;
&lt;br /&gt;
On UM25C, 0x0963/0xfff1 and 0x09c9/0xfff1 have been observed on two different units, but they do not appear to change over time on the specific units themselves.&lt;br /&gt;
&lt;br /&gt;
On UM34C, all observed units so far have 0x0d4c as the first two bytes, but the last two bytes vary each time the device is polled.  The values drift up and down over time, but will change completely after a device reset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2019-02-09 16:55:35,150 DEBUG: Start: 0x0d4c, end: 0x79cd&lt;br /&gt;
2019-02-09 16:55:47,837 DEBUG: Start: 0x0d4c, end: 0x75f8&lt;br /&gt;
2019-02-09 16:55:49,031 DEBUG: Start: 0x0d4c, end: 0x78c3&lt;br /&gt;
2019-02-09 16:56:08,855 DEBUG: Start: 0x0d4c, end: 0x7bd9&lt;br /&gt;
[reset]&lt;br /&gt;
2019-02-09 16:58:01,091 DEBUG: Start: 0x0d4c, end: 0x2c2d&lt;br /&gt;
2019-02-09 16:58:52,247 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:10,683 DEBUG: Start: 0x0d4c, end: 0x19e5&lt;br /&gt;
2019-02-09 16:59:29,816 DEBUG: Start: 0x0d4c, end: 0x18ea&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
=== UM24C ==&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://rdtech.aliexpress.com/store/923042 RDTech AliExpress store]&lt;br /&gt;
* [https://github.com/rfinnie/rdumtool rdumtool - RDTech UM24C/UM25C/UM34C Bluetooth interface tool] (Python 3)&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Multimeter]]&lt;br /&gt;
[[Category:Planned‏‎]]&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14057</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14057"/>
		<updated>2019-01-27T02:51:01Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech UM24C&lt;br /&gt;
| status              = Not Supported‏‎&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode), color display (26x26mm, 128x128px)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
A ~$13 USB load meter; it measures various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. It can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). It also allows graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, this one communicates through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the UM24&amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; - the UM24 is the version *without* Bluetooth communication, although it&amp;#039;s unclear whether the serial pads are still exposed and functional on that model. On the C model, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
Clearer documentation (as well as a JS implementation of the protocol) are coming soon, but below are my rough notes of the protocol, that I&amp;#039;ve figured out by reverse-engineering the Android application. The device won&amp;#039;t auto-send any data; you&amp;#039;re expected to send 0xf0 any time you want new data, eg. on a timed loop.&lt;br /&gt;
&lt;br /&gt;
All data returned by the device consists of measurements and configuration status, in 130-byte chunks. To my knowledge, it will never send any other data. All bytes below are displayed in hex format; every command is a single byte.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.30 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || marker || Start marker (always 0x0963)&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage (in centivolts, divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage (in mA, divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode; this is an enum, where 0 = unknown/standard, 1 = QC2.0, and presumably 2 = QC3.0 (but I haven&amp;#039;t verified this)&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || marker || Stop marker (always 0xfff1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.aliexpress.com/item/RD-UM24-UM24C-for-APP-USB-2-0-LCD-Display-Voltmeter-ammeter-battery-charge-voltage-current/32845522857.html Direct AliExpress UM24C link] (select &amp;quot;UM24C&amp;quot; under &amp;quot;Color&amp;quot;)&lt;br /&gt;
* [https://rdtech.aliexpress.com/store/923042 RDTech AliExpress store]&lt;br /&gt;
* [https://github.com/rfinnie/rdumtool rdumtool - RDTech UM24C Bluetooth interface tool] (Python 3)&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Multimeter]]&lt;br /&gt;
[[Category:Not Supported‏‎]]&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14056</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14056"/>
		<updated>2019-01-27T02:07:24Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: Fix 0xb0 - 0xce range&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech UM24C&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
A ~$13 USB load meter; it measures various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. It can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). It also allows graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, this one communicates through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the UM24&amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; - the UM24 is the version *without* Bluetooth communication, although it&amp;#039;s unclear whether the serial pads are still exposed and functional on that model. On the C model, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
Clearer documentation (as well as a JS implementation of the protocol) are coming soon, but below are my rough notes of the protocol, that I&amp;#039;ve figured out by reverse-engineering the Android application. The device won&amp;#039;t auto-send any data; you&amp;#039;re expected to send 0xf0 any time you want new data, eg. on a timed loop.&lt;br /&gt;
&lt;br /&gt;
All data returned by the device consists of measurements and configuration status, in 130-byte chunks. To my knowledge, it will never send any other data. All bytes below are displayed in hex format; every command is a single byte.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.30 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || marker || Start marker (always 0x0963)&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage (in centivolts, divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage (in mA, divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode; this is an enum, where 0 = unknown/standard, 1 = QC2.0, and presumably 2 = QC3.0 (but I haven&amp;#039;t verified this)&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || marker || Stop marker (always 0xfff1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.aliexpress.com/item/RD-UM24-UM24C-for-APP-USB-2-0-LCD-Display-Voltmeter-ammeter-battery-charge-voltage-current/32845522857.html Direct AliExpress UM24C link] (select &amp;quot;UM24C&amp;quot; under &amp;quot;Color&amp;quot;)&lt;br /&gt;
* [https://rdtech.aliexpress.com/store/923042 RDTech AliExpres store]&lt;br /&gt;
* [https://github.com/rfinnie/rdumtool rdumtool - RDTech UM24C Bluetooth interface tool] (Python 3)&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14043</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14043"/>
		<updated>2019-01-26T18:46:56Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: Add links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech UM24C&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
A ~$13 USB load meter; it measures various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. It can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). It also allows graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, this one communicates through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the UM24&amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; - the UM24 is the version *without* Bluetooth communication, although it&amp;#039;s unclear whether the serial pads are still exposed and functional on that model. On the C model, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
Clearer documentation (as well as a JS implementation of the protocol) are coming soon, but below are my rough notes of the protocol, that I&amp;#039;ve figured out by reverse-engineering the Android application. The device won&amp;#039;t auto-send any data; you&amp;#039;re expected to send 0xf0 any time you want new data, eg. on a timed loop.&lt;br /&gt;
&lt;br /&gt;
All data returned by the device consists of measurements and configuration status, in 130-byte chunks. To my knowledge, it will never send any other data. All bytes below are displayed in hex format; every command is a single byte.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.15 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || marker || Start marker (always 0x0963)&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage (in centivolts, divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage (in mA, divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode; this is an enum, where 0 = unknown/standard, 1 = QC2.0, and presumably 2 = QC3.0 (but I haven&amp;#039;t verified this)&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || marker || Stop marker (always 0xfff1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.aliexpress.com/item/RD-UM24-UM24C-for-APP-USB-2-0-LCD-Display-Voltmeter-ammeter-battery-charge-voltage-current/32845522857.html Direct AliExpress UM24C link] (select &amp;quot;UM24C&amp;quot; under &amp;quot;Color&amp;quot;)&lt;br /&gt;
* [https://rdtech.aliexpress.com/store/923042 RDTech AliExpres store]&lt;br /&gt;
* [https://github.com/rfinnie/rdumtool rdumtool - RDTech UM24C Bluetooth interface tool] (Python 3)&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14039</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14039"/>
		<updated>2019-01-26T18:34:41Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: /* Response format */ Additional minor information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech UM24C&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
A ~$13 USB load meter; it measures various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. It can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). It also allows graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, this one communicates through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the UM24&amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; - the UM24 is the version *without* Bluetooth communication, although it&amp;#039;s unclear whether the serial pads are still exposed and functional on that model. On the C model, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
Clearer documentation (as well as a JS implementation of the protocol) are coming soon, but below are my rough notes of the protocol, that I&amp;#039;ve figured out by reverse-engineering the Android application. The device won&amp;#039;t auto-send any data; you&amp;#039;re expected to send 0xf0 any time you want new data, eg. on a timed loop.&lt;br /&gt;
&lt;br /&gt;
All data returned by the device consists of measurements and configuration status, in 130-byte chunks. To my knowledge, it will never send any other data. All bytes below are displayed in hex format; every command is a single byte.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.15 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || marker || Start marker (always 0x0963)&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage (in centivolts, divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage (in mA, divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in Celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in Fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group, zero-indexed&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of 10 main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode; this is an enum, where 0 = unknown/standard, 1 = QC2.0, and presumably 2 = QC3.0 (but I haven&amp;#039;t verified this)&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording (in centiamps, divide by 100 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of threshold recording, in cumulative seconds&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Threshold recording active (1 if recording, 0 if not)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting, in minutes (0-9, 0 is no screen timeout)&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting (0-5, 0 is dim, 5 is full brightness)&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (zero-indexed, same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || marker || Stop marker (always 0xfff1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14038</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14038"/>
		<updated>2019-01-26T18:22:17Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: Assume the &amp;quot;unknown&amp;quot; positions are the high bytes of the next byte, since they all follow the same pattern&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech UM24C&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
A ~$13 USB load meter; it measures various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. It can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). It also allows graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, this one communicates through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the UM24&amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; - the UM24 is the version *without* Bluetooth communication, although it&amp;#039;s unclear whether the serial pads are still exposed and functional on that model. On the C model, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
Clearer documentation (as well as a JS implementation of the protocol) are coming soon, but below are my rough notes of the protocol, that I&amp;#039;ve figured out by reverse-engineering the Android application. The device won&amp;#039;t auto-send any data; you&amp;#039;re expected to send 0xf0 any time you want new data, eg. on a timed loop.&lt;br /&gt;
&lt;br /&gt;
All data returned by the device consists of measurements and configuration status, in 130-byte chunks. To my knowledge, it will never send any other data. All bytes below are displayed in hex format; every command is a single byte.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.15 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || marker || Start marker (always 0x0963)&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage (in centivolts, divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage (in mA, divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 2 || configuration || Currently selected data group&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 2 || measurement || Charging mode; this is an enum, where 0 = unknown/standard, 1 = QC2.0, and presumably 2 = QC3.0 (but I haven&amp;#039;t verified this)&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of recording, in seconds since start&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 2 || configuration || Recording active (1 if recording)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 2 || configuration || Current screen (same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || marker || Stop marker (always 0xfff1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14037</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14037"/>
		<updated>2019-01-26T18:16:51Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: Correct position of charging mode, after I was able to find a QC2.0 device&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech UM24C&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
A ~$13 USB load meter; it measures various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. It can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). It also allows graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, this one communicates through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the UM24&amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; - the UM24 is the version *without* Bluetooth communication, although it&amp;#039;s unclear whether the serial pads are still exposed and functional on that model. On the C model, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
Clearer documentation (as well as a JS implementation of the protocol) are coming soon, but below are my rough notes of the protocol, that I&amp;#039;ve figured out by reverse-engineering the Android application. The device won&amp;#039;t auto-send any data; you&amp;#039;re expected to send 0xf0 any time you want new data, eg. on a timed loop.&lt;br /&gt;
&lt;br /&gt;
All data returned by the device consists of measurements and configuration status, in 130-byte chunks. To my knowledge, it will never send any other data. All bytes below are displayed in hex format; every command is a single byte.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.15 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || marker || Start marker (always 0x0963)&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage (in centivolts, divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage (in mA, divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 1 || unknown || Not used in app, possibly meant to be the high byte of position 15&lt;br /&gt;
|----&lt;br /&gt;
| 15 || 1 || configuration || Currently selected data group&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 1 || unknown || Not used in app, possibly meant to be the high byte of position 101&lt;br /&gt;
|----&lt;br /&gt;
| 101 || 1 || measurement || Charging mode; this is an enum, where 0 = unknown/standard, 1 = QC2.0, and presumably 2 = QC3.0 (but I haven&amp;#039;t verified this)&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of recording, in seconds since start&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 1 || unknown || Not used in app, possibly meant to be the high byte of position 117&lt;br /&gt;
|----&lt;br /&gt;
| 117 || 1 || configuration || Recording active (1 if recording)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 1 || unknown || Possibly meant to be the high byte of position 127&lt;br /&gt;
|----&lt;br /&gt;
| 127 || 1 || configuration || Current screen (same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || marker || Stop marker (always 0xfff1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14036</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14036"/>
		<updated>2019-01-26T18:09:47Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: Correct voltage (centivolts, not millivolts) and &amp;quot;Recording active&amp;quot; position, add other notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech UM24C&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
A ~$13 USB load meter; it measures various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. It can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). It also allows graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, this one communicates through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the UM24&amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; - the UM24 is the version *without* Bluetooth communication, although it&amp;#039;s unclear whether the serial pads are still exposed and functional on that model. On the C model, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
Clearer documentation (as well as a JS implementation of the protocol) are coming soon, but below are my rough notes of the protocol, that I&amp;#039;ve figured out by reverse-engineering the Android application. The device won&amp;#039;t auto-send any data; you&amp;#039;re expected to send 0xf0 any time you want new data, eg. on a timed loop.&lt;br /&gt;
&lt;br /&gt;
All data returned by the device consists of measurements and configuration status, in 130-byte chunks. To my knowledge, it will never send any other data. All bytes below are displayed in hex format; every command is a single byte.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
Multiple commands may be sent at once; e.g. you could set the recording threshold to 0.28 A and rotate the screen by sending 0xccf2 immediately.  An exception appears to be requesting the data dump; it doesn&amp;#039;t seem to return the 130-byte response unless you wait a bit after sending other commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xb0 - 0xce || configuration || Set recording threshold to a value between 0.00 and 0.15 A (inclusive); add the value after the decimal point to 0xb0 (0.00 is 0xb0, 0.30 is 0xce)&lt;br /&gt;
|----&lt;br /&gt;
| 0xd0 - 0xd5 || configuration || Set device backlight level between 0 and 5 (inclusive); 0 is dim, 5 is full brightness&lt;br /&gt;
|----&lt;br /&gt;
| 0xe0 - 0xe9 || configuration || Set screen timeout (&amp;quot;screensaver&amp;quot;) between 0 and 9 minutes (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || marker || Start marker (always 0x0963)&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage (in centivolts, divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage (in mA, divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 1 || unknown || Not used in app, possibly meant to be the high byte of position 15&lt;br /&gt;
|----&lt;br /&gt;
| 15 || 1 || configuration || Currently selected data group&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 1 || measurement || Charging mode; this is an enum, where 0 = unknown/standard, 1 = QC2.0, and presumably 2 = QC3.0 (but I haven&amp;#039;t verified this)&lt;br /&gt;
|----&lt;br /&gt;
| 101 || 1 || unknown || Not used in app&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of recording, in seconds since start&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 1 || unknown || Not used in app, possibly meant to be the high byte of position 117&lt;br /&gt;
|----&lt;br /&gt;
| 117 || 1 || configuration || Recording active (1 if recording)&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 1 || unknown || Possibly meant to be the high byte of position 127&lt;br /&gt;
|----&lt;br /&gt;
| 127 || 1 || configuration || Current screen (same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || marker || Stop marker (always 0xfff1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14035</id>
		<title>RDTech UM series</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=RDTech_UM_series&amp;diff=14035"/>
		<updated>2019-01-26T17:49:18Z</updated>

		<summary type="html">&lt;p&gt;Fo0bar: Convert protocol tables to wikitables&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox multimeter&lt;br /&gt;
| image               = [[File:UM24C_display.jpg|180px]]&lt;br /&gt;
| name                = RDTech UM24C&lt;br /&gt;
| connectivity        = serial over Bluetooth&lt;br /&gt;
| features            = measures USB devices; voltage, amperage, wattage, resistance, capacity, temperature, voltage over USB data lines (charging mode)&lt;br /&gt;
| website             = [http://rdtech.aliexpress.com/ rdtech.aliexpress.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
A ~$13 USB load meter; it measures various properties for USB devices including their voltage, amperage, wattage, resistance, capacity, temperature, data line voltage, and charging mode. It can track up to 11 groups of mAh/mWh capacity data, one of which is ephemeral (and disappears after replugging the device), nine of which are persistent until cleared, and one of which whose recording is only activated above a certain current threshold (and which can be recorded in parallel with any of the other 10 data groups). It also allows graphing the amperage and voltage over time, on the device&amp;#039;s display itself, as well as rotating the display contents into any orientation.&lt;br /&gt;
&lt;br /&gt;
Unlike most devices of this type, this one communicates through serial-over-Bluetooth; the manufacturer provides apps (for Android and Windows, downloads including device documentation [https://www.mediafire.com/folder/0jt6xx2cyn7jt/UM24 here]), but not protocol documentation nor source code.&lt;br /&gt;
&lt;br /&gt;
Note that this is specifically about the UM24&amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; - the UM24 is the version *without* Bluetooth communication, although it&amp;#039;s unclear whether the serial pads are still exposed and functional on that model. On the C model, the Bluetooth board is a separate layer (using an off-the-shelf serial-to-Bluetooth module) that connects to the serial pads using pogo pins.&lt;br /&gt;
&lt;br /&gt;
The manufacturer has indicated that the firmware is not designed to be upgradeable and doesn&amp;#039;t provide updates; nevertheless, the SWIM pin for the on-board STM8 chip is exposed, as are the other necessary pins for STM8 debugging. It&amp;#039;s unclear whether the chip will allow eg. dumping, though.&lt;br /&gt;
&lt;br /&gt;
The load meter can be connected either by plugging it in directly using its USB male plug end, or by connecting it using a cable and the micro-USB port on top. These are functionally equivalent; in both cases, both power and data are passed through and measured in the same way. I&amp;#039;ve not observed any difference in measurements between these two modes of operation.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s unclear whether measurement of data lines is accurate enough to theoretically be used as a logic analyzer, but given the strange stability of the values during testing (unlike the voltage on the power lines) and the low-end STM8 chip, I suspect it&amp;#039;s not.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
Clearer documentation (as well as a JS implementation of the protocol) are coming soon, but below are my rough notes of the protocol, that I&amp;#039;ve figured out by reverse-engineering the Android application. The device won&amp;#039;t auto-send any data; you&amp;#039;re expected to send 0xf0 any time you want new data, eg. on a timed loop.&lt;br /&gt;
&lt;br /&gt;
All data returned by the device consists of measurements and configuration status, in 130-byte chunks. To my knowledge, it will never send any other data. All bytes below are displayed in hex format; every command is a single byte.&lt;br /&gt;
&lt;br /&gt;
=== Commands to send ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Byte !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0xf0 || device control || Request new data dump; this triggers a 130-byte response&lt;br /&gt;
|----&lt;br /&gt;
| 0xf1 || device control || Go to next screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf2 || device control || Rotate screen&lt;br /&gt;
|----&lt;br /&gt;
| 0xf3 || device control || Switch to next data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xf4 || device control || Clear data group&lt;br /&gt;
|----&lt;br /&gt;
| 0xb&amp;#039;&amp;#039;N&amp;#039;&amp;#039; || configuration || Set recording threshold to a value between 0.00 and 0.15 A (where &amp;#039;&amp;#039;N&amp;#039;&amp;#039; in the byte is 4 bits representing the value after the decimal point, eg. 0xb7 to set it to 0.07 A)&lt;br /&gt;
|----&lt;br /&gt;
| 0xc&amp;#039;&amp;#039;N&amp;#039;&amp;#039; || configuration || Same as 0xb&amp;#039;&amp;#039;N&amp;#039;&amp;#039;, but for when you want to set it to a value between 0.16 and 0.30 A (16 subtracted from the value behind the decimal point, eg. 0.19 A == 0xc3)&lt;br /&gt;
|----&lt;br /&gt;
| 0xd&amp;#039;&amp;#039;N&amp;#039;&amp;#039; || configuration || Set device backlight level; &amp;#039;&amp;#039;N&amp;#039;&amp;#039; must be between 0 and 5 (inclusive)&lt;br /&gt;
|----&lt;br /&gt;
| 0xe&amp;#039;&amp;#039;N&amp;#039;&amp;#039; || configuration || Set screen timeout (&amp;#039;screensaver&amp;#039;); &amp;#039;&amp;#039;N&amp;#039;&amp;#039; is in minutes and must be between 0 and 9 (inclusive), where 0 disables the screensaver&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response format ===&lt;br /&gt;
&lt;br /&gt;
All byte offsets are in decimal, and inclusive. All values are big-endian and unsigned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset !! Length !! Type !! Meaning&lt;br /&gt;
|-----------------------------------&lt;br /&gt;
| 0 || 2 || marker || Start marker (always 0x0963)&lt;br /&gt;
|----&lt;br /&gt;
| 2 || 2 || measurement || Voltage (in mV, divide by 1000 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 4 || 2 || measurement || Amperage (in mA, divide by 1000 to get A)&lt;br /&gt;
|----&lt;br /&gt;
| 6 || 4 || measurement || Wattage (in mW, divide by 1000 to get W)&lt;br /&gt;
|----&lt;br /&gt;
| 10 || 2 || measurement || Temperature (in celsius)&lt;br /&gt;
|----&lt;br /&gt;
| 12 || 2 || measurement || Temperature (in fahrenheit)&lt;br /&gt;
|----&lt;br /&gt;
| 14 || 1 || unknown || Not used in app&lt;br /&gt;
|----&lt;br /&gt;
| 15 || 1 || configuration || Currently selected data group&lt;br /&gt;
|----&lt;br /&gt;
| 16 || 80 || measurement || Array of main capacity data groups (where the first one, group 0, is the ephemeral one) -- for each data group: 4 bytes mAh, 4 bytes mWh&lt;br /&gt;
|----&lt;br /&gt;
| 96 || 2 || measurement || USB data line voltage (positive) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 98 || 2 || measurement || USB data line voltage (negative) in centivolts (divide by 100 to get V)&lt;br /&gt;
|----&lt;br /&gt;
| 100 || 1 || measurement || Charging mode; this is an enum, where 0 = unknown/standard, 1 = QC2.0, and presumably 2 = QC3.0 (but I haven&amp;#039;t verified this)&lt;br /&gt;
|----&lt;br /&gt;
| 101 || 1 || unknown || Not used in app&lt;br /&gt;
|----&lt;br /&gt;
| 102 || 4 || measurement || mAh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 106 || 4 || measurement || mWh from threshold-based recording&lt;br /&gt;
|----&lt;br /&gt;
| 110 || 2 || configuration || Currently configured threshold for recording&lt;br /&gt;
|----&lt;br /&gt;
| 112 || 4 || measurement || Duration of recording, in seconds since start&lt;br /&gt;
|----&lt;br /&gt;
| 116 || 1 || configuration || Recording active (1 if recording)&lt;br /&gt;
|----&lt;br /&gt;
| 117 || 1 || unknown || Not used in app&lt;br /&gt;
|----&lt;br /&gt;
| 118 || 2 || configuration || Current screen timeout setting&lt;br /&gt;
|----&lt;br /&gt;
| 120 || 2 || configuration || Current backlight setting&lt;br /&gt;
|----&lt;br /&gt;
| 122 || 4 || measurement || Resistance in deci-ohms (divide by 10 to get ohms)&lt;br /&gt;
|----&lt;br /&gt;
| 126 || 1 || unknown || &lt;br /&gt;
|----&lt;br /&gt;
| 127 || 1 || configuration || Current screen (same order as on device)&lt;br /&gt;
|----&lt;br /&gt;
| 128 || 2 || marker || Stop marker (always 0xfff1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Board pictures ==&lt;br /&gt;
&lt;br /&gt;
Not great pictures, but hopefully they&amp;#039;ll be useful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UM24C_board_1.jpg&lt;br /&gt;
File:UM24C_board_2.jpg&lt;br /&gt;
File:UM24C_board_3.jpg&lt;br /&gt;
File:UM24C_board_4.jpg&lt;br /&gt;
File:UM24C_board_5.jpg&lt;br /&gt;
File:UM24C_board_6.jpg&lt;br /&gt;
File:UM24C_board_7.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fo0bar</name></author>
	</entry>
</feed>