license = 'gplv2+'
inputs = ['logic']
outputs = ['ac97']
- tags = ['Logic', 'Audio']
+ tags = ['Audio', 'PC']
channels = (
{'id': 'sync', 'name': 'SYNC', 'desc': 'Frame synchronization'},
{'id': 'clk', 'name': 'BIT_CLK', 'desc': 'Data bits clock'},
license = 'mit'
inputs = ['spi']
outputs = ['ade77xx']
- tags = ['Logic', 'Sensors']
+ tags = ['Analog/digital', 'IC', 'Sensor']
annotations = (
('read', 'Register read commands'),
('write', 'Register write commands'),
license = 'gplv3+'
inputs = ['spi']
outputs = ['adf435x']
- tags = ['Logic']
+ tags = ['Clock/timing', 'IC', 'Wireless/RF']
annotations = (
# Sent from the host to the chip.
('register', 'Register written to the device'),
license = 'gplv2+'
inputs = ['spi']
outputs = ['adns5020']
- tags = ['Logic', 'Sensors']
+ tags = ['IC', 'PC', 'Sensor']
annotations = (
('read', 'Register read commands'),
('write', 'Register write commands'),
license = 'gplv2+'
inputs = ['logic']
outputs = ['am230x']
- tags = ['Logic', 'Sensors']
+ tags = ['IC', 'Sensor']
channels = (
{'id': 'sda', 'name': 'SDA', 'desc': 'Single wire serial data line'},
)
license = 'gplv2+'
inputs = ['uart']
outputs = ['arm_etmv3']
- tags = ['Logic', 'MCU Debugging']
+ tags = ['Debug/trace']
annotations = (
('trace', 'Trace info'),
('branch', 'Branches'),
license = 'gplv2+'
inputs = ['uart']
outputs = ['arm_itm']
- tags = ['Logic', 'MCU Debugging']
+ tags = ['Debug/trace']
options = (
{'id': 'objdump', 'desc': 'objdump path',
'default': 'arm-none-eabi-objdump'},
license = 'gplv2+'
inputs = ['uart']
outputs = ['uart'] # Emulate uart output so that arm_itm/arm_etm can stack.
- tags = ['Logic', 'MCU Debugging']
+ tags = ['Debug/trace']
options = (
{'id': 'stream', 'desc': 'Stream index', 'default': 1},
{'id': 'sync_offset', 'desc': 'Initial sync offset', 'default': 0},
license = 'gplv2+'
inputs = ['i2c']
outputs = ['atsha204a']
- tags = ['Logic']
+ tags = ['Security/crypto', 'IC', 'Memory']
annotations = (
('waddr', 'Word address'),
('count', 'Count'),
license = 'gplv2+'
inputs = ['logic']
outputs = ['aud']
- tags = ['Logic', 'MCU Debugging']
+ tags = ['Debug/trace']
channels = (
{'id': 'audck', 'name': 'AUDCK', 'desc': 'AUD clock'},
{'id': 'naudsync', 'name': 'nAUDSYNC', 'desc': 'AUD sync'},
license = 'gplv2+'
inputs = ['spi']
outputs = ['avr_isp']
- tags = ['Logic', 'MCU Debugging']
+ tags = ['Debug/trace']
annotations = (
('pe', 'Programming enable'),
('rsb0', 'Read signature byte 0'),
license = 'gplv2+'
inputs = ['logic']
outputs = ['pdi']
- tags = ['Logic', 'MCU Debugging']
+ tags = ['Debug/trace']
channels = (
{'id': 'reset', 'name': 'RESET', 'desc': 'RESET / PDI_CLK'},
{'id': 'data', 'name': 'DATA', 'desc': 'PDI_DATA'},
license = 'gplv2+'
inputs = ['logic']
outputs = ['can']
- tags = ['Logic', 'Bus']
+ tags = ['Automotive']
channels = (
{'id': 'can_rx', 'name': 'CAN RX', 'desc': 'CAN bus line'},
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['cec']
- tags = ['Logic', 'Bus', 'Video']
+ tags = ['Display', 'PC']
channels = (
{'id': 'cec', 'name': 'CEC', 'desc': 'CEC bus data'},
)
license = 'BSD'
inputs = ['mdio']
outputs = ['cfp']
+ tags = ['Networking']
annotations = (
('register', 'Register'),
('decode', 'Decode'),
license = 'gplv2+'
inputs = ['logic']
outputs = []
- tags = ['Logic', 'Tools']
+ tags = ['Util']
channels = (
{'id': 'data', 'name': 'Data', 'desc': 'Data line'},
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['dali']
+ tags = ['Embedded/industrial', 'Lighting']
channels = (
{'id': 'dali', 'name': 'DALI', 'desc': 'DALI data line'},
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['dcf77']
+ tags = ['Clock/timing']
channels = (
{'id': 'data', 'name': 'DATA', 'desc': 'DATA line'},
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['dmx512']
+ tags = ['Embedded/industrial', 'Lighting']
channels = (
{'id': 'dmx', 'name': 'DMX data', 'desc': 'Any DMX data line'},
)
license = 'gplv2+'
inputs = ['i2c']
outputs = ['ds1307']
+ tags = ['Clock/timing', 'IC']
annotations = regs_and_bits() + (
('read-datetime', 'Read date/time'),
('write-datetime', 'Write date/time'),
license = 'gplv2+'
inputs = ['onewire_network']
outputs = ['ds243x']
+ tags = ['IC', 'Memory']
annotations = (
('text', 'Human-readable text'),
)
license = 'gplv2+'
inputs = ['onewire_network']
outputs = ['ds28ea00']
+ tags = ['IC', 'Sensor']
annotations = (
('text', 'Human-readable text'),
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['dsi']
+ tags = ['Embedded/industrial', 'Lighting']
channels = (
{'id': 'dsi', 'name': 'DSI', 'desc': 'DSI data line'},
)
license = 'gplv3+'
inputs = ['i2c']
outputs = ['edid']
- tags = ['Logic', 'Video', 'Bus']
+ tags = ['Display', 'Memory', 'PC']
annotations = (
('fields', 'EDID structure fields'),
('sections', 'EDID structure sections'),
license = 'gplv2+'
inputs = ['i2c']
outputs = ['eeprom24xx']
- tags = ['Logic', 'Memory']
+ tags = ['IC', 'Memory']
options = (
{'id': 'chip', 'desc': 'Chip', 'default': 'generic',
'values': tuple(chips.keys())},
license = 'gplv2+'
inputs = ['microwire']
outputs = ['eeprom93xx']
- tags = ['Logic', 'Memory']
+ tags = ['IC', 'Memory']
options = (
{'id': 'addresssize', 'desc': 'Address size', 'default': 8},
{'id': 'wordsize', 'desc': 'Word size', 'default': 16},
license = 'gplv2+'
inputs = ['logic']
outputs = ['em4100']
- tags = ['Logic', 'Wireless']
+ tags = ['IC', 'RFID']
channels = (
{'id': 'data', 'name': 'Data', 'desc': 'Data line'},
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['em4305']
- tags = ['Logic', 'Wireless']
+ tags = ['IC', 'RFID']
channels = (
{'id': 'data', 'name': 'Data', 'desc': 'Data line'},
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['gpib']
+ tags = ['PC']
channels = (
{'id': 'dio1' , 'name': 'DIO1', 'desc': 'Data I/O bit 1'},
{'id': 'dio2' , 'name': 'DIO2', 'desc': 'Data I/O bit 2'},
license = 'gplv2+'
inputs = ['logic']
outputs = ['graycode']
+ tags = ['Encoding']
optional_channels = tuple(
{'id': 'd{}'.format(i), 'name': 'D{}'.format(i), 'desc': 'Data line {}'.format(i)}
for i in range(MAX_CHANNELS)
license = 'gplv2+'
inputs = ['logic']
outputs = ['guess_bitrate']
- tags = ['Logic', 'Tools']
+ tags = ['Clock/timing', 'Util']
channels = (
{'id': 'data', 'name': 'Data', 'desc': 'Data line'},
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['i2c']
- tags = ['Logic', 'Bus']
+ tags = ['Embedded/industrial']
channels = (
{'id': 'scl', 'name': 'SCL', 'desc': 'Serial clock line'},
{'id': 'sda', 'name': 'SDA', 'desc': 'Serial data line'},
license = 'gplv2+'
inputs = ['i2c']
outputs = [] # TODO: Only known at run-time.
+ tags = ['Util']
def __init__(self):
self.reset()
license = 'gplv3+'
inputs = ['i2c']
outputs = ['i2c']
+ tags = ['Util']
options = (
{'id': 'address', 'desc': 'Address to filter out of the I²C stream',
'default': 0},
license = 'gplv2+'
inputs = ['logic']
outputs = ['i2s']
- tags = ['Logic', 'Bus', 'Audio']
+ tags = ['Audio', 'PC']
channels = (
{'id': 'sck', 'name': 'SCK', 'desc': 'Bit clock line'},
{'id': 'ws', 'name': 'WS', 'desc': 'Word select line'},
license = 'gplv2+'
inputs = ['logic']
outputs = ['gpib']
+ tags = ['PC', 'Retro computing']
channels = (
{'id': 'data', 'name': 'DATA', 'desc': 'Data I/O'},
{'id': 'clk', 'name': 'CLK', 'desc': 'Clock'},
license = 'gplv2+'
inputs = ['logic']
outputs = ['ir_nec']
+ tags = ['IR']
channels = (
{'id': 'ir', 'name': 'IR', 'desc': 'Data line'},
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['ir_rc5']
+ tags = ['IR']
channels = (
{'id': 'ir', 'name': 'IR', 'desc': 'IR data line'},
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['jitter']
+ tags = ['Clock/timing', 'Util']
channels = (
{'id': 'clk', 'name': 'Clock', 'desc': 'Clock reference channel'},
{'id': 'sig', 'name': 'Resulting signal', 'desc': 'Resulting signal controlled by the clock'},
license = 'gplv2+'
inputs = ['logic']
outputs = ['jtag']
- tags = ['Logic', 'MCU Debugging', 'Bus']
+ tags = ['Debug/trace']
channels = (
{'id': 'tdi', 'name': 'TDI', 'desc': 'Test data input'},
{'id': 'tdo', 'name': 'TDO', 'desc': 'Test data output'},
license = 'gplv2+'
inputs = ['jtag']
outputs = ['jtag_ejtag']
- tags = ['Logic', 'MCU Debugging', 'Bus']
+ tags = ['Debug/trace']
annotations = (
('instruction', 'Instruction'),
) + regs_items['ann'] + (
license = 'gplv2+'
inputs = ['jtag']
outputs = ['jtag_stm32']
- tags = ['Logic', 'MCU Debugging', 'Bus']
+ tags = ['Debug/trace']
annotations = (
('item', 'Item'),
('field', 'Field'),
license = 'gplv2+'
inputs = ['uart']
outputs = ['lin']
+ tags = ['Automotive']
options = (
{'id': 'version', 'desc': 'Protocol version', 'default': 2, 'values': (1, 2)},
)
license = 'gplv2+'
inputs = ['i2c']
outputs = ['lm75']
+ tags = ['Sensor']
options = (
{'id': 'sensor', 'desc': 'Sensor type', 'default': 'lm75',
'values': ('lm75',)},
license = 'gplv2+'
inputs = ['logic']
outputs = ['lpc']
+ tags = ['PC']
channels = (
{'id': 'lframe', 'name': 'LFRAME#', 'desc': 'Frame'},
{'id': 'lclk', 'name': 'LCLK', 'desc': 'Clock'},
license = 'gplv2+'
inputs = ['logic']
outputs = ['maple_bus']
- tags = ['Logic', 'Bus']
+ tags = ['Retro computing']
channels = (
{'id': 'sdcka', 'name': 'SDCKA', 'desc': 'Data/clock line A'},
{'id': 'sdckb', 'name': 'SDCKB', 'desc': 'Data/clock line B'},
license = 'gplv2+'
inputs = ['spi']
outputs = ['max7219']
+ tags = ['Display']
annotations = (
('register', 'Registers written to the device'),
('digit', 'Digits displayed on the device'),
license = 'gplv2+'
inputs = ['logic']
outputs = ['mcs48']
+ tags = ['Retro computing']
channels = (
{'id': 'ale', 'name': 'ALE', 'desc': 'Address latch enable'},
{'id': 'psen', 'name': '/PSEN', 'desc': 'Program store enable'},
license = 'bsd'
inputs = ['logic']
outputs = ['mdio']
+ tags = ['Networking']
channels = (
{'id': 'mdc', 'name': 'MDC', 'desc': 'Clock'},
{'id': 'mdio', 'name': 'MDIO', 'desc': 'Data'},
license = 'gplv2+'
inputs = ['logic']
outputs = ['microwire']
+ tags = ['Embedded/industrial']
channels = (
{'id': 'cs', 'name': 'CS', 'desc': 'Chip select'},
{'id': 'sk', 'name': 'SK', 'desc': 'Clock'},
license = 'gplv2+'
inputs = ['uart']
outputs = ['midi']
- tags = ['Logic', 'Bus', 'Audio']
+ tags = ['Audio', 'PC']
annotations = (
('text-verbose', 'Human-readable text (verbose)'),
('text-sysreal-verbose', 'Human-readable SysReal text (verbose)'),
license = 'gplv2+'
inputs = ['logic']
outputs = ['miller']
+ tags = ['Encoding']
channels = (
{'id': 'data', 'name': 'Data', 'desc': 'Data signal'},
)
license = 'gplv2+'
inputs = ['i2c']
outputs = ['mlx90614']
+ tags = ['IC', 'Sensor']
annotations = (
('celsius', 'Temperature in degrees Celsius'),
('kelvin', 'Temperature in Kelvin'),
license = 'gplv3+'
inputs = ['uart']
outputs = ['modbus']
+ tags = ['Embedded/industrial']
annotations = (
('sc-server-id', ''),
('sc-function', ''),
license = 'gplv2+'
inputs = ['logic']
outputs = ['morse']
+ tags = ['Encoding']
channels = (
{'id': 'data', 'name': 'Data', 'desc': 'Data line'},
)
license = 'gplv2+'
inputs = ['spi']
outputs = ['mrf24j40']
+ tags = ['IC', 'Wireless/RF']
annotations = (
('sread', 'Short register read commands'),
('swrite', 'Short register write commands'),
license = 'gplv2+'
inputs = ['i2c']
outputs = ['mxc6225xu']
+ tags = ['IC', 'Sensor']
annotations = (
('text', 'Human-readable text'),
)
license = 'gplv2+'
inputs = ['spi']
outputs = ['nrf24l01']
+ tags = ['IC', 'Wireless/RF']
options = (
{'id': 'chip', 'desc': 'Chip type',
'default': 'nrf24l01', 'values': ('nrf24l01', 'xn297')},
license = 'gplv2+'
inputs = ['i2c']
outputs = ['nunchuck']
+ tags = ['Sensor']
annotations = \
tuple(('reg-0x%02X' % i, 'Register 0x%02X' % i) for i in range(6)) + (
('bit-bz', 'BZ bit'),
license = 'gplv2+'
inputs = ['logic']
outputs = ['onewire_link']
+ tags = ['Embedded/industrial']
channels = (
{'id': 'owr', 'name': 'OWR', 'desc': '1-Wire signal line'},
)
license = 'gplv2+'
inputs = ['onewire_link']
outputs = ['onewire_network']
+ tags = ['Embedded/industrial']
annotations = (
('text', 'Human-readable text'),
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['ook']
+ tags = ['Encoding']
channels = (
{'id': 'data', 'name': 'Data', 'desc': 'Data line'},
)
license = 'gplv2+'
inputs = ['ook']
outputs = []
+ tags = ['Sensor']
annotations = (
('bit', 'Bit'),
('field', 'Field'),
license = 'gplv2+'
inputs = ['ook']
outputs = ['ook']
+ tags = ['Encoding']
annotations = (
('bit', 'Bit'),
('ref', 'Reference'),
license = 'gplv2+'
inputs = ['uart']
outputs = ['pan1321']
+ tags = ['Wireless/RF']
annotations = (
('text-verbose', 'Human-readable text (verbose)'),
('text', 'Human-readable text'),
license = 'gplv2+'
inputs = ['logic']
outputs = ['parallel']
- tags = ['Logic', 'Bus']
+ tags = ['Util']
optional_channels = channel_list(NUM_CHANNELS)
options = (
{'id': 'clock_edge', 'desc': 'Clock edge to sample on',
license = 'gplv2+'
inputs = ['logic']
outputs = ['ps2']
- tags = ['Logic', 'Bus']
+ tags = ['PC']
channels = (
{'id': 'clk', 'name': 'Clock', 'desc': 'Clock line'},
{'id': 'data', 'name': 'Data', 'desc': 'Data line'},
license = 'gplv2+'
inputs = ['logic']
outputs = ['pwm']
+ tags = ['Encoding']
channels = (
{'id': 'data', 'name': 'Data', 'desc': 'Data line'},
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['qi']
+ tags = ['Embedded/industrial', 'Wireless/RF']
channels = (
{'id': 'qi', 'name': 'Qi', 'desc': 'Demodulated Qi data line'},
)
license = 'gplv2+'
inputs = ['logic']
outputs = []
+ tags = ['IC', 'IR']
channels = (
{'id': 'data', 'name': 'Data', 'desc': 'Data line'},
)
license = 'gplv2+'
inputs = ['spi']
outputs = ['rfm12']
+ tags = ['Wireless/RF']
annotations = (
('cmd', 'Command'),
('params', 'Command parameters'),
license = 'gplv2+'
inputs = ['spi']
outputs = ['rgb_led_spi']
+ tags = ['Display']
annotations = (
('rgb', 'RGB values'),
)
license = 'gplv3+'
inputs = ['logic']
outputs = ['rgb_led_ws281x']
+ tags = ['Display']
channels = (
{'id': 'din', 'name': 'DIN', 'desc': 'DIN data line'},
)
license = 'gplv2+'
inputs = ['i2c']
outputs = ['rtc8564']
+ tags = ['Clock/timing']
annotations = reg_list() + (
('read', 'Read date/time'),
('write', 'Write date/time'),
license = 'gplv2+'
inputs = ['logic']
outputs = ['sda2506']
+ tags = ['IC', 'Memory']
channels = (
{'id': 'clk', 'name': 'CLK', 'desc': 'Clock'},
{'id': 'd', 'name': 'DATA', 'desc': 'Data'},
license = 'gplv2+'
inputs = ['logic']
outputs = ['sdcard_sd']
- tags = ['Logic', 'Memory']
+ tags = ['Memory']
channels = (
{'id': 'cmd', 'name': 'CMD', 'desc': 'Command'},
{'id': 'clk', 'name': 'CLK', 'desc': 'Clock'},
license = 'gplv2+'
inputs = ['spi']
outputs = ['sdcard_spi']
- tags = ['Logic', 'Memory']
+ tags = ['Memory']
annotations = \
tuple(('cmd%d' % i, 'CMD%d' % i) for i in range(64)) + \
tuple(('acmd%d' % i, 'ACMD%d' % i) for i in range(64)) + ( \
license = 'gplv2+'
inputs = ['logic']
outputs = ['spdif']
+ tags = ['Audio', 'PC']
channels = (
{'id': 'data', 'name': 'Data', 'desc': 'Data line'},
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['spi']
- tags = ['Logic', 'Bus']
+ tags = ['Embedded/industrial']
channels = (
{'id': 'clk', 'name': 'CLK', 'desc': 'Clock'},
)
license = 'gplv2+'
inputs = ['spi']
outputs = ['spiflash']
+ tags = ['IC', 'Memory']
annotations = cmd_annotation_classes() + (
('bit', 'Bit'),
('field', 'Field'),
license = 'gplv2+'
inputs = ['spi']
outputs = ['ssi32']
+ tags = ['Embedded/industrial']
options = (
{'id': 'msgsize', 'desc': 'Message size', 'default': 64},
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['st7735']
+ tags = ['Display', 'IC']
channels = (
{'id': 'cs', 'name': 'CS#', 'desc': 'Chip-select'},
{'id': 'clk', 'name': 'CLK', 'desc': 'Clock'},
license = 'gplv2+'
inputs = ['logic']
outputs = ['stepper_motor']
+ tags = ['Embedded/industrial']
channels = (
{'id': 'step', 'name': 'Step', 'desc': 'Step pulse'},
{'id': 'dir', 'name': 'Direction', 'desc': 'Direction select'},
license = 'gplv2+'
inputs = ['logic']
outputs = ['swd']
+ tags = ['Debug/trace']
channels = (
{'id': 'swclk', 'name': 'SWCLK', 'desc': 'Master clock'},
{'id': 'swdio', 'name': 'SWDIO', 'desc': 'Data input/output'},
license = 'gplv2+'
inputs = ['logic']
outputs = []
+ tags = ['Debug/trace']
options = (
{'id': 'debug', 'desc': 'Debug', 'default': 'no', 'values': ('yes', 'no') },
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['t55xx']
+ tags = ['IC', 'RFID']
channels = (
{'id': 'data', 'name': 'Data', 'desc': 'Data line'},
)
license = 'gplv2+'
inputs = ['i2c']
outputs = ['tca6408a']
+ tags = ['Embedded/industrial', 'IC']
annotations = (
('register', 'Register type'),
('value', 'Register value'),
license = 'gplv2+'
inputs = ['logic']
outputs = ['timing']
- tags = ['Logic', 'Tools']
+ tags = ['Clock/timing', 'Util']
channels = (
{'id': 'data', 'name': 'Data', 'desc': 'Data line'},
)
license = 'gplv2+'
inputs = ['logic']
outputs = ['tlc5620']
+ tags = ['IC', 'Analog/digital']
channels = (
{'id': 'clk', 'name': 'CLK', 'desc': 'Serial interface clock'},
{'id': 'data', 'name': 'DATA', 'desc': 'Serial interface data'},
license = 'gplv2+'
inputs = ['logic']
outputs = ['uart']
- tags = ['Logic', 'Bus']
+ tags = ['Embedded/industrial']
optional_channels = (
# Allow specifying only one of the signals, e.g. if only one data
# direction exists (or is relevant).
license = 'gplv2+'
inputs = ['usb_signalling']
outputs = ['usb_packet']
+ tags = ['PC']
options = (
{'id': 'signalling', 'desc': 'Signalling',
'default': 'full-speed', 'values': ('full-speed', 'low-speed')},
license = 'gplv2+'
inputs = ['logic']
outputs = ['usb_pd']
+ tags = ['PC']
channels = (
{'id': 'cc1', 'name': 'CC1', 'desc': 'Configuration Channel 1'},
)
license = 'gplv2+'
inputs = ['usb_packet']
outputs = ['usb_request']
+ tags = ['PC']
annotations = (
('request-setup-read', 'Setup: Device-to-host'),
('request-setup-write', 'Setup: Host-to-device'),
license = 'gplv2+'
inputs = ['logic']
outputs = ['usb_signalling']
+ tags = ['PC']
channels = (
{'id': 'dp', 'name': 'D+', 'desc': 'USB D+ signal'},
{'id': 'dm', 'name': 'D-', 'desc': 'USB D- signal'},
license = 'gplv2+'
inputs = ['logic']
outputs = ['wiegand']
+ tags = ['Embedded/industrial', 'RFID']
channels = (
{'id': 'd0', 'name': 'D0', 'desc': 'Data 0 line'},
{'id': 'd1', 'name': 'D1', 'desc': 'Data 1 line'},
license = 'gplv2+'
inputs = ['spi']
outputs = ['x2444m']
+ tags = ['IC', 'Memory']
annotations = (
('wrds', 'Write disable'),
('sto', 'Store RAM data in EEPROM'),
license = 'gplv3+'
inputs = ['i2c']
outputs = ['xfp']
+ tags = ['Networking']
annotations = (
('fieldnames-and-values', 'XFP structure field names and values'),
('fields', 'XFP structure fields'),
license = 'gplv3+'
inputs = ['logic']
outputs = ['z80']
- tags = ['Logic', 'MCU Debugging']
+ tags = ['Retro computing']
channels = tuple({
'id': 'd%d' % i,
'name': 'D%d' % i,