driver: rm data validation
- Data validation is done on Kirdy Server side - Thus, remove duplicated logic - Merge send_cmd and send_raw_cmd
This commit is contained in:
parent
cd3347798c
commit
76a19cb65a
@ -20,6 +20,9 @@ class State(StrEnum):
|
|||||||
connected = "connected"
|
connected = "connected"
|
||||||
|
|
||||||
class CmdList:
|
class CmdList:
|
||||||
|
class tec_set_i(StrEnum, settings=NoAlias):
|
||||||
|
_target = "tec_set_i"
|
||||||
|
tec_set_i = _dt.f32
|
||||||
class device(StrEnum, settings=NoAlias):
|
class device(StrEnum, settings=NoAlias):
|
||||||
_target = "device_cmd"
|
_target = "device_cmd"
|
||||||
SetIPSettings = _dt.ip_settings
|
SetIPSettings = _dt.ip_settings
|
||||||
@ -168,17 +171,13 @@ class FilterConfig:
|
|||||||
def _filter_type(self):
|
def _filter_type(self):
|
||||||
return "Sinc3WithFineODR"
|
return "Sinc3WithFineODR"
|
||||||
|
|
||||||
class InvalidDataType(Exception):
|
|
||||||
pass
|
|
||||||
|
|
||||||
class InvalidCmd(Exception):
|
class InvalidCmd(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class Device:
|
class Device:
|
||||||
def __init__(self, send_cmd_handler, send_raw_cmd_handler):
|
def __init__(self, send_cmd_handler):
|
||||||
self._cmd = CmdList.device
|
self._cmd = CmdList.device
|
||||||
self._send_cmd = send_cmd_handler
|
self._send_cmd = send_cmd_handler
|
||||||
self._send_raw_cmd = send_raw_cmd_handler
|
|
||||||
|
|
||||||
async def set_ip_settings(self, addr="192.168.1.128", port=1550, prefix_len=24, gateway="192.168.1.1"):
|
async def set_ip_settings(self, addr="192.168.1.128", port=1550, prefix_len=24, gateway="192.168.1.1"):
|
||||||
"""
|
"""
|
||||||
@ -196,15 +195,14 @@ class Device:
|
|||||||
if not(isinstance(port, int) and isinstance(prefix_len, int)):
|
if not(isinstance(port, int) and isinstance(prefix_len, int)):
|
||||||
raise InvalidDataType
|
raise InvalidDataType
|
||||||
|
|
||||||
return await self._send_raw_cmd(
|
return await self._send_cmd(
|
||||||
|
self._cmd._target,
|
||||||
|
self._cmd.SetIPSettings,
|
||||||
{
|
{
|
||||||
"device_cmd": "SetIPSettings",
|
"addr": [int(x) for x in addr],
|
||||||
"ip_settings": {
|
"port": port,
|
||||||
"addr": [int(x) for x in addr],
|
"prefix_len": prefix_len,
|
||||||
"port": port,
|
"gateway": [int(x) for x in gateway],
|
||||||
"prefix_len": prefix_len,
|
|
||||||
"gateway": [int(x) for x in gateway],
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -454,10 +452,10 @@ class Laser:
|
|||||||
return await self._send_cmd(self._cmd._target, self._cmd.ClearAlarm)
|
return await self._send_cmd(self._cmd._target, self._cmd.ClearAlarm)
|
||||||
|
|
||||||
class Thermostat:
|
class Thermostat:
|
||||||
def __init__(self, send_cmd_handler, send_raw_cmd_handler):
|
def __init__(self, send_cmd_handler):
|
||||||
self._cmd = CmdList.thermostat
|
self._cmd = CmdList.thermostat
|
||||||
|
self.tec_set_i_cmd = CmdList.tec_set_i
|
||||||
self._send_cmd = send_cmd_handler
|
self._send_cmd = send_cmd_handler
|
||||||
self._send_raw_cmd = send_raw_cmd_handler
|
|
||||||
|
|
||||||
async def set_power_on(self, on):
|
async def set_power_on(self, on):
|
||||||
"""
|
"""
|
||||||
@ -504,12 +502,7 @@ class Thermostat:
|
|||||||
or your newly set value will be overwritten by PID Controller Output
|
or your newly set value will be overwritten by PID Controller Output
|
||||||
- i_out: A
|
- i_out: A
|
||||||
"""
|
"""
|
||||||
if isinstance(i_out, float):
|
await self._send_cmd(self.tec_set_i_cmd._target, self.tec_set_i_cmd.tec_set_i, i_out)
|
||||||
return await self._send_raw_cmd({"tec_set_i": i_out})
|
|
||||||
elif isinstance(i_out, int):
|
|
||||||
return await self._send_raw_cmd({"tec_set_i": float(i_out)})
|
|
||||||
else:
|
|
||||||
raise InvalidDataType
|
|
||||||
|
|
||||||
async def set_constant_current_control_mode(self):
|
async def set_constant_current_control_mode(self):
|
||||||
"""
|
"""
|
||||||
@ -618,29 +611,33 @@ class Thermostat:
|
|||||||
performs differently under different kinds of workload. Please verify the polling rate with
|
performs differently under different kinds of workload. Please verify the polling rate with
|
||||||
the timestamp.
|
the timestamp.
|
||||||
"""
|
"""
|
||||||
cmd = {}
|
|
||||||
cmd[self._cmd._target] = self._cmd.ConfigTempAdcFilter.name
|
|
||||||
if hasattr(filter_config, 'rate'):
|
if hasattr(filter_config, 'rate'):
|
||||||
cmd[self._cmd.ConfigTempAdcFilter] = {
|
return await self._send_cmd(
|
||||||
"filter_type": filter_config._filter_type(),
|
self._cmd._target,
|
||||||
filter_config._odr_type: filter_config.rate,
|
self._cmd.ConfigTempAdcFilter,
|
||||||
}
|
{
|
||||||
|
"filter_type": filter_config._filter_type(),
|
||||||
|
filter_config._odr_type: filter_config.rate,
|
||||||
|
}
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
cmd[self._cmd.ConfigTempAdcFilter] = {
|
return await self._send_cmd(
|
||||||
"filter_type": filter_config._filter_type(),
|
self._cmd._target,
|
||||||
filter_config._odr_type: filter_config,
|
self._cmd.ConfigTempAdcFilter,
|
||||||
}
|
{
|
||||||
|
"filter_type": filter_config._filter_type(),
|
||||||
return await self._send_raw_cmd(cmd)
|
filter_config._odr_type: filter_config,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
async def get_poll_interval(self):
|
async def get_poll_interval(self):
|
||||||
return await self._send_cmd(self._cmd._target, self._cmd.GetPollInterval, msg_type="Interval")
|
return await self._send_cmd(self._cmd._target, self._cmd.GetPollInterval, msg_type="Interval")
|
||||||
|
|
||||||
class Kirdy:
|
class Kirdy:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.device = Device(self._send_cmd, self._send_raw_cmd)
|
self.device = Device(self._send_cmd)
|
||||||
self.laser = Laser(self._send_cmd)
|
self.laser = Laser(self._send_cmd)
|
||||||
self.thermostat = Thermostat(self._send_cmd, self._send_raw_cmd)
|
self.thermostat = Thermostat(self._send_cmd)
|
||||||
self.hw_rev = None
|
self.hw_rev = None
|
||||||
|
|
||||||
self._task_queue, self._int_msg_queue, self._report_queue = None, None, None
|
self._task_queue, self._int_msg_queue, self._report_queue = None, None, None
|
||||||
@ -902,32 +899,19 @@ class Kirdy:
|
|||||||
self._err_msg_sig.emit(msg['msg'])
|
self._err_msg_sig.emit(msg['msg'])
|
||||||
return msg
|
return msg
|
||||||
|
|
||||||
async def _send_raw_cmd(self, cmd, msg_type="Acknowledge", sig=None):
|
|
||||||
if self.connected():
|
|
||||||
async with self._lock:
|
|
||||||
self._writer.write(bytes(json.dumps(cmd), "UTF-8"))
|
|
||||||
await self._writer.drain()
|
|
||||||
msg = await asyncio.wait_for(self._int_msg_queue.get(), self._timeout)
|
|
||||||
return self._response_handling(msg, msg_type, sig)
|
|
||||||
else:
|
|
||||||
raise ConnectionError
|
|
||||||
|
|
||||||
async def _send_cmd(self, target, cmd, data=None, msg_type="Acknowledge", sig=None):
|
async def _send_cmd(self, target, cmd, data=None, msg_type="Acknowledge", sig=None):
|
||||||
cmd_dict = {}
|
cmd_dict = {}
|
||||||
cmd_dict[target] = cmd.name
|
|
||||||
|
|
||||||
if cmd == _dt.f32:
|
if target == "tec_set_i":
|
||||||
if isinstance(data, float):
|
cmd_dict[target] = float(data)
|
||||||
|
else:
|
||||||
|
cmd_dict[target] = cmd.name
|
||||||
|
if cmd != 'None':
|
||||||
|
if cmd == _dt.bool:
|
||||||
|
data = bool(data)
|
||||||
|
elif isinstance(data, int):
|
||||||
|
data = float(data)
|
||||||
cmd_dict[cmd] = data
|
cmd_dict[cmd] = data
|
||||||
elif isinstance(data, int):
|
|
||||||
cmd_dict[cmd] = float(data)
|
|
||||||
elif cmd == _dt.bool:
|
|
||||||
if isinstance(data, bool):
|
|
||||||
cmd_dict[cmd] = data
|
|
||||||
else:
|
|
||||||
raise InvalidDataType
|
|
||||||
elif cmd == "None":
|
|
||||||
pass
|
|
||||||
|
|
||||||
if msg_type == 'Report':
|
if msg_type == 'Report':
|
||||||
self._msg_queue_get_report = True
|
self._msg_queue_get_report = True
|
||||||
|
Loading…
Reference in New Issue
Block a user