- def putIr(self, data):
- ss = data['start'] * self.subSample
- es = data['end'] * self.subSample
- ad = data['data']['address']
- pr = data['data']['protocol']
- pn = data['data']['protocolName']
- cm = data['data']['command']
- repeat = data['data']['repeat']
-
-
- # print(f" {self.samplenum} {ss} - {es} ({data['start']} - {data['end']})")
- self.put(ss, es, self.out_ann,
- [0, [ f"Protocol: {pn} ({pr}), Address 0x{ad:04x}, Command: 0x{cm:04x} {'repeated' if repeat else ''}",
- f"P: {pn} ({pr}), Ad: 0x{ad:x}, Cmd: 0x{cm:x} {'rep' if repeat else ''}",
- f"P: {pr} A: 0x{ad:x} C: 0x{cm:x} {'rep' if repeat else ''}",
- f"C:{cm:x} A:{ad:x} {'r' if repeat else ''}",
- f"C:{cm:x}",
- ]])
+ def putframe(self, data):
+ '''Emit annotation for an IR frame.'''
+
+ # Cache result data fields in local variables. Get the ss/es
+ # timestamps, scaled to sample numbers.
+ nr = data['proto_nr']
+ name = data['proto_name']
+ addr = data['address']
+ cmd = data['command']
+ repeat = data['repeat']
+ release = data['release']
+ ss = data['start'] * self.rate_factor
+ es = data['end'] * self.rate_factor
+
+ # Prepare display texts for several zoom levels.
+ # Implementor's note: Keep list lengths for flags aligned during
+ # maintenance. Make sure there are as many flags text variants
+ # as are referenced by annotation text variants. Differing list
+ # lengths or dynamic refs will severely complicate the logic.
+ rep_txts = ['repeat', 'rep', 'r']
+ rel_txts = ['release', 'rel', 'R']
+ flag_txts = [None,] * len(rep_txts)
+ for zoom in range(len(flag_txts)):
+ flag_txts[zoom] = []
+ if repeat:
+ flag_txts[zoom].append(rep_txts[zoom])
+ if release:
+ flag_txts[zoom].append(rel_txts[zoom])
+ flag_txts = [' '.join(t) or '-' for t in flag_txts]
+ flg = flag_txts # Short name for .format() references.
+ txts = [
+ 'Protocol: {name} ({nr}), Address 0x{addr:04x}, Command: 0x{cmd:04x}, Flags: {flg[0]}'.format(**locals()),
+ 'P: {name} ({nr}), Addr: 0x{addr:x}, Cmd: 0x{cmd:x}, Flg: {flg[1]}'.format(**locals()),
+ 'P: {nr} A: 0x{addr:x} C: 0x{cmd:x} F: {flg[1]}'.format(**locals()),
+ 'C:{cmd:x} A:{addr:x} {flg[2]}'.format(**locals()),
+ 'C:{cmd:x}'.format(**locals()),
+ ]
+
+ # Emit the annotation from details which were constructed above.
+ self.put(ss, es, self.out_ann, [0, txts])