0x0F: ['All DACs', 'All'],
}
-input_voltage_format = ['%fV', '%fV', '%.6fV', '%.2fV']
+input_voltage_format = ['%.6fV', '%.2fV']
class Decoder(srd.Decoder):
api_version = 3
license = 'gplv2+'
inputs = ['i2c']
outputs = []
- tags = ['Display']
+ tags = ['IC', 'Analog/digital']
options = (
- {'id': 'part', 'desc': 'Part', 'default': 'ltc26x7',
+ {'id': 'chip', 'desc': 'Chip', 'default': 'ltc2607',
'values': ('ltc2607', 'ltc2617', 'ltc2627')},
- {'id': 'ref', 'desc': 'Reference voltage', 'default': 1.5},
+ {'id': 'vref', 'desc': 'Reference voltage (V)', 'default': 1.5},
)
annotations = (
('slave_addr', 'Slave address'),
('command', 'Command'),
('address', 'Address'),
- ('data', '2 byte data'),
+ ('dac_a_voltage', 'DAC A voltage'),
+ ('dac_b_voltage', 'DAC B voltage'),
)
annotation_rows = (
- ('ltc26x7', 'LTC26x7 data', (0, 1, 2, 3)),
+ ('addr_cmd', 'Address/command', (0, 1, 2)),
+ ('dac_a_voltages', 'DAC A voltages', (3,)),
+ ('dac_b_voltages', 'DAC B voltages', (4,)),
)
def __init__(self):
self.state = 'IDLE'
self.ss = -1
self.data = 0x00
+ self.dac_val = 0
def start(self):
self.out_ann = self.register(srd.OUTPUT_ANN)
def handle_cmd_addr(self, data):
cmd_val = (data >> 4) & 0x0F
- dac_val = (data & 0x0F)
+ self.dac_val = (data & 0x0F)
sm = (self.ss + self.es) // 2
self.put(self.ss, sm, self.out_ann, [1, commands[cmd_val]])
- self.put(sm, self.es, self.out_ann, [2, addresses[dac_val]])
+ self.put(sm, self.es, self.out_ann, [2, addresses[self.dac_val]])
def handle_data(self, data):
self.data = (self.data << 8) & 0xFF00
self.data += data
- if self.options['part'] == 'ltc2617':
+ if self.options['chip'] == 'ltc2617':
self.data = (self.data >> 2)
- self.data = (self.options['ref'] * self.data) / 0x3FFF
- elif self.options['part'] == 'ltc2627':
+ self.data = (self.options['vref'] * self.data) / 0x3FFF
+ elif self.options['chip'] == 'ltc2627':
self.data = (self.data >> 4)
- self.data = (self.options['ref'] * self.data) / 0x0FFF
+ self.data = (self.options['vref'] * self.data) / 0x0FFF
else:
- self.data = (self.options['ref'] * self.data) / 0xFFFF
+ self.data = (self.options['vref'] * self.data) / 0xFFFF
ann = []
for format in input_voltage_format:
ann.append(format % self.data)
self.data = 0
- self.put(self.ss, self.es, self.out_ann, [3, ann])
+ if self.dac_val == 0x0F: # All DACs (A and B).
+ self.put(self.ss, self.es, self.out_ann, [3 + 0, ann])
+ self.put(self.ss, self.es, self.out_ann, [3 + 1, ann])
+ else:
+ self.put(self.ss, self.es, self.out_ann, [3 + self.dac_val, ann])
def decode(self, ss, es, data):
cmd, databyte = data