X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=decoders%2Fddc.py;h=2336159d70f84d0f12d24addbf13f6db6604ef30;hb=876f83fd3396ce581e700741e58414c2f4f6277e;hp=09f684487e2b8a9fe1ece7810c687e9989bf9c08;hpb=7ce7775cb5a4e97264df62f43315d32504602072;p=libsigrokdecode.git diff --git a/decoders/ddc.py b/decoders/ddc.py index 09f6844..2336159 100644 --- a/decoders/ddc.py +++ b/decoders/ddc.py @@ -16,59 +16,60 @@ ## You should have received a copy of the GNU General Public License ## along with this program; if not, If not, see . ## +""" +This decoder extracts a DDC stream from an I2C session between a computer +and a display device. The stream is output as plain bytes. -# -# DDC protocol decoder -# -# This decoder extracts a DDC stream from an I2C session between a computer -# and a display device. The stream is output as plain bytes. -# +Details: +https://en.wikipedia.org/wiki/Display_Data_Channel +""" -import sigrokdecode +import sigrokdecode as srd - -class Decoder(sigrokdecode.Decoder): +class Decoder(srd.Decoder): id = 'ddc' name = 'DDC' longname = 'Display Data Channel' - desc = 'DDC is a protocol for communication between computers and displays.' + desc = 'A protocol for communication between computers and displays.' longdesc = '' - author = 'Bert Vermeulen ' + author = 'Bert Vermeulen' + email = 'bert@biot.com' license = 'gplv3+' inputs = ['i2c'] outputs = ['ddc'] - annotation = [ - ["Byte stream", "DDC byte stream as read from display."], + probes = [] + options = {} + annotations = [ + ['Byte stream', 'DDC byte stream as read from display.'], ] def __init__(self, **kwargs): self.state = None def start(self, metadata): - self.output_annotation = self.add(sigrokdecode.SRD_OUTPUT_ANNOTATION, 'ddc') + self.out_ann = self.add(srd.OUTPUT_ANN, 'ddc') - def decode(self, start_sample, end_sample, i2c_data): + def decode(self, ss, es, data): try: - cmd, data, ack_bit = i2c_data + cmd, data, ack_bit = data except Exception as e: - raise Exception("malformed I2C input: %s" % str(e)) from e + raise Exception('malformed I2C input: %s' % str(e)) from e if self.state is None: - # waiting for the DDC session to start - if cmd in ('START', 'START_REPEAT'): + # Wait for the DDC session to start. + if cmd in ('START', 'START REPEAT'): self.state = 'start' elif self.state == 'start': - if cmd == 'ADDRESS_READ' and data == 80: + if cmd == 'ADDRESS READ' and data == 80: # 80 is the I2C slave address of a connected display, # so this marks the start of the DDC data transfer. self.state = 'transfer' elif cmd == 'STOP': - # back to idle + # Got back to the idle state. self.state = None elif self.state == 'transfer': - if cmd == 'DATA_READ': - # there shouldn't be anything but data reads on this - # address, so ignore everything else - self.put(start_sample, end_sample, self.output_annotation, - [0, ["0x%.2x" % data]]) + if cmd == 'DATA READ': + # There shouldn't be anything but data reads on this + # address, so ignore everything else. + self.put(ss, es, self.out_ann, [0, ['0x%.2x' % data]])