summaryrefslogtreecommitdiff
path: root/nxt-python-fantom/nxt/error.py
diff options
context:
space:
mode:
Diffstat (limited to 'nxt-python-fantom/nxt/error.py')
-rw-r--r--nxt-python-fantom/nxt/error.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/nxt-python-fantom/nxt/error.py b/nxt-python-fantom/nxt/error.py
new file mode 100644
index 0000000..3d14497
--- /dev/null
+++ b/nxt-python-fantom/nxt/error.py
@@ -0,0 +1,87 @@
+# 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