namespace PamhagenSysCtrl.Helpers { public enum T1Error { UNKNOWN_ERROR = -1, NO_ERROR = 0, SYSTEM_POWER_ON = 10, SYSTEM_POWER_OFF = 11, RAM_CHECK_ERROR = 20, PROGRAM_BCC_ERROR = 21, BATTERY_VOLTAGE_DROP = 22, EEPROM_BCC_ERROR = 23, EEPROM_WARNING = 26, SYSTEM_RAM_CHECK_ERROR = 30, SYSTEM_ROM_BCC_ERROR = 31, PERIPHERAL_LSI_ERROR = 32, CLOCK_CALENDAR_CHECK_ERROR = 33, ILLEGAL_SYSTEM_INTERRUPT = 34, WD_TIMER_ERROR = 35, IO_BUS_ERROR = 40, IO_MISMATCH = 41, IO_NO_ANSWER = 42, IO_PARITY_ERROR = 43, ILLEGAL_IO_REGISTER = 46, COMMUNICATION_BUSY = 51, FORMAT_ERROR = 52, SCAN_TIME_OVER = 64, NO_END_IRET_ERROR = 80, PAIR_INSTRUCTION_ERROR = 81, OPERAND_ERROR = 82, INVALID_PROGRAM = 83, NO_SUBROUTINE_ENTRY = 86, NO_RET_ERROR = 87, SUBROUTINE_NESTING_ERROR = 88, LOOP_NESTING_ERROR = 89, INVALID_FUNCTION_INSTRUCTION = 98, PASSWORD_PROTECT = 106, ILLEGAL_INSTRUCTION = 110, REGISTER_ADDRESS_ERROR = 111, BOUNDARY_ERROR = 112, MEMORY_FULL = 113, MODE_MISMATCH = 114, REGISTER_ADDRESS_SIZE_ERROR = 115, DUPLICATE_ENTRY_NR = 121, } public static class T1ErrorExtension { public static bool IsError(this T1Error error) { return error switch { T1Error.NO_ERROR => false, T1Error.SYSTEM_POWER_ON => false, T1Error.SYSTEM_POWER_OFF => false, _ => true, }; } public static string GetName(this T1Error error) { return error switch { T1Error.UNKNOWN_ERROR => "Unknown error", T1Error.NO_ERROR => "No error", T1Error.SYSTEM_POWER_ON => "System power on", T1Error.SYSTEM_POWER_OFF => "System power off", T1Error.RAM_CHECK_ERROR => "RAM check error", T1Error.PROGRAM_BCC_ERROR => "Program BCC error", T1Error.BATTERY_VOLTAGE_DROP => "Battery voltage drop", T1Error.EEPROM_BCC_ERROR => "EEPROM BCC error", T1Error.EEPROM_WARNING => "EEPROM warning", T1Error.SYSTEM_RAM_CHECK_ERROR => "System RAM check error", T1Error.SYSTEM_ROM_BCC_ERROR => "System ROM BCC error", T1Error.PERIPHERAL_LSI_ERROR => "Peripheral LSI error", T1Error.CLOCK_CALENDAR_CHECK_ERROR => "Clock-calendar check error", T1Error.ILLEGAL_SYSTEM_INTERRUPT => "Illegal system interrupt", T1Error.WD_TIMER_ERROR => "WD timer error", T1Error.IO_BUS_ERROR => "I/O bus error", T1Error.IO_MISMATCH => "I/O mismatch", T1Error.IO_NO_ANSWER => "I/O no answer", T1Error.IO_PARITY_ERROR => "I/O parity error", T1Error.ILLEGAL_IO_REGISTER => "Illegal I/O register", T1Error.COMMUNICATION_BUSY => "Communication busy", T1Error.FORMAT_ERROR => "Format error", T1Error.SCAN_TIME_OVER => "Scan time over", T1Error.NO_END_IRET_ERROR => "No END/IRET error", T1Error.PAIR_INSTRUCTION_ERROR => "Pair instruction error", T1Error.OPERAND_ERROR => "Operand error", T1Error.INVALID_PROGRAM => "Invalid program", T1Error.NO_SUBROUTINE_ENTRY => "No subroutine entry", T1Error.NO_RET_ERROR => "No RET error", T1Error.SUBROUTINE_NESTING_ERROR => "Subroutine nesting error", T1Error.LOOP_NESTING_ERROR => "Loop nesting error", T1Error.INVALID_FUNCTION_INSTRUCTION => "Invalid function instruction", T1Error.PASSWORD_PROTECT => "Password protect", T1Error.ILLEGAL_INSTRUCTION => "Illegal instruction", T1Error.REGISTER_ADDRESS_ERROR => "Register address error", T1Error.BOUNDARY_ERROR => "Boundary error", T1Error.MEMORY_FULL => "Memory full", T1Error.MODE_MISMATCH => "Mode mismatch", T1Error.REGISTER_ADDRESS_SIZE_ERROR => "Register address/size error", T1Error.DUPLICATE_ENTRY_NR => "Duplicate entry No.", _ => error.ToString(), }; } public static string? GetDescription(this T1Error error) { return error switch { T1Error.NO_ERROR => "No error recorded", T1Error.SYSTEM_POWER_ON => "Power on (no error)", T1Error.SYSTEM_POWER_OFF => "Power off (no error)", T1Error.RAM_CHECK_ERROR => "RAM read/write error has been detected", T1Error.PROGRAM_BCC_ERROR => "Program BCC (memory check code) error has been detected", T1Error.BATTERY_VOLTAGE_DROP => "Data invalidity of RAM (back-up area) has been detected", T1Error.EEPROM_BCC_ERROR => "BCC error of built-in EEPROM has been detected", T1Error.EEPROM_WARNING => "EEPROM write operation has exceeded 100,000 times", T1Error.SYSTEM_RAM_CHECK_ERROR => "System RAM read/write error has been detected", T1Error.SYSTEM_ROM_BCC_ERROR => "BCC error of system ROM has been detected", T1Error.PERIPHERAL_LSI_ERROR => "CPU hardware error has been detected", T1Error.CLOCK_CALENDAR_CHECK_ERROR => "Invalid clock-calendar data has been detected", T1Error.ILLEGAL_SYSTEM_INTERRUPT => "Unregistered interrupt has occurred", T1Error.WD_TIMER_ERROR => "Watchdog timer error has occurred", T1Error.IO_BUS_ERROR => "I/O bus error has been detected", T1Error.IO_MISMATCH => "Registered I/O allocation table and actual I/O configuration are not identical", T1Error.IO_NO_ANSWER => "No response from I/O module has been received", T1Error.IO_PARITY_ERROR => "I/O bus parity error has been detected", T1Error.ILLEGAL_IO_REGISTER => "Excess I/O register allocation has been detected", T1Error.COMMUNICATION_BUSY => "The T1/T1S is busy in processing for other peripheral communications", T1Error.FORMAT_ERROR => "Received request is invalid (detected by the T1/T1S)", T1Error.SCAN_TIME_OVER => "Scan time has exceeded 200 ms", T1Error.NO_END_IRET_ERROR => "END or IRET instruction has not been programmed", T1Error.PAIR_INSTRUCTION_ERROR => "Illegal combination of pair instructions has been programmed", T1Error.OPERAND_ERROR => "Illegal operand has been detected", T1Error.INVALID_PROGRAM => "Program abnormality has been detected", T1Error.NO_SUBROUTINE_ENTRY => "Subroutine corresponding to CALL instruction has not been programmed", T1Error.NO_RET_ERROR => "RET (subroutine return) instruction has not been in a subroutine", T1Error.SUBROUTINE_NESTING_ERROR => "CALL instruction has been programmed in a subroutine (subroutine nesting)", T1Error.LOOP_NESTING_ERROR => "Nesting of FOR-NEXT loop has been programmed", T1Error.INVALID_FUNCTION_INSTRUCTION => "Function instruction which is not supported by T1/T1S has been programmed", T1Error.PASSWORD_PROTECT => "Requested operation is protected by password", T1Error.ILLEGAL_INSTRUCTION => "Illegal instruction has been detected", T1Error.REGISTER_ADDRESS_ERROR => "Excess register address range has been programmed", T1Error.BOUNDARY_ERROR => "Illegal register address is designated by index modification", T1Error.MEMORY_FULL => "Program memory is insufficient for the requested command", T1Error.MODE_MISMATCH => "Received command is invalid in the current T1/T1S operation mode", T1Error.REGISTER_ADDRESS_SIZE_ERROR => "Specified register range exceeds the limit", T1Error.DUPLICATE_ENTRY_NR => "Multiple subroutines which has same subroutine number have been programmed", _ => null, }; } } }