# nxt.error module -- LEGO Mindstorms NXT error handling # Copyright (C) 2006, 2007 Douglas P Lau # Copyright (C) 2009 Marcus Wanner # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. 'Declarations for the errors' class ProtocolError(Exception): pass class SysProtError(ProtocolError): pass class FileExistsError(SysProtError): pass class FileNotFound(SysProtError): pass class ModuleNotFound(SysProtError): pass class DirProtError(ProtocolError): pass class I2CError(DirProtError): pass class I2CPendingError(I2CError): pass CODES = { 0x00: None, 0x20: I2CPendingError('Pending communication transaction in progress'), 0x40: DirProtError('Specified mailbox queue is empty'), 0x81: SysProtError('No more handles'), 0x82: SysProtError('No space'), 0x83: SysProtError('No more files'), 0x84: SysProtError('End of file expected'), 0x85: SysProtError('End of file'), 0x86: SysProtError('Not a linear file'), 0x87: FileNotFound('File not found'), 0x88: SysProtError('Handle already closed'), 0x89: SysProtError('No linear space'), 0x8A: SysProtError('Undefined error'), 0x8B: SysProtError('File is busy'), 0x8C: SysProtError('No write buffers'), 0x8D: SysProtError('Append not possible'), 0x8E: SysProtError('File is full'), 0x8F: FileExistsError('File exists'), 0x90: ModuleNotFound('Module not found'), 0x91: SysProtError('Out of bounds'), 0x92: SysProtError('Illegal file name'), 0x93: SysProtError('Illegal handle'), 0xBD: DirProtError('Request failed (i.e. specified file not found)'), 0xBE: DirProtError('Unknown command opcode'), 0xBF: DirProtError('Insane packet'), 0xC0: DirProtError('Data contains out-of-range values'), 0xDD: DirProtError('Communication bus error'), 0xDE: DirProtError('No free memory in communication buffer'), 0xDF: DirProtError('Specified channel/connection is not valid'), 0xE0: I2CError('Specified channel/connection not configured or busy'), 0xEC: DirProtError('No active program'), 0xED: DirProtError('Illegal size specified'), 0xEE: DirProtError('Illegal mailbox queue ID specified'), 0xEF: DirProtError('Attempted to access invalid field of a structure'), 0xF0: DirProtError('Bad input or output specified'), 0xFB: DirProtError('Insufficient memory available'), 0xFF: DirProtError('Bad arguments'), } def check_status(status): if status: ex = CODES.get(status) if ex: raise ex else: raise ProtocolError, status