Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed BufferedSerial Servo PCT2075 FastPWM
error_handler.cpp@14:acaa1add097b, 2019-11-30 (annotated)
- Committer:
- JonFreeman
- Date:
- Sat Nov 30 16:34:58 2019 +0000
- Revision:
- 14:acaa1add097b
- Parent:
- 13:ef7a06fa11de
Proved inverter board for radio control inputs work.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| JonFreeman | 14:acaa1add097b | 1 | /* |
| JonFreeman | 14:acaa1add097b | 2 | STM3_ESC Electronic Speed Controller board, drives Two Brushless Motors, full Four Quadrant Control. |
| JonFreeman | 14:acaa1add097b | 3 | Jon Freeman B. Eng Hons |
| JonFreeman | 14:acaa1add097b | 4 | 2015 - 2019 |
| JonFreeman | 14:acaa1add097b | 5 | */ |
| JonFreeman | 12:d1d21a2941ef | 6 | #include "mbed.h" |
| JonFreeman | 13:ef7a06fa11de | 7 | #include "STM3_ESC.h" |
| JonFreeman | 12:d1d21a2941ef | 8 | #include "BufferedSerial.h" |
| JonFreeman | 12:d1d21a2941ef | 9 | extern BufferedSerial pc; |
| JonFreeman | 12:d1d21a2941ef | 10 | |
| JonFreeman | 12:d1d21a2941ef | 11 | /*class error_handling_Jan_2019 |
| JonFreeman | 12:d1d21a2941ef | 12 | { |
| JonFreeman | 12:d1d21a2941ef | 13 | int32_t TS_fault[NUMOF_REPORTABLE_TS_ERRORS] ; // Some number of reportable error codes, accessible through set and read members |
| JonFreeman | 12:d1d21a2941ef | 14 | public: |
| JonFreeman | 12:d1d21a2941ef | 15 | error_handling_Jan_2019 () { // default constructor |
| JonFreeman | 12:d1d21a2941ef | 16 | for (int i = 0; i < (sizeof(TS_fault) / sizeof(int32_t)); i++) |
| JonFreeman | 12:d1d21a2941ef | 17 | TS_fault[i] = 0; |
| JonFreeman | 12:d1d21a2941ef | 18 | } |
| JonFreeman | 12:d1d21a2941ef | 19 | void set (uint32_t, int32_t) ; |
| JonFreeman | 12:d1d21a2941ef | 20 | uint32_t read (uint32_t) ; |
| JonFreeman | 12:d1d21a2941ef | 21 | bool all_good () ; |
| JonFreeman | 12:d1d21a2941ef | 22 | void report_any () ; |
| JonFreeman | 12:d1d21a2941ef | 23 | } ; |
| JonFreeman | 12:d1d21a2941ef | 24 | */ |
| JonFreeman | 12:d1d21a2941ef | 25 | |
| JonFreeman | 12:d1d21a2941ef | 26 | const char * FaultList[] = { |
| JonFreeman | 12:d1d21a2941ef | 27 | /* |
| JonFreeman | 12:d1d21a2941ef | 28 | FAULT_0, |
| JonFreeman | 12:d1d21a2941ef | 29 | FAULT_EEPROM, |
| JonFreeman | 12:d1d21a2941ef | 30 | FAULT_BOARD_ID, |
| JonFreeman | 12:d1d21a2941ef | 31 | FAULT_COM_LINE_LEN, |
| JonFreeman | 12:d1d21a2941ef | 32 | FAULT_COM_LINE_NOMATCH, |
| JonFreeman | 12:d1d21a2941ef | 33 | FAULT_COM_LINE_LEN_PC, |
| JonFreeman | 12:d1d21a2941ef | 34 | FAULT_COM_LINE_LEN_TS, |
| JonFreeman | 12:d1d21a2941ef | 35 | FAULT_COM_LINE_NOMATCH_PC, |
| JonFreeman | 12:d1d21a2941ef | 36 | FAULT_COM_LINE_NOMATCH_TS, |
| JonFreeman | 12:d1d21a2941ef | 37 | FAULT_MAX, |
| JonFreeman | 12:d1d21a2941ef | 38 | NUMOF_REPORTABLE_TS_ERRORS |
| JonFreeman | 12:d1d21a2941ef | 39 | */ |
| JonFreeman | 12:d1d21a2941ef | 40 | "Zero", |
| JonFreeman | 12:d1d21a2941ef | 41 | "EEPROM", |
| JonFreeman | 12:d1d21a2941ef | 42 | "board ID", |
| JonFreeman | 12:d1d21a2941ef | 43 | "com line len", |
| JonFreeman | 12:d1d21a2941ef | 44 | "com line nomatch", |
| JonFreeman | 12:d1d21a2941ef | 45 | "com line len", |
| JonFreeman | 12:d1d21a2941ef | 46 | "com line len", |
| JonFreeman | 12:d1d21a2941ef | 47 | "com no match", |
| JonFreeman | 12:d1d21a2941ef | 48 | "com no match", |
| JonFreeman | 12:d1d21a2941ef | 49 | "max", |
| JonFreeman | 12:d1d21a2941ef | 50 | "endoflist", |
| JonFreeman | 12:d1d21a2941ef | 51 | " ", |
| JonFreeman | 12:d1d21a2941ef | 52 | } ; |
| JonFreeman | 12:d1d21a2941ef | 53 | |
| JonFreeman | 12:d1d21a2941ef | 54 | bool error_handling_Jan_2019::all_good () { |
| JonFreeman | 12:d1d21a2941ef | 55 | for (int i = 0; i < NUMOF_REPORTABLE_TS_ERRORS; i++) |
| JonFreeman | 12:d1d21a2941ef | 56 | if (ESC_fault[i]) |
| JonFreeman | 12:d1d21a2941ef | 57 | return false; |
| JonFreeman | 12:d1d21a2941ef | 58 | return true; |
| JonFreeman | 12:d1d21a2941ef | 59 | } |
| JonFreeman | 12:d1d21a2941ef | 60 | |
| JonFreeman | 12:d1d21a2941ef | 61 | /**void error_handling_Jan_2019::set (uint32_t err_no, int32_t bits_to_set) { |
| JonFreeman | 12:d1d21a2941ef | 62 | Used to set bits in error int |
| JonFreeman | 12:d1d21a2941ef | 63 | Uses OR to set new bits without clearing other bits set previously |
| JonFreeman | 12:d1d21a2941ef | 64 | */ |
| JonFreeman | 12:d1d21a2941ef | 65 | void error_handling_Jan_2019::set (uint32_t err_no, int32_t bits_to_set) { |
| JonFreeman | 12:d1d21a2941ef | 66 | if (bits_to_set) { |
| JonFreeman | 12:d1d21a2941ef | 67 | pc.printf ("At Error.set, err_no %d, bits %lx\r\n", err_no, bits_to_set); |
| JonFreeman | 12:d1d21a2941ef | 68 | ESC_fault[err_no] |= bits_to_set; // Uses OR to set new bits without clearing other bits set previously |
| JonFreeman | 12:d1d21a2941ef | 69 | } |
| JonFreeman | 12:d1d21a2941ef | 70 | } |
| JonFreeman | 12:d1d21a2941ef | 71 | |
| JonFreeman | 12:d1d21a2941ef | 72 | /**void error_handling_Jan_2019::clr (uint32_t err_no) { |
| JonFreeman | 12:d1d21a2941ef | 73 | Used to clear all bits in error int |
| JonFreeman | 12:d1d21a2941ef | 74 | */ |
| JonFreeman | 12:d1d21a2941ef | 75 | void error_handling_Jan_2019::clr (uint32_t err_no) { |
| JonFreeman | 12:d1d21a2941ef | 76 | ESC_fault[err_no] = 0; |
| JonFreeman | 12:d1d21a2941ef | 77 | } |
| JonFreeman | 12:d1d21a2941ef | 78 | |
| JonFreeman | 12:d1d21a2941ef | 79 | uint32_t error_handling_Jan_2019::read (uint32_t err_no) { |
| JonFreeman | 12:d1d21a2941ef | 80 | return ESC_fault[err_no]; |
| JonFreeman | 12:d1d21a2941ef | 81 | } |
| JonFreeman | 12:d1d21a2941ef | 82 | |
| JonFreeman | 12:d1d21a2941ef | 83 | void error_handling_Jan_2019::report_any (bool retain) { |
| JonFreeman | 12:d1d21a2941ef | 84 | for (int i = 0; i < NUMOF_REPORTABLE_TS_ERRORS; i++) { |
| JonFreeman | 12:d1d21a2941ef | 85 | if (ESC_fault[i]) { |
| JonFreeman | 12:d1d21a2941ef | 86 | pc.printf ("Error report, number %d, value %d, %s\r\n", i, ESC_fault[i], FaultList[i]); |
| JonFreeman | 12:d1d21a2941ef | 87 | if (!retain) |
| JonFreeman | 12:d1d21a2941ef | 88 | ESC_fault[i] = 0; |
| JonFreeman | 12:d1d21a2941ef | 89 | } |
| JonFreeman | 12:d1d21a2941ef | 90 | } |
| JonFreeman | 12:d1d21a2941ef | 91 | } |
| JonFreeman | 12:d1d21a2941ef | 92 |