mirror of
https://github.com/tillitis/tillitis-key1.git
synced 2024-12-29 17:36:26 -05:00
Remove HID interface
This commit is contained in:
parent
04be27f6a7
commit
4eb025a978
@ -1,245 +0,0 @@
|
||||
# Install python3 HID package https://pypi.org/project/hid/
|
||||
import hid
|
||||
import time
|
||||
import struct
|
||||
import math
|
||||
|
||||
USB_VID = 0xcafe
|
||||
|
||||
|
||||
class ice40_flasher:
|
||||
def __init__(self):
|
||||
self.dev = None
|
||||
for dict in hid.enumerate(USB_VID):
|
||||
self.dev = hid.Device(dict['vendor_id'], dict['product_id'])
|
||||
if self.dev is None:
|
||||
raise IOError("Couldn't find any hid device with vendor id 0x%x" % (USB_VID))
|
||||
|
||||
def close(self):
|
||||
self.dev.close()
|
||||
|
||||
def led_set(self, value):
|
||||
msg = struct.pack('>BBB',
|
||||
0x0,
|
||||
0x00,
|
||||
(1 if value else 0)
|
||||
)
|
||||
|
||||
#print(['{:02x}'.format(b) for b in msg])
|
||||
self.dev.write(msg)
|
||||
|
||||
def gpio_set_direction(self, pin, direction):
|
||||
msg = struct.pack('>BBII',
|
||||
0x0,
|
||||
0x10,
|
||||
(1<<pin),
|
||||
((1 if direction else 0)<<pin),
|
||||
)
|
||||
|
||||
#print(['{:02x}'.format(b) for b in msg])
|
||||
self.dev.write(msg)
|
||||
|
||||
def gpio_set_pulls(self, pin, pullup, pulldown):
|
||||
msg = struct.pack('>BBIII',
|
||||
0x0,
|
||||
0x12,
|
||||
(1<<pin),
|
||||
((1 if pullup else 0)<<pin),
|
||||
((1 if pulldown else 0)<<pin),
|
||||
)
|
||||
|
||||
#print(['{:02x}'.format(b) for b in msg])
|
||||
self.dev.write(msg)
|
||||
|
||||
def gpio_put(self, pin, val):
|
||||
msg = struct.pack('>BBII',
|
||||
0x0,
|
||||
0x20,
|
||||
1 << pin,
|
||||
(1 if val else 0) << pin,
|
||||
)
|
||||
|
||||
#print(['{:02x}'.format(b) for b in msg])
|
||||
self.dev.write(msg)
|
||||
|
||||
def gpio_get_all(self):
|
||||
msg = struct.pack('<BB',
|
||||
0x0,
|
||||
0x30,
|
||||
)
|
||||
|
||||
#print(['{:02x}'.format(b) for b in msg])
|
||||
self.dev.write(msg)
|
||||
|
||||
msg_in = self.dev.read(5)
|
||||
#print(len(msg_in), ['{:02x}'.format(b) for b in msg_in])
|
||||
|
||||
[id, gpio_states] = struct.unpack('>BI', msg_in)
|
||||
assert(id == 0x30)
|
||||
|
||||
return gpio_states
|
||||
|
||||
def gpio_get(self, pin):
|
||||
# msg = struct.pack('<BB',
|
||||
# 0x0,
|
||||
# 0x30,
|
||||
# )
|
||||
#
|
||||
# print(['{:02x}'.format(b) for b in msg])
|
||||
# self.dev.write(msg)
|
||||
#
|
||||
# msg_in = self.dev.read(5)
|
||||
# print(len(msg_in), ['{:02x}'.format(b) for b in msg_in])
|
||||
#
|
||||
# [id, gpio_states] = struct.unpack('>BI', msg_in)
|
||||
# assert(id == 0x30)
|
||||
gpio_states = gpio_get_all()
|
||||
|
||||
return ((gpio_states >> pin) & 0x01) == 0x01
|
||||
|
||||
def spi_bitbang(self, sck_pin, mosi_pin, miso_pin, bit_count, buf):
|
||||
header = struct.pack('>BBBBBI',
|
||||
0x0,
|
||||
0x40,
|
||||
sck_pin,
|
||||
mosi_pin,
|
||||
miso_pin,
|
||||
bit_count)
|
||||
msg = bytearray()
|
||||
msg.extend(header)
|
||||
msg.extend(buf)
|
||||
|
||||
#print(['{:02x}'.format(b) for b in msg])
|
||||
self.dev.write(bytes(msg))
|
||||
|
||||
msg_in = self.dev.read(64)
|
||||
#print(len(msg_in), ['{:02x}'.format(b) for b in msg_in])
|
||||
|
||||
[id, bits_read] = struct.unpack('>BI', msg_in[0:5])
|
||||
assert(id == 0x40)
|
||||
assert(bits_read == bit_count)
|
||||
bytes_read = math.ceil(bit_count / 8)
|
||||
return msg_in[6:(6+bytes_read)]
|
||||
|
||||
def adc_read_all(self):
|
||||
msg = struct.pack('<BB',
|
||||
0x0,
|
||||
0x50,
|
||||
)
|
||||
|
||||
# print(['{:02x}'.format(b) for b in msg])
|
||||
self.dev.write(msg)
|
||||
|
||||
msg_in = self.dev.read(13)
|
||||
# print(len(msg_in), ['{:02x}'.format(b) for b in msg_in])
|
||||
|
||||
[id, ch0, ch1, ch2] = struct.unpack('>BIII', msg_in)
|
||||
assert(id == 0x50)
|
||||
|
||||
return ch0/1000000, ch1/1000000, ch2/1000000
|
||||
|
||||
if __name__ == '__main__':
|
||||
def test_gpio_loopback(flasher, gpioa, gpiob):
|
||||
|
||||
flasher.gpio_set_direction(gpioa, True)
|
||||
flasher.gpio_set_direction(gpiob, False)
|
||||
|
||||
flasher.gpio_put(gpioa, True)
|
||||
assert flasher.gpio_get(gpiob) == True
|
||||
|
||||
flasher.gpio_put(gpioa, False)
|
||||
assert flasher.gpio_get(gpiob) == False
|
||||
|
||||
flasher.gpio_set_direction(gpiob, True)
|
||||
flasher.gpio_set_direction(gpioa, False)
|
||||
|
||||
flasher.gpio_put(gpiob, True)
|
||||
assert flasher.gpio_get(gpioa) == True
|
||||
|
||||
flasher.gpio_put(gpiob, False)
|
||||
assert flasher.gpio_get(gpioa) == False
|
||||
|
||||
flasher.gpio_put(gpioa, False)
|
||||
flasher.gpio_put(gpiob, False)
|
||||
|
||||
def test_spi_4_bits(flasher):
|
||||
sck_pin = 10
|
||||
mosi_pin = 13
|
||||
miso_pin = 11
|
||||
|
||||
flasher.gpio_set_direction(sck_pin, True)
|
||||
flasher.gpio_set_direction(mosi_pin, True)
|
||||
flasher.gpio_set_direction(miso_pin, False)
|
||||
|
||||
bit_count = 4;
|
||||
buf = bytearray()
|
||||
buf.append(0x51)
|
||||
buf_in = flasher.spi_bitbang(
|
||||
sck_pin,
|
||||
mosi_pin,
|
||||
miso_pin,
|
||||
bit_count,
|
||||
buf
|
||||
)
|
||||
assert(buf_in == buf)
|
||||
|
||||
def test_spi_50_bytes(flasher):
|
||||
sck_pin = 10
|
||||
mosi_pin = 13
|
||||
miso_pin = 11
|
||||
cs_pin = 12
|
||||
|
||||
flasher.gpio_set_direction(cs_pin, True)
|
||||
flasher.gpio_put(cs_pin, False)
|
||||
|
||||
flasher.gpio_set_direction(sck_pin, True)
|
||||
flasher.gpio_set_direction(mosi_pin, True)
|
||||
flasher.gpio_set_direction(miso_pin, False)
|
||||
|
||||
|
||||
buf = bytearray()
|
||||
for i in range(0,50):
|
||||
buf.append(i)
|
||||
|
||||
bit_count = len(buf)*8;
|
||||
buf_in = flasher.spi_bitbang(
|
||||
sck_pin,
|
||||
mosi_pin,
|
||||
miso_pin,
|
||||
bit_count,
|
||||
buf
|
||||
)
|
||||
|
||||
flasher.gpio_put(cs_pin, True)
|
||||
|
||||
flasher = ice40_flasher()
|
||||
flasher.led_set(True)
|
||||
|
||||
flasher.gpio_set_direction(7, True)
|
||||
flasher.gpio_put(7, False)
|
||||
time.sleep(.1)
|
||||
flasher.gpio_put(7, True)
|
||||
print(flasher.adc_read_all())
|
||||
exit(0)
|
||||
|
||||
vals = [0,0,0]
|
||||
sample_count = 100
|
||||
for sample in range(0, sample_count):
|
||||
val = flasher.adc_read_all()
|
||||
vals[0] += val[0]
|
||||
vals[1] += val[1]
|
||||
vals[2] += val[2]
|
||||
|
||||
print(['{:.3f}'.format(val/sample_count/1000000) for val in vals])
|
||||
exit(0)
|
||||
|
||||
# Test program: put a jumper between gpio16 and gpio17
|
||||
#gpioa = 16
|
||||
#gpiob = 17
|
||||
#test_gpio_loopback(flasher, gpioa, gpiob)
|
||||
|
||||
flasher.gpio_set_direction(7, True)
|
||||
flasher.gpio_put(7, True)
|
||||
|
||||
#test_spi_4_bits(flasher)
|
||||
test_spi_50_bytes(flasher)
|
Loading…
Reference in New Issue
Block a user