Update(boards): xpython板卡执行 build:prod
This commit is contained in:
@@ -19,6 +19,8 @@ _IRQ_CENTRAL_DISCONNECT = const(2)
|
||||
_IRQ_GATTS_WRITE = const(3)
|
||||
_IRQ_MTU_EXCHANGED = const(21)
|
||||
_IRQ_CONNECTION_UPDATE = const(27)
|
||||
_IRQ_GET_SECRET = const(29)
|
||||
_IRQ_SET_SECRET = const(30)
|
||||
_IRQ_PASSKEY_ACTION = const(31)
|
||||
_PASSKEY_ACTION_INPUT = const(2)
|
||||
_PASSKEY_ACTION_DISP = const(3)
|
||||
@@ -66,6 +68,11 @@ class Keyboard:
|
||||
self.passkey = passkey
|
||||
self.battery_level = battery_level
|
||||
self.report = b'\x00'
|
||||
try:
|
||||
import ble_hid_key
|
||||
self.keys = ble_hid_key.keys
|
||||
except:
|
||||
self.keys = {}
|
||||
|
||||
handles = self._ble.gatts_register_services((_DIS, _BAS, _HIDS))
|
||||
self._service_characteristics(handles)
|
||||
@@ -106,10 +113,44 @@ class Keyboard:
|
||||
print("unknown action")
|
||||
elif event == _IRQ_GATTS_WRITE:
|
||||
conn_handle, attr_handle = data
|
||||
self.report = self._ble.gatts_read(attr_handle)
|
||||
self.report = self._ble.gatts_read(attr_handle)
|
||||
elif event == _IRQ_SET_SECRET:
|
||||
sec_type, key, value = data
|
||||
key = sec_type, bytes(key)
|
||||
value = bytes(value) if value else None
|
||||
#print("Set secret: ", key, value)
|
||||
if value is None:
|
||||
if key in self.keys:
|
||||
del self.keys[key]
|
||||
self.key_secrets(self.keys)
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
self.keys[key] = value
|
||||
self.key_secrets(self.keys)
|
||||
return True
|
||||
elif event == _IRQ_GET_SECRET:
|
||||
sec_type, index, key = data
|
||||
#print("Get secret: ", sec_type, index, bytes(key) if key else None)
|
||||
if key is None:
|
||||
i = 0
|
||||
for (t, _key), value in self.keys.items():
|
||||
if t == sec_type:
|
||||
if i == index:
|
||||
return value
|
||||
i += 1
|
||||
return None
|
||||
else:
|
||||
key = sec_type, bytes(key)
|
||||
return self.keys.get(key, None)
|
||||
#else:
|
||||
#print("Unhandled IRQ event: ", event, data)
|
||||
|
||||
def key_secrets(self, keys={}):
|
||||
with open("ble_hid_key.py", "w+") as s_f:
|
||||
s_f.write("keys=" + str(keys) + "\n")
|
||||
|
||||
def _service_characteristics(self, handles):
|
||||
(h_mod, h_ser, h_fwr, h_hwr, h_swr, h_man, h_pnp) = handles[0]
|
||||
(self.h_bat, h_ccc, h_bfmt,) = handles[1]
|
||||
|
||||
@@ -18,6 +18,8 @@ _IRQ_CENTRAL_CONNECT = const(1)
|
||||
_IRQ_CENTRAL_DISCONNECT = const(2)
|
||||
_IRQ_MTU_EXCHANGED = const(21)
|
||||
_IRQ_CONNECTION_UPDATE = const(27)
|
||||
_IRQ_GET_SECRET = const(29)
|
||||
_IRQ_SET_SECRET = const(30)
|
||||
_IRQ_PASSKEY_ACTION = const(31)
|
||||
_PASSKEY_ACTION_INPUT = const(2)
|
||||
_PASSKEY_ACTION_DISP = const(3)
|
||||
@@ -60,6 +62,11 @@ class Mouse:
|
||||
self.conn_handle = None
|
||||
self.passkey = passkey
|
||||
self.battery_level = battery_level
|
||||
try:
|
||||
import ble_hid_key
|
||||
self.keys = ble_hid_key.keys
|
||||
except:
|
||||
self.keys = {}
|
||||
|
||||
handles = self._ble.gatts_register_services((_DIS, _BAS, _HIDS))
|
||||
self._service_characteristics(handles)
|
||||
@@ -98,9 +105,43 @@ class Mouse:
|
||||
self._ble.gap_passkey(conn_handle, action, None)
|
||||
else:
|
||||
print("unknown action")
|
||||
elif event == _IRQ_SET_SECRET:
|
||||
sec_type, key, value = data
|
||||
key = sec_type, bytes(key)
|
||||
value = bytes(value) if value else None
|
||||
#print("Set secret: ", key, value)
|
||||
if value is None:
|
||||
if key in self.keys:
|
||||
del self.keys[key]
|
||||
self.key_secrets(self.keys)
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
self.keys[key] = value
|
||||
self.key_secrets(self.keys)
|
||||
return True
|
||||
elif event == _IRQ_GET_SECRET:
|
||||
sec_type, index, key = data
|
||||
#print("Get secret: ", sec_type, index, bytes(key) if key else None)
|
||||
if key is None:
|
||||
i = 0
|
||||
for (t, _key), value in self.keys.items():
|
||||
if t == sec_type:
|
||||
if i == index:
|
||||
return value
|
||||
i += 1
|
||||
return None
|
||||
else:
|
||||
key = sec_type, bytes(key)
|
||||
return self.keys.get(key, None)
|
||||
#else:
|
||||
#print("Unhandled IRQ event: ", event, data)
|
||||
|
||||
def key_secrets(self, keys={}):
|
||||
with open("ble_hid_key.py", "w+") as s_f:
|
||||
s_f.write("keys=" + str(keys) + "\n")
|
||||
|
||||
def _service_characteristics(self, handles):
|
||||
(h_mod, h_ser, h_fwr, h_hwr, h_swr, h_man, h_pnp) = handles[0]
|
||||
(self.h_bat, h_ccc, h_bfmt,) = handles[1]
|
||||
|
||||
@@ -69,10 +69,10 @@ class LTR_381RGB:
|
||||
return round(self._als, 2), self._ir, self._color
|
||||
|
||||
def color(self):
|
||||
return self.getdata[2]
|
||||
return self.getdata()[2]
|
||||
|
||||
def ir(self):
|
||||
return self.getdata[1]
|
||||
return self.getdata()[1]
|
||||
|
||||
def als(self):
|
||||
return self.getdata[0]
|
||||
return self.getdata()[0]
|
||||
|
||||
78
boards/default/micropython/build/lib/ucs12071.py
Normal file
78
boards/default/micropython/build/lib/ucs12071.py
Normal file
@@ -0,0 +1,78 @@
|
||||
"""
|
||||
UCS12071
|
||||
|
||||
MicroPython library for the UCS12071 (Color sensor)
|
||||
=======================================================
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
import time
|
||||
from micropython import const
|
||||
|
||||
UCS_SYSM_CTRL = const(0x00)
|
||||
UCS_INT_FLAG = const(0x02)
|
||||
UCS_WAIT_TIME = const(0x03)
|
||||
UCS_CLS_GAIN = const(0x04)
|
||||
UCS_CLS_TIME = const(0x05)
|
||||
UCS_CLS_DATA = const(0x1C)
|
||||
|
||||
_GAINS_X = (1, 4, 8, 32, 96, 192)
|
||||
|
||||
class UCS1207:
|
||||
def __init__(self, i2c_bus, addr=0x38, gain=2):
|
||||
self._device = i2c_bus
|
||||
self._address = addr
|
||||
self._gain = gain
|
||||
self._color = [0, 0, 0]
|
||||
self._ir = 0
|
||||
self._als = 0
|
||||
self._configure()
|
||||
|
||||
def _wreg(self, reg, val):
|
||||
'''Write memory address'''
|
||||
self._device.writeto_mem(self._address,reg,val.to_bytes(1, 'little'))
|
||||
|
||||
def _rreg(self, reg, nbytes=1):
|
||||
'''Read memory address'''
|
||||
return self._device.readfrom_mem(self._address, reg, nbytes)[0] if nbytes<=1 else self._device.readfrom_mem(self._address, reg, nbytes)[0:nbytes]
|
||||
|
||||
def _configure(self):
|
||||
'''Configuration Register'''
|
||||
#self._wreg(UCS_SYSM_CTRL, 0x80) #Software reset
|
||||
self._wreg(UCS_SYSM_CTRL, 0x03) #CLS & IR Enable
|
||||
self._wreg(UCS_CLS_GAIN, 1 << self._gain | 0x80) #CLS sensing gain
|
||||
self._wreg(UCS_CLS_TIME, 0x03) #CLSCONV INT_TIME
|
||||
self._wreg(UCS_WAIT_TIME, 0x00) #10ms per time unit
|
||||
|
||||
def status(self):
|
||||
'''Data conversion status'''
|
||||
return self._rreg(UCS_INT_FLAG) & 0x40
|
||||
|
||||
def getdata(self):
|
||||
'''Processing data acquisition'''
|
||||
if not self.status():
|
||||
_buf = self._rreg(UCS_CLS_DATA, 10)
|
||||
self._color[0] = _buf[0] | _buf[1] << 8
|
||||
self._color[1] = _buf[2] | _buf[3] << 8
|
||||
self._color[2] = _buf[4] | _buf[5] << 8
|
||||
self._als = _buf[6] | _buf[7] << 8
|
||||
self._ir = _buf[8] | _buf[9] << 8
|
||||
return self._als, self._ir, self._color
|
||||
|
||||
def color(self):
|
||||
w, _, (r, g, b) = self.getdata()
|
||||
if w == 0:
|
||||
return (0, 0, 0)
|
||||
else:
|
||||
red = int(pow((int((r / w) * 256) / 255), 2.5) * 255)
|
||||
green = int(pow((int((g / w) * 256) / 255), 2.5) * 255)
|
||||
blue = int(pow((int((b / w) * 256) / 255), 2.5) * 255)
|
||||
return (min(red, 255), min(green, 255), min(blue, 255))
|
||||
|
||||
def color_raw(self):
|
||||
return self.getdata()[2]
|
||||
|
||||
def ir(self):
|
||||
return round(self.getdata()[1] / _GAINS_X[self._gain])
|
||||
|
||||
def als(self):
|
||||
return round(self.getdata()[0] / _GAINS_X[self._gain])
|
||||
Reference in New Issue
Block a user