/**
* 错误码定义
*/
/**
* 错误码枚举
*/
export enum ErrorCode {
// 串口相关错误 (1000-1999)
PORT_BUSY = 'PORT_BUSY',
PORT_NOT_FOUND = 'PORT_NOT_FOUND',
INVALID_CONFIG = 'INVALID_CONFIG',
PERMISSION_DENIED = 'PERMISSION_DENIED',
WRITE_FAILED = 'WRITE_FAILED',
READ_FAILED = 'READ_FAILED',
TIMEOUT = 'TIMEOUT',
NOT_OPEN = 'NOT_OPEN',
ALREADY_OPEN = 'ALREADY_OPEN',
// 会话相关错误 (2000-2999)
SESSION_ERROR = 'SESSION_ERROR',
SESSION_NOT_FOUND = 'SESSION_NOT_FOUND',
SESSION_TIMEOUT = 'SESSION_TIMEOUT',
SESSION_EXPIRED = 'SESSION_EXPIRED',
// 锁相关错误 (3000-3999)
MUTEX_TIMEOUT = 'MUTEX_TIMEOUT',
LOCK_NOT_HELD = 'LOCK_NOT_HELD',
LOCK_EXPIRED = 'LOCK_EXPIRED',
DEADLOCK_DETECTED = 'DEADLOCK_DETECTED',
// URC相关错误 (4000-4999)
URC_CONFIG_ERROR = 'URC_CONFIG_ERROR',
URC_PATTERN_INVALID = 'URC_PATTERN_INVALID',
URC_NOT_FOUND = 'URC_NOT_FOUND',
// 配置相关错误 (5000-5999)
CONFIG_NOT_FOUND = 'CONFIG_NOT_FOUND',
CONFIG_INVALID = 'CONFIG_INVALID',
CONFIG_PARSE_ERROR = 'CONFIG_PARSE_ERROR',
// MCP协议相关错误 (6000-6999)
MCP_INVALID_REQUEST = 'MCP_INVALID_REQUEST',
MCP_METHOD_NOT_FOUND = 'MCP_METHOD_NOT_FOUND',
MCP_INVALID_PARAMS = 'MCP_INVALID_PARAMS',
MCP_INTERNAL_ERROR = 'MCP_INTERNAL_ERROR',
// 系统相关错误 (7000-7999)
SYSTEM_ERROR = 'SYSTEM_ERROR',
RESOURCE_EXHAUSTED = 'RESOURCE_EXHAUSTED',
INITIALIZATION_FAILED = 'INITIALIZATION_FAILED'
}
/**
* 错误码映射表
*/
export const ERROR_MESSAGES: Record<ErrorCode, string> = {
[ErrorCode.PORT_BUSY]: 'Port is busy or in use',
[ErrorCode.PORT_NOT_FOUND]: 'Port not found',
[ErrorCode.INVALID_CONFIG]: 'Invalid configuration parameters',
[ErrorCode.PERMISSION_DENIED]: 'Permission denied',
[ErrorCode.WRITE_FAILED]: 'Write operation failed',
[ErrorCode.READ_FAILED]: 'Read operation failed',
[ErrorCode.TIMEOUT]: 'Operation timeout',
[ErrorCode.NOT_OPEN]: 'Port is not open',
[ErrorCode.ALREADY_OPEN]: 'Port is already open',
[ErrorCode.SESSION_ERROR]: 'Session operation error',
[ErrorCode.SESSION_NOT_FOUND]: 'Session not found',
[ErrorCode.SESSION_TIMEOUT]: 'Session timeout',
[ErrorCode.SESSION_EXPIRED]: 'Session expired',
[ErrorCode.MUTEX_TIMEOUT]: 'Mutex acquisition timeout',
[ErrorCode.LOCK_NOT_HELD]: 'Lock is not held',
[ErrorCode.LOCK_EXPIRED]: 'Lock has expired',
[ErrorCode.DEADLOCK_DETECTED]: 'Deadlock detected',
[ErrorCode.URC_CONFIG_ERROR]: 'URC configuration error',
[ErrorCode.URC_PATTERN_INVALID]: 'Invalid URC pattern',
[ErrorCode.URC_NOT_FOUND]: 'URC pattern not found',
[ErrorCode.CONFIG_NOT_FOUND]: 'Configuration file not found',
[ErrorCode.CONFIG_INVALID]: 'Invalid configuration',
[ErrorCode.CONFIG_PARSE_ERROR]: 'Configuration parse error',
[ErrorCode.MCP_INVALID_REQUEST]: 'Invalid MCP request',
[ErrorCode.MCP_METHOD_NOT_FOUND]: 'MCP method not found',
[ErrorCode.MCP_INVALID_PARAMS]: 'Invalid MCP parameters',
[ErrorCode.MCP_INTERNAL_ERROR]: 'MCP internal error',
[ErrorCode.SYSTEM_ERROR]: 'System error',
[ErrorCode.RESOURCE_EXHAUSTED]: 'Resource exhausted',
[ErrorCode.INITIALIZATION_FAILED]: 'Initialization failed'
};
/**
* 错误码分类
*/
export enum ErrorCategory {
SERIAL = 'SERIAL',
SESSION = 'SESSION',
LOCK = 'LOCK',
URC = 'URC',
CONFIG = 'CONFIG',
MCP = 'MCP',
SYSTEM = 'SYSTEM'
}
/**
* 错误码分类映射
*/
export const ERROR_CATEGORIES: Record<ErrorCode, ErrorCategory> = {
[ErrorCode.PORT_BUSY]: ErrorCategory.SERIAL,
[ErrorCode.PORT_NOT_FOUND]: ErrorCategory.SERIAL,
[ErrorCode.INVALID_CONFIG]: ErrorCategory.SERIAL,
[ErrorCode.PERMISSION_DENIED]: ErrorCategory.SERIAL,
[ErrorCode.WRITE_FAILED]: ErrorCategory.SERIAL,
[ErrorCode.READ_FAILED]: ErrorCategory.SERIAL,
[ErrorCode.TIMEOUT]: ErrorCategory.SERIAL,
[ErrorCode.NOT_OPEN]: ErrorCategory.SERIAL,
[ErrorCode.ALREADY_OPEN]: ErrorCategory.SERIAL,
[ErrorCode.SESSION_ERROR]: ErrorCategory.SESSION,
[ErrorCode.SESSION_NOT_FOUND]: ErrorCategory.SESSION,
[ErrorCode.SESSION_TIMEOUT]: ErrorCategory.SESSION,
[ErrorCode.SESSION_EXPIRED]: ErrorCategory.SESSION,
[ErrorCode.MUTEX_TIMEOUT]: ErrorCategory.LOCK,
[ErrorCode.LOCK_NOT_HELD]: ErrorCategory.LOCK,
[ErrorCode.LOCK_EXPIRED]: ErrorCategory.LOCK,
[ErrorCode.DEADLOCK_DETECTED]: ErrorCategory.LOCK,
[ErrorCode.URC_CONFIG_ERROR]: ErrorCategory.URC,
[ErrorCode.URC_PATTERN_INVALID]: ErrorCategory.URC,
[ErrorCode.URC_NOT_FOUND]: ErrorCategory.URC,
[ErrorCode.CONFIG_NOT_FOUND]: ErrorCategory.CONFIG,
[ErrorCode.CONFIG_INVALID]: ErrorCategory.CONFIG,
[ErrorCode.CONFIG_PARSE_ERROR]: ErrorCategory.CONFIG,
[ErrorCode.MCP_INVALID_REQUEST]: ErrorCategory.MCP,
[ErrorCode.MCP_METHOD_NOT_FOUND]: ErrorCategory.MCP,
[ErrorCode.MCP_INVALID_PARAMS]: ErrorCategory.MCP,
[ErrorCode.MCP_INTERNAL_ERROR]: ErrorCategory.MCP,
[ErrorCode.SYSTEM_ERROR]: ErrorCategory.SYSTEM,
[ErrorCode.RESOURCE_EXHAUSTED]: ErrorCategory.SYSTEM,
[ErrorCode.INITIALIZATION_FAILED]: ErrorCategory.SYSTEM
};
/**
* 获取错误消息
*/
export function getErrorMessage(code: ErrorCode): string {
return ERROR_MESSAGES[code] || 'Unknown error';
}
/**
* 获取错误分类
*/
export function getErrorCategory(code: ErrorCode): ErrorCategory {
return ERROR_CATEGORIES[code] || ErrorCategory.SYSTEM;
}
/**
* 检查是否为可重试错误
*/
export function isRetryableError(code: ErrorCode): boolean {
const retryableErrors = [
ErrorCode.TIMEOUT,
ErrorCode.MUTEX_TIMEOUT,
ErrorCode.SESSION_TIMEOUT,
ErrorCode.SYSTEM_ERROR
];
return retryableErrors.includes(code);
}
/**
* 检查是否为用户错误
*/
export function isUserError(code: ErrorCode): boolean {
const userErrors = [
ErrorCode.INVALID_CONFIG,
ErrorCode.PERMISSION_DENIED,
ErrorCode.PORT_NOT_FOUND,
ErrorCode.MCP_INVALID_REQUEST,
ErrorCode.MCP_INVALID_PARAMS
];
return userErrors.includes(code);
}