2024-06-15 23:22:31 +02:00

74 lines
2.2 KiB
Python

import sigrokdecode as srd
from .lists import *
(
ANN_RS1, ANN_RS2, ANN_RS3, ANN_xEQ1, ANN_xEQ2, ANN_xEQ3,
ANN_WARN
) = range(7)
class Decoder(srd.Decoder):
api_version = 3
id = 'tmc429'
name = 'TMC429'
longname = 'Trinamic TMC429'
desc = 'Trinamic TMC429 3-axis motion controller.'
license = 'gplv3+'
inputs = ['spi']
outputs = []
tags = ['IC']
annotations = (
('RS1', 'Left rerence switch 1'),
('RS2', 'Left rerence switch 2'),
('RS3', 'Left rerence switch 3'),
('xEQ1', 'Motro 1 reached target posistion'),
('xEQ2', 'Motro 2 reached target posistion'),
('xEQ3', 'Motro 3 reached target posistion'),
('warning', 'Warnings')
)
annotation_rows = (
('recieve', 'Recieve', (ANN_RS1, ANN_RS2, ANN_RS3, ANN_xEQ1, ANN_xEQ2, ANN_xEQ3)),
('warning', 'Warnings', (ANN_WARN))
)
def __init__(self):
self.reset()
def reset(self):
#self.ss_cmd, self.es_cmd = 0, 0
self.mosi_bytes = []
def start(self):
self.out_ann = self.register(srd.OUTPUT_ANN)
# def putx(self, data):
# self.put(self.ss_cmd, self.es_cmd, self.out_ann, data)
def put_warn(self, pos, msg):
self.put(pos[0], pos[1], self.out_ann, [2, [msg]])
def decode(self, ss, es, data):
if(data[0] == 'BITS'):
# check length of datapacket
if(len(data[1]) < 16):
# datapacket to short
#TODO: add error
return
# trim to the last 16 bits
#TODO: add warning it packet is to long
while(len(data[1]) == 16):
data[1].pop(0)
data[2].pop(0)
self.decodeRecieve(data[2])
def decodeRecieve(self, data):
# read left rerence switches
if(data[2][0]):
self.put(data[2][1], data[2][2], self.out_ann, [ANN_RS3, ['RS3']])
if(data[4][0]):
self.put(data[4][1], data[4][2], self.out_ann, [ANN_RS2, ['RS2']])
if(data[6][0]):
self.put(data[6][1], data[6][2], self.out_ann, [ANN_RS1, ['RS1']])