Touch screen drivers control dashboard for miniature locomotive. Features meters for speed, volts, power. Switches for lights, horns. Drives multiple STM3_ESC brushless motor controllers for complete brushless loco system as used in "The Brute" - www.jons-workshop.com
Dependencies: TS_DISCO_F746NG mbed Servo LCD_DISCO_F746NG BSP_DISCO_F746NG QSPI_DISCO_F746NG AsyncSerial FastPWM
error_handler.cpp@14:6bcec5ac21ca, 2019-03-04 (annotated)
- Committer:
- JonFreeman
- Date:
- Mon Mar 04 17:47:27 2019 +0000
- Revision:
- 14:6bcec5ac21ca
- Parent:
- 12:a25bdf135348
'Brute' Locomotive Touch Screen Controller - Driver's Controls; Always a 'Work In Progress', snapshot March 2019
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JonFreeman | 12:a25bdf135348 | 1 | #include "mbed.h" |
JonFreeman | 12:a25bdf135348 | 2 | #include "Electric_Loco.h" |
JonFreeman | 12:a25bdf135348 | 3 | /*class error_handling_Jan_2019 |
JonFreeman | 12:a25bdf135348 | 4 | { |
JonFreeman | 12:a25bdf135348 | 5 | int32_t TS_fault[NUMOF_REPORTABLE_TS_ERRORS] ; // Some number of reportable error codes, accessible through set and read members |
JonFreeman | 12:a25bdf135348 | 6 | public: |
JonFreeman | 12:a25bdf135348 | 7 | error_handling_Jan_2019 () { // default constructor |
JonFreeman | 12:a25bdf135348 | 8 | for (int i = 0; i < (sizeof(TS_fault) / sizeof(int32_t)); i++) |
JonFreeman | 12:a25bdf135348 | 9 | TS_fault[i] = 0; |
JonFreeman | 12:a25bdf135348 | 10 | } |
JonFreeman | 12:a25bdf135348 | 11 | void set (uint32_t, int32_t) ; |
JonFreeman | 12:a25bdf135348 | 12 | uint32_t read (uint32_t) ; |
JonFreeman | 12:a25bdf135348 | 13 | bool all_good () ; |
JonFreeman | 12:a25bdf135348 | 14 | void report_any () ; |
JonFreeman | 12:a25bdf135348 | 15 | } ; |
JonFreeman | 12:a25bdf135348 | 16 | */ |
JonFreeman | 12:a25bdf135348 | 17 | |
JonFreeman | 12:a25bdf135348 | 18 | const char * FaultList[] = { |
JonFreeman | 12:a25bdf135348 | 19 | /* |
JonFreeman | 12:a25bdf135348 | 20 | FAULT_0, |
JonFreeman | 12:a25bdf135348 | 21 | FAULT_BOARD_ID_IN_MSG, |
JonFreeman | 12:a25bdf135348 | 22 | FAULT_TS, |
JonFreeman | 12:a25bdf135348 | 23 | FAULT_PC, |
JonFreeman | 12:a25bdf135348 | 24 | FAULT_COM, |
JonFreeman | 12:a25bdf135348 | 25 | FAULT_COM_NO_MATCH, |
JonFreeman | 12:a25bdf135348 | 26 | FAULT_COM_LINE_LEN, |
JonFreeman | 12:a25bdf135348 | 27 | FAULT_QSPI, |
JonFreeman | 12:a25bdf135348 | 28 | FAULT_ODOMETER, |
JonFreeman | 12:a25bdf135348 | 29 | FAULT_MAX, |
JonFreeman | 12:a25bdf135348 | 30 | NUMOF_REPORTABLE_TS_ERRORS |
JonFreeman | 12:a25bdf135348 | 31 | */ |
JonFreeman | 12:a25bdf135348 | 32 | "Zero", |
JonFreeman | 12:a25bdf135348 | 33 | "BoardID in msg", |
JonFreeman | 12:a25bdf135348 | 34 | "TouchScreen", |
JonFreeman | 12:a25bdf135348 | 35 | "pc", |
JonFreeman | 12:a25bdf135348 | 36 | "com no match", |
JonFreeman | 12:a25bdf135348 | 37 | "com line len", |
JonFreeman | 12:a25bdf135348 | 38 | "qspi", |
JonFreeman | 12:a25bdf135348 | 39 | "odometer", |
JonFreeman | 12:a25bdf135348 | 40 | "max", |
JonFreeman | 12:a25bdf135348 | 41 | "endoflist", |
JonFreeman | 12:a25bdf135348 | 42 | " ", |
JonFreeman | 12:a25bdf135348 | 43 | } ; |
JonFreeman | 12:a25bdf135348 | 44 | |
JonFreeman | 12:a25bdf135348 | 45 | bool error_handling_Jan_2019::all_good () { |
JonFreeman | 12:a25bdf135348 | 46 | for (int i = 0; i < NUMOF_REPORTABLE_TS_ERRORS; i++) |
JonFreeman | 12:a25bdf135348 | 47 | if (TS_fault[i]) |
JonFreeman | 12:a25bdf135348 | 48 | return false; |
JonFreeman | 12:a25bdf135348 | 49 | return true; |
JonFreeman | 12:a25bdf135348 | 50 | } |
JonFreeman | 12:a25bdf135348 | 51 | |
JonFreeman | 12:a25bdf135348 | 52 | /**void error_handling_Jan_2019::set (uint32_t err_no, int32_t bits_to_set) { |
JonFreeman | 12:a25bdf135348 | 53 | Used to set bits in error int |
JonFreeman | 12:a25bdf135348 | 54 | Uses OR to set new bits without clearing other bits set previously |
JonFreeman | 12:a25bdf135348 | 55 | */ |
JonFreeman | 12:a25bdf135348 | 56 | void error_handling_Jan_2019::set (uint32_t err_no, int32_t bits_to_set) { |
JonFreeman | 12:a25bdf135348 | 57 | TS_fault[err_no] |= bits_to_set; // Uses OR to set new bits without clearing other bits set previously |
JonFreeman | 12:a25bdf135348 | 58 | } |
JonFreeman | 12:a25bdf135348 | 59 | |
JonFreeman | 12:a25bdf135348 | 60 | /**void error_handling_Jan_2019::clr (uint32_t err_no) { |
JonFreeman | 12:a25bdf135348 | 61 | Used to clear all bits in error int |
JonFreeman | 12:a25bdf135348 | 62 | */ |
JonFreeman | 12:a25bdf135348 | 63 | void error_handling_Jan_2019::clr (uint32_t err_no) { |
JonFreeman | 12:a25bdf135348 | 64 | TS_fault[err_no] = 0; |
JonFreeman | 12:a25bdf135348 | 65 | } |
JonFreeman | 12:a25bdf135348 | 66 | |
JonFreeman | 12:a25bdf135348 | 67 | uint32_t error_handling_Jan_2019::read (uint32_t err_no) { |
JonFreeman | 12:a25bdf135348 | 68 | return TS_fault[err_no]; |
JonFreeman | 12:a25bdf135348 | 69 | } |
JonFreeman | 12:a25bdf135348 | 70 | |
JonFreeman | 12:a25bdf135348 | 71 | extern Serial pc; |
JonFreeman | 14:6bcec5ac21ca | 72 | /*void error_handling_Jan_2019::report_any () { |
JonFreeman | 12:a25bdf135348 | 73 | for (int i = 0; i < NUMOF_REPORTABLE_TS_ERRORS; i++) { |
JonFreeman | 12:a25bdf135348 | 74 | if (TS_fault[i]) |
JonFreeman | 12:a25bdf135348 | 75 | pc.printf ("Error report, number %d, value %d, %s\r\n", i, TS_fault[i], FaultList[i]); |
JonFreeman | 12:a25bdf135348 | 76 | } |
JonFreeman | 12:a25bdf135348 | 77 | } |
JonFreeman | 14:6bcec5ac21ca | 78 | */ |
JonFreeman | 12:a25bdf135348 | 79 | |
JonFreeman | 14:6bcec5ac21ca | 80 | void error_handling_Jan_2019::report_any (bool retain) { |
JonFreeman | 14:6bcec5ac21ca | 81 | for (int i = 0; i < NUMOF_REPORTABLE_TS_ERRORS; i++) { |
JonFreeman | 14:6bcec5ac21ca | 82 | if (TS_fault[i]) { |
JonFreeman | 14:6bcec5ac21ca | 83 | pc.printf ("Error report, number %d, value %d, %s\r\n", i, TS_fault[i], FaultList[i]); |
JonFreeman | 14:6bcec5ac21ca | 84 | if (!retain) |
JonFreeman | 14:6bcec5ac21ca | 85 | TS_fault[i] = 0; |
JonFreeman | 14:6bcec5ac21ca | 86 | } |
JonFreeman | 14:6bcec5ac21ca | 87 | } |
JonFreeman | 14:6bcec5ac21ca | 88 | } |
JonFreeman | 14:6bcec5ac21ca | 89 |