mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-03 17:59:27 +02:00
138 lines
4.3 KiB
C++
138 lines
4.3 KiB
C++
// =================================================================================================
|
|
// eModbus: Copyright 2020 by Michael Harwerth, Bert Melis and the contributors to eModbus
|
|
// MIT license - see license.md for details
|
|
// =================================================================================================
|
|
#ifndef _MODBUS_ERROR_H
|
|
#define _MODBUS_ERROR_H
|
|
#include "ModbusTypeDefs.h"
|
|
|
|
using namespace Modbus; // NOLINT
|
|
|
|
class ModbusError {
|
|
public:
|
|
// Constructor with error code
|
|
inline explicit ModbusError(Error e) : err(e) {}
|
|
// Empty constructor defaults to 0
|
|
inline ModbusError() : err(SUCCESS) {}
|
|
// Assignment operators
|
|
inline ModbusError& operator=(const ModbusError& e) { err = e.err; return *this; }
|
|
inline ModbusError& operator=(const Error e) { err = e; return *this; }
|
|
// Copy constructor
|
|
inline ModbusError(const ModbusError& m) : err(m.err) {}
|
|
// Equality comparison
|
|
inline bool operator==(const ModbusError& m) { return (err == m.err); }
|
|
inline bool operator==(const Error e) { return (err == e); }
|
|
// Inequality comparison
|
|
inline bool operator!=(const ModbusError& m) { return (err != m.err); }
|
|
inline bool operator!=(const Error e) { return (err != e); }
|
|
inline explicit operator Error() { return err; }
|
|
inline operator int() { return static_cast<int>(err); }
|
|
|
|
#ifndef MINIMAL
|
|
inline explicit operator const char *() { return getText(err); }
|
|
#endif
|
|
|
|
private:
|
|
Error err; // The error code
|
|
|
|
#ifndef MINIMAL
|
|
// Return error as static text
|
|
inline static const char *getText(Error err) {
|
|
switch (err) {
|
|
case SUCCESS : // 0x00,
|
|
return "Success";
|
|
break;
|
|
case ILLEGAL_FUNCTION : // 0x01,
|
|
return "Illegal function code";
|
|
break;
|
|
case ILLEGAL_DATA_ADDRESS : // 0x02,
|
|
return "Illegal data address";
|
|
break;
|
|
case ILLEGAL_DATA_VALUE : // 0x03,
|
|
return "Illegal data value";
|
|
break;
|
|
case SERVER_DEVICE_FAILURE : // 0x04,
|
|
return "Server device failure";
|
|
break;
|
|
case ACKNOWLEDGE : // 0x05,
|
|
return "Acknowledge";
|
|
break;
|
|
case SERVER_DEVICE_BUSY : // 0x06,
|
|
return "Server device busy";
|
|
break;
|
|
case NEGATIVE_ACKNOWLEDGE : // 0x07,
|
|
return "Negative acknowledge";
|
|
break;
|
|
case MEMORY_PARITY_ERROR : // 0x08,
|
|
return "Memory parity error";
|
|
break;
|
|
case GATEWAY_PATH_UNAVAIL : // 0x0A,
|
|
return "Gateway path unavailable";
|
|
break;
|
|
case GATEWAY_TARGET_NO_RESP: // 0x0B,
|
|
return "Gateway target not responding";
|
|
break;
|
|
case TIMEOUT : // 0xE0,
|
|
return "Timeout";
|
|
break;
|
|
case INVALID_SERVER : // 0xE1,
|
|
return "Invalid server";
|
|
break;
|
|
case CRC_ERROR : // 0xE2, // only for Modbus-RTU
|
|
return "CRC check error";
|
|
break;
|
|
case FC_MISMATCH : // 0xE3,
|
|
return "Function code mismatch";
|
|
break;
|
|
case SERVER_ID_MISMATCH : // 0xE4,
|
|
return "Server ID mismatch";
|
|
break;
|
|
case PACKET_LENGTH_ERROR : // 0xE5,
|
|
return "Packet length error";
|
|
break;
|
|
case PARAMETER_COUNT_ERROR : // 0xE6,
|
|
return "Wrong # of parameters";
|
|
break;
|
|
case PARAMETER_LIMIT_ERROR : // 0xE7,
|
|
return "Parameter out of bounds";
|
|
break;
|
|
case REQUEST_QUEUE_FULL : // 0xE8,
|
|
return "Request queue full";
|
|
break;
|
|
case ILLEGAL_IP_OR_PORT : // 0xE9,
|
|
return "Illegal IP or port";
|
|
break;
|
|
case IP_CONNECTION_FAILED : // 0xEA,
|
|
return "IP connection failed";
|
|
break;
|
|
case TCP_HEAD_MISMATCH : // 0xEB,
|
|
return "TCP header mismatch";
|
|
break;
|
|
case EMPTY_MESSAGE : // 0xEC,
|
|
return "Incomplete request";
|
|
break;
|
|
case ASCII_FRAME_ERR : // 0xED,
|
|
return "Invalid ASCII frame";
|
|
break;
|
|
case ASCII_CRC_ERR : // 0xEE,
|
|
return "Invalid ASCII CRC";
|
|
break;
|
|
case ASCII_INVALID_CHAR : // 0xEF,
|
|
return "Invalid ASCII character";
|
|
break;
|
|
case BROADCAST_ERROR : // 0xF0,
|
|
return "Broadcast data invalid";
|
|
break;
|
|
case UNDEFINED_ERROR : // 0xFF // otherwise uncovered communication error
|
|
default:
|
|
return "Unspecified error";
|
|
break;
|
|
}
|
|
return "What?";
|
|
}
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
#endif
|