import { errIsoConnect, errIsoDisconnect, errIsoInvalidPDU, errIsoInvalidDataSize, errIsoNullPointer, errIsoShortPacket, errIsoTooManyFragments, errIsoPduOverflow, errIsoSendPacket, errIsoRecvPacket, errIsoInvalidParams, errNegotiatingPDU, errCliInvalidParams, errCliJobPending, errCliTooManyItems, errCliInvalidWordLen, errCliPartialDataWritten, errCliSizeOverPDU, errCliInvalidPlcAnswer, errCliAddressOutOfRange, errCliInvalidTransportSize, errCliWriteDataSizeMismatch, errCliItemNotAvailable, errCliInvalidValue, errCliCannotStartPLC, errCliAlreadyRun, errCliCannotStopPLC, errCliCannotCopyRamToRom, errCliCannotCompress, errCliAlreadyStop, errCliFunNotAvailable, errCliUploadSequenceFailed, errCliInvalidDataSizeRecvd, errCliInvalidBlockType, errCliInvalidBlockNumber, errCliInvalidBlockSize, errCliDownloadSequenceFailed, errCliInsertRefused, errCliDeleteRefused, errCliNeedPassword, errCliInvalidPassword, errCliNoPasswordToSetOrClear, errCliJobTimeout, errCliPartialDataRead, errCliBufferTooSmall, errCliFunctionRefused, errCliDestroying, errCliInvalidParamNumber, errCliCannotChangeParam, errSrvCannotStart, errSrvDBNullPointer, errSrvAreaAlreadyExists, errSrvUnknownArea, errSrvInvalidParams, errSrvTooManyDB, errSrvInvalidParamNumber, errSrvCannotChangeParam, } from '../protocol/constants.js'; const isoErrors = new Map([ [errIsoConnect, 'ISO connection error'], [errIsoDisconnect, 'ISO disconnect error'], [errIsoInvalidPDU, 'Invalid PDU received'], [errIsoInvalidDataSize, 'Invalid data size'], [errIsoNullPointer, 'Null pointer'], [errIsoShortPacket, 'Short packet received'], [errIsoTooManyFragments, 'Too many fragments'], [errIsoPduOverflow, 'PDU overflow'], [errIsoSendPacket, 'Send packet error'], [errIsoRecvPacket, 'Recv packet error'], [errIsoInvalidParams, 'Invalid TSAP params'], ]); const cliErrors = new Map([ [errNegotiatingPDU, 'PDU negotiation error'], [errCliInvalidParams, 'Invalid parameters'], [errCliJobPending, 'Job pending'], [errCliTooManyItems, 'Too many items'], [errCliInvalidWordLen, 'Invalid word length'], [errCliPartialDataWritten, 'Partial data written'], [errCliSizeOverPDU, 'Size over PDU'], [errCliInvalidPlcAnswer, 'Invalid PLC answer'], [errCliAddressOutOfRange, 'Address out of range'], [errCliInvalidTransportSize, 'Invalid transport size'], [errCliWriteDataSizeMismatch, 'Write data size mismatch'], [errCliItemNotAvailable, 'Item not available'], [errCliInvalidValue, 'Invalid value'], [errCliCannotStartPLC, 'Cannot start PLC'], [errCliAlreadyRun, 'PLC already running'], [errCliCannotStopPLC, 'Cannot stop PLC'], [errCliCannotCopyRamToRom, 'Cannot copy RAM to ROM'], [errCliCannotCompress, 'Cannot compress'], [errCliAlreadyStop, 'PLC already stopped'], [errCliFunNotAvailable, 'Function not available'], [errCliUploadSequenceFailed, 'Upload sequence failed'], [errCliInvalidDataSizeRecvd, 'Invalid data size received'], [errCliInvalidBlockType, 'Invalid block type'], [errCliInvalidBlockNumber, 'Invalid block number'], [errCliInvalidBlockSize, 'Invalid block size'], [errCliDownloadSequenceFailed, 'Download sequence failed'], [errCliInsertRefused, 'Insert refused'], [errCliDeleteRefused, 'Delete refused'], [errCliNeedPassword, 'Password required'], [errCliInvalidPassword, 'Invalid password'], [errCliNoPasswordToSetOrClear, 'No password to set or clear'], [errCliJobTimeout, 'Job timeout'], [errCliPartialDataRead, 'Partial data read'], [errCliBufferTooSmall, 'Buffer too small'], [errCliFunctionRefused, 'Function refused'], [errCliDestroying, 'Client destroying'], [errCliInvalidParamNumber, 'Invalid parameter number'], [errCliCannotChangeParam, 'Cannot change parameter'], ]); const srvErrors = new Map([ [errSrvCannotStart, 'Server cannot start'], [errSrvDBNullPointer, 'DB null pointer'], [errSrvAreaAlreadyExists, 'Area already exists'], [errSrvUnknownArea, 'Unknown area'], [errSrvInvalidParams, 'Invalid parameters'], [errSrvTooManyDB, 'Too many DB'], [errSrvInvalidParamNumber, 'Invalid parameter number'], [errSrvCannotChangeParam, 'Cannot change parameter'], ]); export function cliErrorText(error: number): string { if (error === 0) return 'No error'; return isoErrors.get(error) ?? cliErrors.get(error) ?? `Unknown error: 0x${error.toString(16).toUpperCase()}`; } export function srvErrorText(error: number): string { if (error === 0) return 'No error'; return isoErrors.get(error) ?? srvErrors.get(error) ?? `Unknown error: 0x${error.toString(16).toUpperCase()}`; } export function srvEventText(event: { EvtCode: number; EvtRetCode: number; EvtParam1: number; EvtParam2: number }): string { const parts: string[] = []; const evtCode = event.EvtCode; const retCode = event.EvtRetCode; const p1 = event.EvtParam1; const p2 = event.EvtParam2; // Event code description const evtNames = new Map([ [0x00000001, 'Server started'], [0x00000002, 'Server stopped'], [0x00000004, 'Listener cannot start'], [0x00000008, 'Client added'], [0x00000010, 'Client rejected'], [0x00000020, 'Client no room'], [0x00000040, 'Client exception'], [0x00000080, 'Client disconnected'], [0x00000100, 'Client terminated'], [0x00000200, 'Clients dropped'], [0x00010000, 'PDU incoming'], [0x00020000, 'Data read'], [0x00040000, 'Data write'], [0x00080000, 'Negotiate PDU'], [0x00100000, 'Read SZL'], [0x00200000, 'Clock'], [0x00400000, 'Upload'], [0x00800000, 'Download'], [0x01000000, 'Directory'], [0x02000000, 'Security'], [0x04000000, 'Control'], ]); const name = evtNames.get(evtCode) ?? `Event 0x${evtCode.toString(16).toUpperCase()}`; parts.push(name); if (retCode !== 0) { parts.push(`Result: 0x${retCode.toString(16).toUpperCase()}`); } if (p1 !== 0) { parts.push(`P1: ${p1}`); } if (p2 !== 0) { parts.push(`P2: ${p2}`); } return parts.join(', '); }