programme bts
Dependencies: mbed ID12RFID SDFileSystem
mbed_genie.h@5:e104ec24b3fa, 2021-05-05 (annotated)
- Committer:
- valentinbruchet
- Date:
- Wed May 05 08:13:43 2021 +0000
- Revision:
- 5:e104ec24b3fa
Programme BTS;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
valentinbruchet | 5:e104ec24b3fa | 1 | #undef GENIE_DEBUG |
valentinbruchet | 5:e104ec24b3fa | 2 | |
valentinbruchet | 5:e104ec24b3fa | 3 | #define GENIE_VERSION "GenieMbed 17-Nov-2013" |
valentinbruchet | 5:e104ec24b3fa | 4 | |
valentinbruchet | 5:e104ec24b3fa | 5 | // Genie commands & replys: |
valentinbruchet | 5:e104ec24b3fa | 6 | |
valentinbruchet | 5:e104ec24b3fa | 7 | #define GENIE_ACK 0x06 |
valentinbruchet | 5:e104ec24b3fa | 8 | #define GENIE_NAK 0x15 |
valentinbruchet | 5:e104ec24b3fa | 9 | |
valentinbruchet | 5:e104ec24b3fa | 10 | #define TIMEOUT_PERIOD 500 |
valentinbruchet | 5:e104ec24b3fa | 11 | #define RESYNC_PERIOD 100 |
valentinbruchet | 5:e104ec24b3fa | 12 | |
valentinbruchet | 5:e104ec24b3fa | 13 | #define GENIE_READ_OBJ 0 |
valentinbruchet | 5:e104ec24b3fa | 14 | #define GENIE_WRITE_OBJ 1 |
valentinbruchet | 5:e104ec24b3fa | 15 | #define GENIE_WRITE_STR 2 |
valentinbruchet | 5:e104ec24b3fa | 16 | #define GENIE_WRITE_STRU 3 |
valentinbruchet | 5:e104ec24b3fa | 17 | #define GENIE_WRITE_CONTRAST 4 |
valentinbruchet | 5:e104ec24b3fa | 18 | #define GENIE_REPORT_OBJ 5 |
valentinbruchet | 5:e104ec24b3fa | 19 | #define GENIE_REPORT_EVENT 7 |
valentinbruchet | 5:e104ec24b3fa | 20 | |
valentinbruchet | 5:e104ec24b3fa | 21 | // Objects |
valentinbruchet | 5:e104ec24b3fa | 22 | // the manual says: |
valentinbruchet | 5:e104ec24b3fa | 23 | // Note: Object IDs may change with future releases; it is not |
valentinbruchet | 5:e104ec24b3fa | 24 | // advisable to code their values as constants. |
valentinbruchet | 5:e104ec24b3fa | 25 | |
valentinbruchet | 5:e104ec24b3fa | 26 | #define GENIE_OBJ_DIPSW 0 |
valentinbruchet | 5:e104ec24b3fa | 27 | #define GENIE_OBJ_KNOB 1 |
valentinbruchet | 5:e104ec24b3fa | 28 | #define GENIE_OBJ_ROCKERSW 2 |
valentinbruchet | 5:e104ec24b3fa | 29 | #define GENIE_OBJ_ROTARYSW 3 |
valentinbruchet | 5:e104ec24b3fa | 30 | #define GENIE_OBJ_SLIDER 4 |
valentinbruchet | 5:e104ec24b3fa | 31 | #define GENIE_OBJ_TRACKBAR 5 |
valentinbruchet | 5:e104ec24b3fa | 32 | #define GENIE_OBJ_WINBUTTON 6 |
valentinbruchet | 5:e104ec24b3fa | 33 | #define GENIE_OBJ_ANGULAR_METER 7 |
valentinbruchet | 5:e104ec24b3fa | 34 | #define GENIE_OBJ_COOL_GAUGE 8 |
valentinbruchet | 5:e104ec24b3fa | 35 | #define GENIE_OBJ_CUSTOM_DIGITS 9 |
valentinbruchet | 5:e104ec24b3fa | 36 | #define GENIE_OBJ_FORM 10 |
valentinbruchet | 5:e104ec24b3fa | 37 | #define GENIE_OBJ_GAUGE 11 |
valentinbruchet | 5:e104ec24b3fa | 38 | #define GENIE_OBJ_IMAGE 12 |
valentinbruchet | 5:e104ec24b3fa | 39 | #define GENIE_OBJ_KEYBOARD 13 |
valentinbruchet | 5:e104ec24b3fa | 40 | #define GENIE_OBJ_LED 14 |
valentinbruchet | 5:e104ec24b3fa | 41 | #define GENIE_OBJ_LED_DIGITS 15 |
valentinbruchet | 5:e104ec24b3fa | 42 | #define GENIE_OBJ_METER 16 |
valentinbruchet | 5:e104ec24b3fa | 43 | #define GENIE_OBJ_STRINGS 17 |
valentinbruchet | 5:e104ec24b3fa | 44 | #define GENIE_OBJ_THERMOMETER 18 |
valentinbruchet | 5:e104ec24b3fa | 45 | #define GENIE_OBJ_USER_LED 19 |
valentinbruchet | 5:e104ec24b3fa | 46 | #define GENIE_OBJ_VIDEO 20 |
valentinbruchet | 5:e104ec24b3fa | 47 | #define GENIE_OBJ_STATIC_TEXT 21 |
valentinbruchet | 5:e104ec24b3fa | 48 | #define GENIE_OBJ_SOUND 22 |
valentinbruchet | 5:e104ec24b3fa | 49 | #define GENIE_OBJ_TIMER 23 |
valentinbruchet | 5:e104ec24b3fa | 50 | #define GENIE_OBJ_SPECTRUM 24 |
valentinbruchet | 5:e104ec24b3fa | 51 | #define GENIE_OBJ_SCOPE 25 |
valentinbruchet | 5:e104ec24b3fa | 52 | #define GENIE_OBJ_TANK 26 |
valentinbruchet | 5:e104ec24b3fa | 53 | #define GENIE_OBJ_USERIMAGES 27 |
valentinbruchet | 5:e104ec24b3fa | 54 | #define GENIE_OBJ_PINOUTPUT 28 |
valentinbruchet | 5:e104ec24b3fa | 55 | #define GENIE_OBJ_PININPUT 29 |
valentinbruchet | 5:e104ec24b3fa | 56 | #define GENIE_OBJ_4DBUTTON 30 |
valentinbruchet | 5:e104ec24b3fa | 57 | #define GENIE_OBJ_ANIBUTTON 31 |
valentinbruchet | 5:e104ec24b3fa | 58 | #define GENIE_OBJ_COLORPICKER 32 |
valentinbruchet | 5:e104ec24b3fa | 59 | #define GENIE_OBJ_USERBUTTON 33 |
valentinbruchet | 5:e104ec24b3fa | 60 | |
valentinbruchet | 5:e104ec24b3fa | 61 | // Structure to store replys returned from a display |
valentinbruchet | 5:e104ec24b3fa | 62 | |
valentinbruchet | 5:e104ec24b3fa | 63 | #define GENIE_FRAME_SIZE 6 |
valentinbruchet | 5:e104ec24b3fa | 64 | struct genieFrameReportObj { |
valentinbruchet | 5:e104ec24b3fa | 65 | uint8_t cmd; |
valentinbruchet | 5:e104ec24b3fa | 66 | uint8_t object; |
valentinbruchet | 5:e104ec24b3fa | 67 | uint8_t index; |
valentinbruchet | 5:e104ec24b3fa | 68 | uint8_t data_msb; |
valentinbruchet | 5:e104ec24b3fa | 69 | uint8_t data_lsb; |
valentinbruchet | 5:e104ec24b3fa | 70 | }; |
valentinbruchet | 5:e104ec24b3fa | 71 | |
valentinbruchet | 5:e104ec24b3fa | 72 | ///////////////////////////////////////////////////////////////////// |
valentinbruchet | 5:e104ec24b3fa | 73 | // The Genie frame definition |
valentinbruchet | 5:e104ec24b3fa | 74 | // |
valentinbruchet | 5:e104ec24b3fa | 75 | // The union allows the data to be referenced as an array of uint8_t |
valentinbruchet | 5:e104ec24b3fa | 76 | // or a structure of type genieFrameReportObj, eg |
valentinbruchet | 5:e104ec24b3fa | 77 | // |
valentinbruchet | 5:e104ec24b3fa | 78 | // genieFrame f; |
valentinbruchet | 5:e104ec24b3fa | 79 | // f.bytes[4]; |
valentinbruchet | 5:e104ec24b3fa | 80 | // f.reportObject.data_lsb |
valentinbruchet | 5:e104ec24b3fa | 81 | // |
valentinbruchet | 5:e104ec24b3fa | 82 | // both methods get the same byte |
valentinbruchet | 5:e104ec24b3fa | 83 | // |
valentinbruchet | 5:e104ec24b3fa | 84 | union genieFrame { |
valentinbruchet | 5:e104ec24b3fa | 85 | uint8_t bytes[GENIE_FRAME_SIZE]; |
valentinbruchet | 5:e104ec24b3fa | 86 | genieFrameReportObj reportObject; |
valentinbruchet | 5:e104ec24b3fa | 87 | }; |
valentinbruchet | 5:e104ec24b3fa | 88 | |
valentinbruchet | 5:e104ec24b3fa | 89 | #define MAX_GENIE_EVENTS 16 // MUST be a power of 2 |
valentinbruchet | 5:e104ec24b3fa | 90 | #define MAX_GENIE_FATALS 10 |
valentinbruchet | 5:e104ec24b3fa | 91 | |
valentinbruchet | 5:e104ec24b3fa | 92 | struct genieEventQueueStruct { |
valentinbruchet | 5:e104ec24b3fa | 93 | genieFrame frames[MAX_GENIE_EVENTS]; |
valentinbruchet | 5:e104ec24b3fa | 94 | uint8_t rd_index; |
valentinbruchet | 5:e104ec24b3fa | 95 | uint8_t wr_index; |
valentinbruchet | 5:e104ec24b3fa | 96 | uint8_t n_events; |
valentinbruchet | 5:e104ec24b3fa | 97 | }; |
valentinbruchet | 5:e104ec24b3fa | 98 | |
valentinbruchet | 5:e104ec24b3fa | 99 | typedef void (*geniePutCharFuncPtr) (uint8_t c, uint32_t baud); |
valentinbruchet | 5:e104ec24b3fa | 100 | typedef uint16_t (*genieGetCharFuncPtr) (void); |
valentinbruchet | 5:e104ec24b3fa | 101 | typedef void (*genieUserEventHandlerPtr) (void); |
valentinbruchet | 5:e104ec24b3fa | 102 | |
valentinbruchet | 5:e104ec24b3fa | 103 | #define ERROR_NONE 0 |
valentinbruchet | 5:e104ec24b3fa | 104 | #define ERROR_TIMEOUT -1 // 255 0xFF |
valentinbruchet | 5:e104ec24b3fa | 105 | #define ERROR_NOHANDLER -2 // 254 0xFE |
valentinbruchet | 5:e104ec24b3fa | 106 | #define ERROR_NOCHAR -3 // 253 0xFD |
valentinbruchet | 5:e104ec24b3fa | 107 | #define ERROR_NAK -4 // 252 0xFC |
valentinbruchet | 5:e104ec24b3fa | 108 | #define ERROR_REPLY_OVR -5 // 251 0xFB |
valentinbruchet | 5:e104ec24b3fa | 109 | #define ERROR_RESYNC -6 // 250 0xFA |
valentinbruchet | 5:e104ec24b3fa | 110 | #define ERROR_NODISPLAY -7 // 249 0xF9 |
valentinbruchet | 5:e104ec24b3fa | 111 | #define ERROR_BAD_CS -8 // 248 0xF8 |
valentinbruchet | 5:e104ec24b3fa | 112 | |
valentinbruchet | 5:e104ec24b3fa | 113 | #define GENIE_LINK_IDLE 0 |
valentinbruchet | 5:e104ec24b3fa | 114 | #define GENIE_LINK_WFAN 1 // waiting for Ack or Nak |
valentinbruchet | 5:e104ec24b3fa | 115 | #define GENIE_LINK_WF_RXREPORT 2 // waiting for a report frame |
valentinbruchet | 5:e104ec24b3fa | 116 | #define GENIE_LINK_RXREPORT 3 // receiving a report frame |
valentinbruchet | 5:e104ec24b3fa | 117 | #define GENIE_LINK_RXEVENT 4 // receiving an event frame |
valentinbruchet | 5:e104ec24b3fa | 118 | #define GENIE_LINK_SHDN 5 |
valentinbruchet | 5:e104ec24b3fa | 119 | |
valentinbruchet | 5:e104ec24b3fa | 120 | #define GENIE_EVENT_NONE 0 |
valentinbruchet | 5:e104ec24b3fa | 121 | #define GENIE_EVENT_RXCHAR 1 |
valentinbruchet | 5:e104ec24b3fa | 122 | |
valentinbruchet | 5:e104ec24b3fa | 123 | #ifndef TRUE |
valentinbruchet | 5:e104ec24b3fa | 124 | #define TRUE (1==1) |
valentinbruchet | 5:e104ec24b3fa | 125 | #define FALSE (!TRUE) |
valentinbruchet | 5:e104ec24b3fa | 126 | #endif |
valentinbruchet | 5:e104ec24b3fa | 127 | |
valentinbruchet | 5:e104ec24b3fa | 128 | void SetupGenie(void); |
valentinbruchet | 5:e104ec24b3fa | 129 | void genieAttachEventHandler (genieUserEventHandlerPtr handler); |
valentinbruchet | 5:e104ec24b3fa | 130 | extern bool genieDequeueEvent (genieFrame * buff); |
valentinbruchet | 5:e104ec24b3fa | 131 | extern bool genieEventIs (genieFrame * e, uint8_t cmd, uint8_t object, uint8_t index); |
valentinbruchet | 5:e104ec24b3fa | 132 | extern uint16_t genieGetEventData (genieFrame * e); |
valentinbruchet | 5:e104ec24b3fa | 133 | extern uint16_t genieWriteObject (uint16_t object, uint16_t index, uint16_t data); |
valentinbruchet | 5:e104ec24b3fa | 134 | extern uint16_t genieWriteStr (uint16_t index, char *string); |
valentinbruchet | 5:e104ec24b3fa | 135 | extern void genieWriteContrast (uint16_t value); |
valentinbruchet | 5:e104ec24b3fa | 136 |