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.
ICE-Application/src/Drivers/mod.h@1:b2e90cda7a5a, 2017-01-24 (annotated)
- Committer:
- jmarkel44
- Date:
- Tue Jan 24 19:06:45 2017 +0000
- Revision:
- 1:b2e90cda7a5a
- Parent:
- 0:61364762ee0e
Port from IAR F412 project
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jmarkel44 | 0:61364762ee0e | 1 | #ifndef _MOD_H_ |
jmarkel44 | 0:61364762ee0e | 2 | #define _MOD_H_ |
jmarkel44 | 0:61364762ee0e | 3 | |
jmarkel44 | 0:61364762ee0e | 4 | // ------------------------------------------------------------------------------------------------- |
jmarkel44 | 0:61364762ee0e | 5 | // globals |
jmarkel44 | 0:61364762ee0e | 6 | |
jmarkel44 | 0:61364762ee0e | 7 | #define MOD_DATA 4 |
jmarkel44 | 0:61364762ee0e | 8 | #define MOD_IREG 60 |
jmarkel44 | 0:61364762ee0e | 9 | #define MOD_BAUD 19200 |
jmarkel44 | 0:61364762ee0e | 10 | |
jmarkel44 | 0:61364762ee0e | 11 | typedef struct word2byte { union |
jmarkel44 | 0:61364762ee0e | 12 | { |
jmarkel44 | 0:61364762ee0e | 13 | unsigned short int value; |
jmarkel44 | 0:61364762ee0e | 14 | struct { unsigned char byte0; unsigned char byte1; }; |
jmarkel44 | 0:61364762ee0e | 15 | };} |
jmarkel44 | 0:61364762ee0e | 16 | WORD2BYTE; |
jmarkel44 | 0:61364762ee0e | 17 | |
jmarkel44 | 0:61364762ee0e | 18 | typedef struct sint2byte { union |
jmarkel44 | 0:61364762ee0e | 19 | { |
jmarkel44 | 0:61364762ee0e | 20 | signed long int value; |
jmarkel44 | 0:61364762ee0e | 21 | struct { unsigned short int word0; unsigned short int word1; }; |
jmarkel44 | 0:61364762ee0e | 22 | struct { unsigned char byte0; unsigned char byte1; unsigned char byte2; unsigned char byte3; }; |
jmarkel44 | 0:61364762ee0e | 23 | };} |
jmarkel44 | 0:61364762ee0e | 24 | SINT2BYTE; |
jmarkel44 | 0:61364762ee0e | 25 | |
jmarkel44 | 0:61364762ee0e | 26 | typedef struct uint2byte { union |
jmarkel44 | 0:61364762ee0e | 27 | { |
jmarkel44 | 0:61364762ee0e | 28 | unsigned long int value; |
jmarkel44 | 0:61364762ee0e | 29 | struct { unsigned short int word0; unsigned short int word1; }; |
jmarkel44 | 0:61364762ee0e | 30 | struct { unsigned char byte0; unsigned char byte1; unsigned char byte2; unsigned char byte3; }; |
jmarkel44 | 0:61364762ee0e | 31 | };} |
jmarkel44 | 0:61364762ee0e | 32 | UINT2BYTE; |
jmarkel44 | 0:61364762ee0e | 33 | |
jmarkel44 | 0:61364762ee0e | 34 | typedef struct float2byte { union |
jmarkel44 | 0:61364762ee0e | 35 | { |
jmarkel44 | 0:61364762ee0e | 36 | float value; |
jmarkel44 | 0:61364762ee0e | 37 | struct { unsigned short int word0; unsigned short int word1; }; |
jmarkel44 | 0:61364762ee0e | 38 | struct { unsigned char byte0; unsigned char byte1; unsigned char byte2; unsigned char byte3; }; |
jmarkel44 | 0:61364762ee0e | 39 | };} |
jmarkel44 | 0:61364762ee0e | 40 | FLOAT2BYTE; |
jmarkel44 | 0:61364762ee0e | 41 | |
jmarkel44 | 0:61364762ee0e | 42 | typedef struct float2uint { union |
jmarkel44 | 0:61364762ee0e | 43 | { |
jmarkel44 | 0:61364762ee0e | 44 | float value; |
jmarkel44 | 0:61364762ee0e | 45 | unsigned long int uint_value; |
jmarkel44 | 0:61364762ee0e | 46 | };} |
jmarkel44 | 0:61364762ee0e | 47 | FLOAT2UINT; |
jmarkel44 | 0:61364762ee0e | 48 | |
jmarkel44 | 0:61364762ee0e | 49 | |
jmarkel44 | 0:61364762ee0e | 50 | extern unsigned short int mod_data[MOD_DATA]; |
jmarkel44 | 0:61364762ee0e | 51 | extern unsigned short int mod_ireg[MOD_IREG]; |
jmarkel44 | 0:61364762ee0e | 52 | |
jmarkel44 | 0:61364762ee0e | 53 | extern int mod_verbose; |
jmarkel44 | 0:61364762ee0e | 54 | |
jmarkel44 | 0:61364762ee0e | 55 | // ------------------------------------------------------------------------------------------------- |
jmarkel44 | 0:61364762ee0e | 56 | // modbus standard communication structures: (from slave perspective) |
jmarkel44 | 0:61364762ee0e | 57 | // |
jmarkel44 | 0:61364762ee0e | 58 | // MOD_FUNC_GET_COIL (NBYT = total bytes of data transmitted) |
jmarkel44 | 0:61364762ee0e | 59 | // MOD_FUNC_GET_DISC |
jmarkel44 | 0:61364762ee0e | 60 | // |
jmarkel44 | 0:61364762ee0e | 61 | // byte: 0 1 2 3 4 5 6 7 |
jmarkel44 | 0:61364762ee0e | 62 | // received: ADDR FUNC SREG-H SREG-L NREG-H NREG-L RCRC-L RCRC-H |
jmarkel44 | 0:61364762ee0e | 63 | // transmit: ADDR FUNC NBYT DATA-H DATA-L TCRC-L TCRC-H NULL |
jmarkel44 | 0:61364762ee0e | 64 | // |
jmarkel44 | 0:61364762ee0e | 65 | // MOD_FUNC_GET_IREG (NBYT = total bytes of data transmitted) |
jmarkel44 | 0:61364762ee0e | 66 | // MOD_FUNC_GET_HREG |
jmarkel44 | 0:61364762ee0e | 67 | // |
jmarkel44 | 0:61364762ee0e | 68 | // byte: 0 1 2 3 4 5 6 7 |
jmarkel44 | 0:61364762ee0e | 69 | // received: ADDR FUNC SREG-H SREG-L NREG-H NREG-L RCRC-L RCRC-H |
jmarkel44 | 0:61364762ee0e | 70 | // transmit: ADDR FUNC NBYT DATA-H DATA-L TCRC-L TCRC-H NULL |
jmarkel44 | 0:61364762ee0e | 71 | // |
jmarkel44 | 0:61364762ee0e | 72 | // MOD_FUNC_SET_COIL |
jmarkel44 | 0:61364762ee0e | 73 | // |
jmarkel44 | 0:61364762ee0e | 74 | // byte: 0 1 2 3 4 5 6 7 8 |
jmarkel44 | 0:61364762ee0e | 75 | // received: ADDR FUNC SREG-H SREG-L DATA-H DATA-L RCRC-L RCRC-H |
jmarkel44 | 0:61364762ee0e | 76 | // transmit: ADDR FUNC SREG-H SREG-L DATA-H DATA-L TCRC-L TCRC-H NULL |
jmarkel44 | 0:61364762ee0e | 77 | // |
jmarkel44 | 0:61364762ee0e | 78 | // MOD_FUNC_SET_COILS |
jmarkel44 | 0:61364762ee0e | 79 | // |
jmarkel44 | 0:61364762ee0e | 80 | // byte: 0 1 2 3 4 5 6 7 8 9 10 |
jmarkel44 | 0:61364762ee0e | 81 | // received: ADDR FUNC SREG-H SREG-L NREG-H NREG-L NBYT DATA-H DATA-L RCRC-L RCRC-H |
jmarkel44 | 0:61364762ee0e | 82 | // transmit: ADDR FUNC SREG-H SREG-L NREG-H NREG-L TCRC-L TCRC-H NULL |
jmarkel44 | 0:61364762ee0e | 83 | // |
jmarkel44 | 0:61364762ee0e | 84 | // MOD_FUNC_SET_HREG |
jmarkel44 | 0:61364762ee0e | 85 | // |
jmarkel44 | 0:61364762ee0e | 86 | // byte: 0 1 2 3 4 5 6 7 8 |
jmarkel44 | 0:61364762ee0e | 87 | // received: ADDR FUNC SREG-H SREG-L DATA-H DATA-L RCRC-L RCRC-H |
jmarkel44 | 0:61364762ee0e | 88 | // transmit: ADDR FUNC SREG-H SREG-L DATA-H DATA-L TCRC-L TCRC-H NULL |
jmarkel44 | 0:61364762ee0e | 89 | // |
jmarkel44 | 0:61364762ee0e | 90 | // MOD_FUNC_SET_HREGS |
jmarkel44 | 0:61364762ee0e | 91 | // |
jmarkel44 | 0:61364762ee0e | 92 | // byte: 0 1 2 3 4 5 6 7 8 9 10 |
jmarkel44 | 0:61364762ee0e | 93 | // received: ADDR FUNC SREG-H SREG-L NREG-H NREG-L NBYT DATA-H DATA-L RCRC-L RCRC-H |
jmarkel44 | 0:61364762ee0e | 94 | // transmit: ADDR FUNC SREG-H SREG-L NREG-H NREG-L TCRC-L TCRC-H NULL |
jmarkel44 | 0:61364762ee0e | 95 | // |
jmarkel44 | 0:61364762ee0e | 96 | // response after error (EFUNC = FUNC + 0x80) |
jmarkel44 | 0:61364762ee0e | 97 | // |
jmarkel44 | 0:61364762ee0e | 98 | // byte: 0 1 2 3 4 5 |
jmarkel44 | 0:61364762ee0e | 99 | // transmit: ADDR EFUNC ERROR TCRC-L TCRC-H NULL |
jmarkel44 | 0:61364762ee0e | 100 | // |
jmarkel44 | 0:61364762ee0e | 101 | // ----------------------------------------------------------------------------- |
jmarkel44 | 0:61364762ee0e | 102 | // modbus definitions |
jmarkel44 | 0:61364762ee0e | 103 | |
jmarkel44 | 0:61364762ee0e | 104 | enum // function codes |
jmarkel44 | 0:61364762ee0e | 105 | { |
jmarkel44 | 0:61364762ee0e | 106 | MOD_FUNC_00, |
jmarkel44 | 0:61364762ee0e | 107 | MOD_FUNC_GET_COIL, // 01: read coil status |
jmarkel44 | 0:61364762ee0e | 108 | MOD_FUNC_GET_DISC, // 02: read discrete inputs |
jmarkel44 | 0:61364762ee0e | 109 | MOD_FUNC_GET_HREG, // 03: read holding registers |
jmarkel44 | 0:61364762ee0e | 110 | MOD_FUNC_GET_IREG, // 04: read input registers |
jmarkel44 | 0:61364762ee0e | 111 | MOD_FUNC_SET_COIL, // 05: force single coil |
jmarkel44 | 0:61364762ee0e | 112 | MOD_FUNC_SET_HREG, // 06: preset single register |
jmarkel44 | 0:61364762ee0e | 113 | MOD_FUNC_07, |
jmarkel44 | 0:61364762ee0e | 114 | MOD_FUNC_08, |
jmarkel44 | 0:61364762ee0e | 115 | MOD_FUNC_09, |
jmarkel44 | 0:61364762ee0e | 116 | MOD_FUNC_10, |
jmarkel44 | 0:61364762ee0e | 117 | MOD_FUNC_11, |
jmarkel44 | 0:61364762ee0e | 118 | MOD_FUNC_12, |
jmarkel44 | 0:61364762ee0e | 119 | MOD_FUNC_13, |
jmarkel44 | 0:61364762ee0e | 120 | MOD_FUNC_14, |
jmarkel44 | 0:61364762ee0e | 121 | MOD_FUNC_SET_COILS, // 15: force multiple coils |
jmarkel44 | 0:61364762ee0e | 122 | MOD_FUNC_SET_HREGS, // 16: preset multiple registers |
jmarkel44 | 0:61364762ee0e | 123 | MOD_FUNC_NUM |
jmarkel44 | 0:61364762ee0e | 124 | }; |
jmarkel44 | 0:61364762ee0e | 125 | |
jmarkel44 | 0:61364762ee0e | 126 | enum // error codes ( * = used by Nubio ) |
jmarkel44 | 0:61364762ee0e | 127 | { |
jmarkel44 | 0:61364762ee0e | 128 | MOD_ERROR_NONE, |
jmarkel44 | 0:61364762ee0e | 129 | MOD_ERROR_ILL_FUNC, // 01: * slave received illegal function code |
jmarkel44 | 0:61364762ee0e | 130 | MOD_ERROR_ILL_ADDR, // 02: * slave received illegal register address |
jmarkel44 | 0:61364762ee0e | 131 | MOD_ERROR_ILL_DATA, // 03: * slave received illegal register value |
jmarkel44 | 0:61364762ee0e | 132 | MOD_ERROR_SLAVE_FAIL, // 04: * slave device-specific failure |
jmarkel44 | 0:61364762ee0e | 133 | MOD_ERROR_SLAVE_ACK, // 05: * slave ACK |
jmarkel44 | 0:61364762ee0e | 134 | MOD_ERROR_SLAVE_BUSY, // 06: slave is busy |
jmarkel44 | 0:61364762ee0e | 135 | MOD_ERROR_SLAVE_NACK, // 07: * slave NACK (Nubio returns this for CRC error) |
jmarkel44 | 0:61364762ee0e | 136 | MOD_ERROR_SLAVE_PARITY, // 08: slave memory parity error |
jmarkel44 | 0:61364762ee0e | 137 | MOD_ERROR_RX_TIMEOUT, // 09: master receive timeout |
jmarkel44 | 0:61364762ee0e | 138 | MOD_ERROR_TX_TIMEOUT, // 10: master transmit timeout |
jmarkel44 | 0:61364762ee0e | 139 | MOD_ERROR_CRC, // 11: master CRC error |
jmarkel44 | 0:61364762ee0e | 140 | MOD_ERROR_NUM |
jmarkel44 | 0:61364762ee0e | 141 | }; |
jmarkel44 | 0:61364762ee0e | 142 | |
jmarkel44 | 0:61364762ee0e | 143 | // ------------------------------------------------------------------------------------------------- |
jmarkel44 | 0:61364762ee0e | 144 | // function prototypes |
jmarkel44 | 0:61364762ee0e | 145 | |
jmarkel44 | 0:61364762ee0e | 146 | void mod_init(void); |
jmarkel44 | 0:61364762ee0e | 147 | void mod_clear(void); |
jmarkel44 | 0:61364762ee0e | 148 | |
jmarkel44 | 0:61364762ee0e | 149 | void mod_process(void); |
jmarkel44 | 0:61364762ee0e | 150 | |
jmarkel44 | 0:61364762ee0e | 151 | void mod_ireg_dump(void); |
jmarkel44 | 0:61364762ee0e | 152 | |
jmarkel44 | 0:61364762ee0e | 153 | unsigned short int mod_calc_crc(unsigned char *buffer, int length); |
jmarkel44 | 0:61364762ee0e | 154 | |
jmarkel44 | 0:61364762ee0e | 155 | int mod_read(int inp_addr, int inp_func, int inp_sreg, int inp_nreg, unsigned char *rd_buf); |
jmarkel44 | 0:61364762ee0e | 156 | int mod_write(int inp_addr, int inp_func, int inp_sreg, int inp_nreg, unsigned char *xmt_buf); |
jmarkel44 | 0:61364762ee0e | 157 | |
jmarkel44 | 0:61364762ee0e | 158 | // ------------------------------------------------------------------------------------------------- |
jmarkel44 | 0:61364762ee0e | 159 | |
jmarkel44 | 0:61364762ee0e | 160 | #endif // _MOD_H_ |