UNPKG

es51922

Version:

Streaming Cyrustek ES51922 DMM data protocol implementation over serial

213 lines (209 loc) 6.25 kB
meta: id: es51922 title: Cyrustek ES51922 Data Protocol file-extension: es51922 seq: - id: raw_range type: u1 - id: raw_digit0 type: u1 - id: raw_digit1 type: u1 - id: raw_digit2 type: u1 - id: raw_digit3 type: u1 - id: raw_digit4 type: u1 - id: raw_func type: u1 - id: raw_status type: u1 - id: raw_option0 type: u1 - id: raw_option1 type: u1 - id: raw_option2 type: u1 - id: raw_option3 type: u1 - id: tail contents: [0xd, 0xa] instances: status: type: status options: type: options digits: pos: 1 size: 5 process: xor(0x30) range: type: switch-on: (raw_range ^ 0x30) | ((raw_func ^ 0x30) << 4) cases: 0x00: base_range('A', 1.0, 3, 'current') 0x10: base_range('V', 1.0, 4, 'diode') 0x20: base_range('Hz', 1.0, 2, 'frequency') 0x21: base_range('Hz', 1.0, 1, 'frequency') 0x22: base_range('kHz', 1000.0, 3, 'frequency') 0x23: base_range('kHz', 1000.0, 2, 'frequency') 0x24: base_range('MHz', 1000000.0, 4, 'frequency') 0x25: base_range('MHz', 1000000.0, 3, 'frequency') 0x26: base_range('MHz', 1000000.0, 2, 'frequency') 0x30: base_range('Ω', 1.0, 2, 'resistance') 0x31: base_range('kΩ', 1000.0, 4, 'resistance') 0x32: base_range('kΩ', 1000.0, 3, 'resistance') 0x33: base_range('kΩ', 1000.0, 2, 'resistance') 0x34: base_range('MΩ', 1000000.0, 4, 'resistance') 0x35: base_range('MΩ', 1000000.0, 3, 'resistance') 0x36: base_range('MΩ', 1000000.0, 2, 'resistance') 0x50: base_range('Ω', 1.0, 2, 'continuity') 0x60: base_range('nF', 1e-9, 3, 'capacitance') 0x61: base_range('nF', 1e-9, 2, 'capacitance') 0x62: base_range('µF', 1e-6, 4, 'capacitance') 0x63: base_range('µF', 1e-6, 3, 'capacitance') 0x64: base_range('µF', 1e-6, 2, 'capacitance') 0x65: base_range('mF', 1e-3, 4, 'capacitance') 0x66: base_range('mF', 1e-3, 3, 'capacitance') 0x67: base_range('mF', 1e-3, 2, 'capacitance') 0x90: base_range('A', 1.0, 4, 'current') 0x91: base_range('A', 1.0, 3, 'current') 0x92: base_range('A', 1.0, 2, 'current') 0x93: base_range('A', 1.0, 1, 'current') 0x94: base_range('A', 1.0, 0, 'current') 0xb0: base_range('V', 1.0, 4, 'voltage') 0xb1: base_range('V', 1.0, 3, 'voltage') 0xb2: base_range('V', 1.0, 2, 'voltage') 0xb3: base_range('V', 1.0, 1, 'voltage') 0xb4: base_range('mV', 1e-3, 2, 'voltage') 0xd0: base_range('µA', 1e-6, 2, 'current') 0xd1: base_range('µA', 1e-6, 1, 'current') 0xe0: base_adp_range(adp_ranges::adp0.to_i) 0xe1: base_adp_range(adp_ranges::adp1.to_i) 0xe2: base_adp_range(adp_ranges::adp2.to_i) 0xe3: base_adp_range(adp_ranges::adp3.to_i) 0xe4: base_adp_range(adp_ranges::adp4.to_i) 0xf0: base_range('mA', 1e-3, 3, 'current') 0xf1: base_range('mA', 1e-3, 2, 'current') func: value: raw_func ^ 0x30 enum: functions precision: value: >- range.as<base_range>.precision == 0 ? 1.0 : range.as<base_range>.precision == 1 ? 0.1 : range.as<base_range>.precision == 2 ? 0.01 : range.as<base_range>.precision == 3 ? 0.001 : 0.0001 value: value: >- ( ((raw_digit0 ^ 0x30) * 10000) + ((raw_digit1 ^ 0x30) * 1000) + ((raw_digit2 ^ 0x30) * 100) + ((raw_digit3 ^ 0x30) * 10) + (raw_digit4 ^ 0x30) ) * range.as<base_range>.multiplier * precision * status.sign_multiplier if: 'func != functions::temperature and func != functions::adp' enums: adp_ranges: 0: adp0 1: adp1 2: adp2 3: adp3 4: adp4 functions: 0: current_22a 1: diode 2: freq 3: resistance 4: temperature 5: continuity 6: capacitance 9: current_manual 11: voltage 13: current_microamp 14: adp 15: current_milliamp types: base_range: params: - id: unit type: str encoding: UTF-8 - id: multiplier type: f4 - id: precision type: u1 - id: mode type: str encoding: UTF-8 meta: xref: unit: unit precision: precision multiplier: multiplier mode: mode base_func: params: - id: base_unit type: str encoding: UTF-8 - id: base_range type: str encoding: UTF-8 - id: mode type: str encoding: UTF-8 meta: xref: base_unit: base_unit base_range: base_range mode: mode base_adp_range: params: - id: adp_mode type: u1 enum: adp_ranges status: instances: overload: value: '_parent.raw_status ^ 0x30 & 0 == 1' battery_low: value: '_parent.raw_status ^ 0x30 & 1 == 1' sign_multiplier: value: '_parent.raw_status ^ 0x30 & 2 == 1 ? -1 : 1' degrees: value: "_parent.raw_status ^ 0x30 & 3 == 1 ? 'C' : 'F'" underload: value: '_parent.raw_option1 ^ 0x30 & 2 == 1' operation: value: "overload ? 'overload' : underload ? 'underload' : 'normal'" options: instances: current_value: value: '_parent.raw_option0 ^ 0x30 & 0 == 1' relative: value: '_parent.raw_option0 ^ 0x30 & 1 == 1' minimum: value: '_parent.raw_option0 ^ 0x30 & 2 == 1' maximum: value: '_parent.raw_option0 ^ 0x30 & 3 == 1' peak_minimum: value: '_parent.raw_option1 ^ 0x30 & 1 == 1' peak_maximum: value: '_parent.raw_option1 ^ 0x30 & 2 == 1' vahz: value: '_parent.raw_option2 ^ 0x30 & 0 == 1' auto: value: '_parent.raw_option2 ^ 0x30 & 1 == 1' ac_mode: value: "_parent.raw_option2 ^ 0x30 & 2 == 1 ? 'current' : 'voltage'" dc_mode: value: "_parent.raw_option2 ^ 0x30 & 3 == 1 ? 'current' : 'voltage'" lpf: value: '_parent.raw_option3 ^ 0x30 & 0 == 1' hold: value: '_parent.raw_option3 ^ 0x30 & 1 == 1' vbar: value: '_parent.raw_option3 ^ 0x30 & 2 == 1'