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