38 lines
1.2 KiB (Stored with Git LFS)
Python
38 lines
1.2 KiB (Stored with Git LFS)
Python
from uart_interface import CI_Package, CI_ParserError, CI_ParserErrorTooFewBytes
|
|
from uart_interface import GobotRPC_Ctrl_Interface_Command as CMDS
|
|
from uart_interface.ci_packages import CI_TX_Package, \
|
|
CI_HEARTBEAT_Package, CI_RX_Package, CI_ERROR_TRANMISSION_Package, \
|
|
CI_SUCESS_TRANSMISSION_Package, CI_INFO_RESET_Package
|
|
|
|
import enum
|
|
|
|
def ci_package_from_bytes(data: bytes) -> CI_Package:
|
|
|
|
if len(data) < 1:
|
|
raise CI_ParserErrorTooFewBytes(data)
|
|
|
|
try:
|
|
cmd = CMDS(data[0])
|
|
except ValueError:
|
|
raise CI_ParserError(f"Invalid Command {data[0]:02x}", data)
|
|
|
|
match cmd:
|
|
case CMDS.TX_PACKAGE:
|
|
package = CI_TX_Package()
|
|
case CMDS.RX_PACKAGE:
|
|
package = CI_RX_Package()
|
|
case CMDS.HEARTBEAT:
|
|
package = CI_HEARTBEAT_Package()
|
|
case CMDS.ERROR_TRANMISSION:
|
|
package = CI_ERROR_TRANMISSION_Package()
|
|
case CMDS.SUCESS_TRANMISSION:
|
|
package = CI_SUCESS_TRANSMISSION_Package()
|
|
case CMDS.INFO_RESET:
|
|
package = CI_INFO_RESET_Package()
|
|
|
|
case _:
|
|
raise ValueError(f"Invalid Command {data[0]}")
|
|
|
|
package.from_bytes(data)
|
|
return package
|