#ifndef NXT_ERRORH #define NXT_ERRORH #include <exception> #include <iostream> #include <string> #include <sstream> using namespace std; /** * Error type enumeration * @see Nxt_exception#error_type */ enum Error_type{ /** * Unknow error */ UNKNOWN_ERROR = 0x00, /** * Network error */ NETWORK_ERROR = 0x01, /** * NXT error */ NXT_ERROR = 0x02, /** * Bluetooth error */ BT_ERROR = 0x03, /** * PC file error */ PC_FILE_ERROR = 0x04, /** * Server error */ SERVER_ERROR = 0x05 }; /** * Class used to throw exceptions when communication fails or the NXT reports an error * @see Nxt_errors */ class Nxt_exception: public exception { public: /** * @param function_name [the name of the function that throws the exception] * @param class_name [the name of the Class that throws the exception] * @param error_code [the error code that is thrown] * @param description [a description of the error - if not speficied default description is used] */ Nxt_exception(string function_name,string class_name, unsigned int error_code, string description=""); ~Nxt_exception() throw(); /** * What is the error * @return a string that describes the error */ const char* what() const throw(); /** * Get the error code that was thrown * @return the error code * @see Nxt_errors */ unsigned int error_code(); /** * Get the error type that was thrown * @return the error type * @see Error_type */ Error_type error_type(); /** * Who threw the exception * @return a string that tells the class and the function that threw the exception (used for debug) */ const string who(); protected: string function_name; string class_name; string description; unsigned int this_error_code; const char* error_info(unsigned int error_code) const; }; #define SERVER_ERROR_LOW 0x0001 #define SERVER_ERROR_HIGH 0x001f #define NXT_ERROR_LOW 0x0020 #define NXT_ERROR_HIGH 0x00FF #define BT_ERROR_LOW 0x0100 #define BT_ERROR_HIGH 0x014F #define PC_FILE_ERROR_LOW 0x0150 #define PC_FILE_ERROR_HIGH 0x015F #define NETWORK_ERROR_LOW 0x0160 #define NETWORK_ERROR_HIGH 0x016f /** * Error code enumeration (error code list) * @see * <UL> * <LI>0x0001 to 0x001F are reservede for server errors * <LI>0x0020 to 0x00FF are reserved for NXT brick errors * <LI>0x0100 to 0x014F are reserved for Bluetooth errors * <LI>0x0150 to 0x015F are reserved for PC-file errors * <LI>0x0160 to 0x016F are reservede for network errors * </UL> */ enum Nxt_errors{ //Network erros /** * Network error: Network communication error */ NETWORK_COM_ERROR = 0x0160, /** *Server error: Server is full - connection was rejected */ SERVER_FULL = 0x0002, /** *Server error: Server lost connection with NXT */ SERVER_LOST_NXT = 0x0003, /** *Server error: Server encountered an Bluetooth communication error */ SERVER_BT_ERROR = 0x0004, /** *Server error: Bluetooth link on server is bussy */ SERVER_BT_BUSSY = 0x0005, /** *Server error: Server didn't recieved enough bytes from the NXT */ SERVER_BT_NOT_ENOUGH_BYTES = 0x0006, /** *Server error: Server rejected password */ SERVER_PASSWORD_FAIL = 0x0007, /** *Server error: Server rejected IP address */ SERVER_BANNED = 0x0008, //Bluetooth errors /** *Bluetooth error: Invalid COM port specified */ BT_INVALID_COM_PORT = 0x0101, /** *Bluetooth error: Error sending */ BT_ERROR_WRITING_COM_PORT = 0x0102, /** *Bluetooth error: Error receiving */ BT_ERROR_READING_COM_PORT = 0x0103, /** *Bluetooth error: No reply from the NXT */ BT_NO_REPLY = 0x0104, /** *Bluetooth error: Didn't recieved enough bytes from the NXT */ BT_NOT_ENOUGH_BYTES = 0x0105, /** *Bluetooth error: Unsable to connect */ BT_UNABLE_TO_CONNECT = 0x0106, //PC error /** *PC-file error: Unable to read or write to file PC */ PC_FILE_IO_ERROR = 0x0150, //LEGO BRICk /** *NXT error: Bytes/answer from I2C sensor not ready which resulted in a timeout */ NXT_I2C_TIMEOUT = 0x0021, /** *No more handles */ NXT_NO_MORE_HANDLES = 0x0081, /** *NXT error: No more space in flash */ NXT_NO_SPACE = 0x0082, /** *NXT error: No more files can be created */ NXT_NO_MORE_FILES = 0x0083, /** *NXT error: EOF expected */ NXT_END_OF_FILE_EXPECTED = 0x0084, /** *NXT error: EOF */ NXT_END_OF_FILE = 0x0085, /** *NXT error: File specified is not linear */ NXT_NOT_A_LINEAR_FILE = 0x0086, /** *NXT error: File not found */ NXT_FILE_NOT_FOUND = 0x0087, /** *NXT error: File is already closed */ NXT_HANDLE_ALREADY_CLOSED = 0x0088, /** *NXT error: No linear space */ NXT_NO_LINEAR_SPACE = 0x0089, /** *NXT error: Undefined file error occurred */ NXT_UNDEFINED_FILE_ERROR = 0x008A, /** *NXT error: File is busy */ NXT_FILE_BUSY = 0x008B, /** *NXT error: No write buffers */ NXT_NO_WRITE_BUFFERS = 0x008C, /** *NXT error: Unable to append */ NXT_APPEND_NOT_POSSIBLE = 0x008D, /** *NXT error: File is full */ NXT_FILE_IS_FULL = 0x008E, /** *NXT error: File already exists */ NXT_FILE_EXISTS = 0x008F, /** *NXT error: Module not found */ NXT_MODULE_NOT_FOUND = 0x0090, /** *NXT error: Out of boundary */ NXT_OUT_OF_BOUNDARY = 0x0091, /** *NXT error: Filename specified is illegal */ NXT_ILLEGAL_FILE_NAME = 0x0092, /** *NXT error: Filehandle specified is illegal */ NXT_ILLEGAL_HANDLE = 0x0093, /** *NXT error: Pending communication transaction in progress */ NXT_PENDING_COMMUNICATION = 0x0020, /** *NXT error: Specified mailbox queue is empty */ NXT_MAILBOX_QUEUE_EMPTY = 0x0040, /** *NXT error: Request failed (i.e. specified file not found) */ NXT_REQUEST_FAILED = 0x00BD, /** *NXT error: Unknown command opcode */ NXT_UNKNOW_COMMAND = 0x00BE, /** *NXT error: Insane packet */ NXT_INSANE_PACKET = 0x00BF, /** *NXT error: Data contains out-of-range value */ NXT_DATA_OUT_OF_RANGE = 0x00C0, /** *NXT error: Communication bus error */ NXT_COMMUNICATION_BUS_ERROR = 0x00DD, /** *NXT error: No free memory in communication buffer */ NXT_BUFFER_FULL = 0x00DE, /** *NXT error: Specified channel/connection is not valid */ NXT_INVALID_CHANNEL = 0x00DF, /** *NXT error: Specified channel/connection not configured or busy */ NXT_CHANNEL_BUSY = 0x00E0, /** *NXT error: No active program is running */ NXT_NO_ACTIVE_PROGRAM = 0x00EC, /** *NXT error: Illegal size specified */ NXT_ILLEGAL_SIZE = 0x00ED, /** *NXT error: Illegal mailbox queue ID specified */ NXT_INVALID_MAILBOX_QUEUE = 0x00EE, /** *NXT error: Attempted to access invalid field of a structure */ NXT_INVALID_FIELD = 0x00EF, /** *NXT error: Bad input or output specified */ NXT_BAD_INPUT_OUTPUT = 0x00F0, /** *NXT error: Insufficient memory available */ NXT_OUT_OF_MEMORY = 0x00FB, /** *NXT error: Bad arguments */ NXT_BAD_ARGUMENTS = 0x00FF }; /************************************* NXT brick errors *************************************/ //I2C error not a part of "LEGO" errors #define NXT_I2C_TIMEOUT_TEXT "Bytes/answer from I2C sensor not ready which resulted in a timeout" //added from appendix 1 in BT SDK (for files) #define NXT_NO_MORE_HANDLES_TEXT "No more handles" #define NXT_NO_SPACE_TEXT "No space" #define NXT_NO_MORE_FILES_TEXT "No more files" #define NXT_END_OF_FILE_EXPECTED_TEXT "End of file expected" #define NXT_END_OF_FILE_TEXT "End of file" #define NXT_NOT_A_LINEAR_FILE_TEXT "Not a linear file" #define NXT_FILE_NOT_FOUND_TEXT "File not found" #define NXT_HANDLE_ALREADY_CLOSED_TEXT "Handle already closed" #define NXT_NO_LINEAR_SPACE_TEXT "No linear space" #define NXT_UNDEFINED_FILE_ERROR_TEXT "Undefined file error" #define NXT_FILE_BUSY_TEXT "File is busy" #define NXT_NO_WRITE_BUFFERS_TEXT "No write buffers" #define NXT_APPEND_NOT_POSSIBLE_TEXT "Append not possible" #define NXT_FILE_IS_FULL_TEXT "File is full" #define NXT_FILE_EXISTS_TEXT "File already exists" #define NXT_MODULE_NOT_FOUND_TEXT "Module not found" #define NXT_OUT_OF_BOUNDARY_TEXT "Out of boundary" #define NXT_ILLEGAL_FILE_NAME_TEXT "llegal file name" #define NXT_ILLEGAL_HANDLE_TEXT "Illegal handle" //errors from the NXT (see the LEGO BT SDK appendix 2) #define NXT_PENDING_COMMUNICATION_TEXT "Pending communication transaction in progress" #define NXT_MAILBOX_QUEUE_EMPTY_TEXT "Specified mailbox queue is empty" #define NXT_REQUEST_FAILED_TEXT "Request failed (i.e. specified file not found)" #define NXT_UNKNOW_COMMAND_TEXT "Unknown command opcode" #define NXT_INSANE_PACKET_TEXT "Insane packet" #define NXT_DATA_OUT_OF_RANGE_TEXT "Data contains out-of-range values" #define NXT_COMMUNICATION_BUS_ERROR_TEXT "Communication bus error" #define NXT_BUFFER_FULL_TEXT "No free memory in communication buffer" #define NXT_INVALID_CHANNEL_TEXT "Pecified channel/connection is not valid" #define NXT_CHANNEL_BUSY_TEXT "Specified channel/connection not configured or busy" #define NXT_NO_ACTIVE_PROGRAM_TEXT "No active program running" #define NXT_ILLEGAL_SIZE_TEXT "Illegal size specified" #define NXT_INVALID_MAILBOX_QUEUE_TEXT "Illegal mailbox queue ID specified" #define NXT_INVALID_FIELD_TEXT "Attempted to access invalid field of a structure" #define NXT_BAD_INPUT_OUTPUT_TEXT "Bad input or output specified" #define NXT_OUT_OF_MEMORY_TEXT "Insufficient memory available" #define NXT_BAD_ARGUMENTS_TEXT "Bad arguments" /************************************* Network errors *************************************/ #define NETWORK_COM_ERROR_TEXT "Network communication occurred." /************************************* Server errors *************************************/ #define SERVER_LOST_NXT_TEXT "Server lost communication with NXT" #define SERVER_BT_NOT_ENOUGH_BYTES_TEXT "Server didn't recieved enough bytes from the NXT" #define SERVER_BT_BUSSY_TEXT "Bluetooth link on server is bussy" #define SERVER_BT_ERROR_TEXT "Server encountered an Bluetooth communication error" #define SERVER_FULL_TEXT "Server is full - connection rejected" #define SERVER_PASSWORD_FAIL_TEXT "Password was rejected" #define SERVER_BANNED_TEXT "IP address rejected" /************************************* Bluetooth errors *************************************/ #define BT_INVALID_COM_PORT_TEXT "Invalid COM port or COM port in use" #define BT_ERROR_WRITING_COM_PORT_TEXT "Error sending" #define BT_ERROR_READING_COM_PORT_TEXT "Error receiving" #define BT_NO_REPLY_TEXT "No reply from the NXT" #define BT_NOT_ENOUGH_BYTES_TEXT "Didn't recieved enough bytes from the NXT" #define BT_UNABLE_TO_CONNECT_TEXT "Unsable to connect to the NXT" /************************************* PC-file errors *************************************/ #define PC_FILE_IO_ERROR_TEXT "PC-file error: Unable to read or write from file" #endif