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.
Fork of LG by
DeviceProtocol.h@72:f5e189c62bcb, 2016-02-23 (annotated)
- Committer:
- Diletant
- Date:
- Tue Feb 23 14:23:37 2016 +0000
- Revision:
- 72:f5e189c62bcb
- Parent:
- 71:7835a18110bd
- Child:
- 73:29fccfe239a3
Device settings&protocol update. Not final!!!
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Diletant | 54:d94145ba23f4 | 1 | #ifndef __DEVICEPROTOCOL_H__ |
| Diletant | 54:d94145ba23f4 | 2 | #define __DEVICEPROTOCOL_H__ |
| Diletant | 54:d94145ba23f4 | 3 | |
| Diletant | 54:d94145ba23f4 | 4 | #include "DeviceSettings.h" |
| Diletant | 54:d94145ba23f4 | 5 | #include "stdint.h" |
| Diletant | 54:d94145ba23f4 | 6 | |
| Diletant | 69:70849751d98e | 7 | #define InputBufferSize 1024 |
| Diletant | 69:70849751d98e | 8 | typedef struct _DeviceInputBuffer { |
| Diletant | 69:70849751d98e | 9 | uint8_t buffer[InputBufferSize]; |
| Diletant | 71:7835a18110bd | 10 | int start; //read start position |
| Diletant | 71:7835a18110bd | 11 | int end; //write start position |
| Diletant | 69:70849751d98e | 12 | } DeviceInputBuffer; |
| Diletant | 71:7835a18110bd | 13 | |
| Diletant | 71:7835a18110bd | 14 | #define OutputBufferSize 64 |
| Diletant | 69:70849751d98e | 15 | typedef struct _DeviceOutputBuffer { |
| Diletant | 71:7835a18110bd | 16 | uint8_t buffer[OutputBufferSize]; |
| Diletant | 69:70849751d98e | 17 | int count; //byte count |
| Diletant | 69:70849751d98e | 18 | } DeviceOutputBuffer; |
| Diletant | 69:70849751d98e | 19 | |
| Diletant | 69:70849751d98e | 20 | typedef struct _DeviceCommunicationState { |
| Diletant | 72:f5e189c62bcb | 21 | DeviceInputBuffer requestBuffer; |
| Diletant | 72:f5e189c62bcb | 22 | DeviceOutputBuffer responseBuffer; |
| Diletant | 69:70849751d98e | 23 | //Request settings |
| Diletant | 71:7835a18110bd | 24 | uint32_t requestBaudRate; |
| Diletant | 71:7835a18110bd | 25 | uint8_t requestCode; |
| Diletant | 71:7835a18110bd | 26 | uint8_t requestSelect; |
| Diletant | 69:70849751d98e | 27 | //Response settings |
| Diletant | 72:f5e189c62bcb | 28 | uint8_t transmitterReady; |
| Diletant | 71:7835a18110bd | 29 | uint8_t responseReady; |
| Diletant | 71:7835a18110bd | 30 | uint8_t responseCode; |
| Diletant | 71:7835a18110bd | 31 | uint8_t responseSelect; |
| Diletant | 71:7835a18110bd | 32 | uint32_t responseBaudRate; |
| Diletant | 69:70849751d98e | 33 | //Response broadcast and external latch delay |
| Diletant | 71:7835a18110bd | 34 | uint32_t responseDelay; //Values in mks; 0 - immediate response |
| Diletant | 71:7835a18110bd | 35 | uint32_t responseDelayClock; //Values in mks; response delay clock - send response if clock > delay; |
| Diletant | 69:70849751d98e | 36 | //Periodical response |
| Diletant | 71:7835a18110bd | 37 | uint32_t responsePeriod; //Values in mks; 0 - no periodic response; 2000 - 500Hz |
| Diletant | 71:7835a18110bd | 38 | uint32_t responsePeriodClock; //Values in mks; response period clock - send response if clock > period; |
| Diletant | 69:70849751d98e | 39 | } DeviceCommunicationState; |
| Diletant | 69:70849751d98e | 40 | |
| Diletant | 71:7835a18110bd | 41 | typedef struct _DeviceLatchState { |
| Diletant | 71:7835a18110bd | 42 | //Latch mode |
| Diletant | 71:7835a18110bd | 43 | DeviceLatchMode mode; |
| Diletant | 71:7835a18110bd | 44 | } DeviceLatchState; |
| Diletant | 71:7835a18110bd | 45 | |
| Diletant | 71:7835a18110bd | 46 | typedef struct _DeviceCountersState { |
| Diletant | 71:7835a18110bd | 47 | //Latch |
| Diletant | 71:7835a18110bd | 48 | DeviceLatchState latch; |
| Diletant | 72:f5e189c62bcb | 49 | //Delta command mode |
| Diletant | 72:f5e189c62bcb | 50 | DeviceDeltaMode deltaMode; |
| Diletant | 71:7835a18110bd | 51 | } DeviceCountersState; |
| Diletant | 71:7835a18110bd | 52 | |
| Diletant | 69:70849751d98e | 53 | typedef struct _DeviceState { |
| Diletant | 69:70849751d98e | 54 | DeviceCommunicationState communication; |
| Diletant | 71:7835a18110bd | 55 | DeviceCountersState counters; |
| Diletant | 69:70849751d98e | 56 | } DeviceState; |
| Diletant | 59:daf3a8ed255e | 57 | |
| Diletant | 59:daf3a8ed255e | 58 | /* |
| Diletant | 54:d94145ba23f4 | 59 | typedef struct { |
| Diletant | 54:d94145ba23f4 | 60 | uint8_t Offset; |
| Diletant | 54:d94145ba23f4 | 61 | uint8_t Mask; |
| Diletant | 54:d94145ba23f4 | 62 | uint8_t Value; |
| Diletant | 54:d94145ba23f4 | 63 | } DeviceMessageCheckPoint; |
| Diletant | 54:d94145ba23f4 | 64 | |
| Diletant | 54:d94145ba23f4 | 65 | typedef enum{ |
| Diletant | 54:d94145ba23f4 | 66 | DMID_DeviceMode |
| Diletant | 54:d94145ba23f4 | 67 | } DeviceMessageID; |
| Diletant | 54:d94145ba23f4 | 68 | |
| Diletant | 54:d94145ba23f4 | 69 | typedef struct { |
| Diletant | 54:d94145ba23f4 | 70 | DeviceMessageID ID; |
| Diletant | 54:d94145ba23f4 | 71 | uint8_t Size; |
| Diletant | 54:d94145ba23f4 | 72 | uint8_t CheckPointCount; |
| Diletant | 54:d94145ba23f4 | 73 | DeviceMessageCheckPoint *CheckPointList; |
| Diletant | 54:d94145ba23f4 | 74 | } DeviceMessageCheck; |
| Diletant | 59:daf3a8ed255e | 75 | */ |
| Diletant | 61:1b76fe74a0d9 | 76 | |
| Diletant | 68:46937d192c39 | 77 | #define BROADCAST_FRAME 100 //100 mks |
| Diletant | 68:46937d192c39 | 78 | |
| Diletant | 66:66124221f4b0 | 79 | #define DELTA_PS 0xa0 //B_DeltaPS command code: output of accumulated pulses and ACS parameters as 22 indexed packets sequence |
| Diletant | 66:66124221f4b0 | 80 | #define DELTA_BINS 0xb0 //B_DeltaBINS command code: output of accumulated pulses and data validity attribute in one packet |
| Diletant | 66:66124221f4b0 | 81 | #define DELTA_SF 0xb2 //B_DeltaSF command code: scale factor measurement data output in one packet |
| Diletant | 61:1b76fe74a0d9 | 82 | #define DEV_MODE 0xa5 //e. the code of the Device_Mode command //r. код команды Device_Mode |
| Diletant | 61:1b76fe74a0d9 | 83 | #define BIT_MODE 0xa7 //e. the code of the B.I.T. command //r. код команды B.I.T.(встороенного тестирования) |
| Diletant | 61:1b76fe74a0d9 | 84 | #define RATE 0x00 //e. the code of the Rate command //r. код команды Rate |
| Diletant | 61:1b76fe74a0d9 | 85 | #define DELTA 0x0f //e. the code of the Delta command //r. код команды Delta |
| Diletant | 61:1b76fe74a0d9 | 86 | #define D_PERIOD_W 0xf0 //e. the code of the D_Period_W command //r. код команды D_Period_W |
| Diletant | 61:1b76fe74a0d9 | 87 | |
| Diletant | 61:1b76fe74a0d9 | 88 | #define MAINTENANCE 0x99 //e. the code of the Maintenance mode command //r. код команды Maintenance mode |
| Diletant | 63:823c7f1ec6c3 | 89 | //Maintenance command set versions |
| Diletant | 63:823c7f1ec6c3 | 90 | #define M0_MAINTENANCE 0x99 //: initial version |
| Diletant | 62:2d2dcf999fb5 | 91 | //Maintenance basic commands group |
| Diletant | 63:823c7f1ec6c3 | 92 | #define M0_BASIC 0xda //Basic maintenance commands group code |
| Diletant | 62:2d2dcf999fb5 | 93 | #define M0_CLEAR 0x00 //group command select: e. reset of the register of errors of line 485 //r. очистка регистра ошибок линии 485 |
| Diletant | 62:2d2dcf999fb5 | 94 | #define M0_MIRROR 0x01 //group command select: e. return previous contents of the receiver buffer //r. возврат предыдущего содержимого буфера приемника |
| Diletant | 62:2d2dcf999fb5 | 95 | #define M0_LDPAR_F 0x02 //group command select: e. load GLD parameters from Flash-memory //r. загрузить параметры ГЛД из флэш-памяти |
| Diletant | 62:2d2dcf999fb5 | 96 | #define M0_LDPAR_D 0x03 //group command select: e. set GLD parameters by procedure of initialization //r. установить параметры ГЛД процедурой инициализации |
| Diletant | 62:2d2dcf999fb5 | 97 | #define M0_START 0x04 //group command select: e. switch on the GLD //r. включить ГЛД |
| Diletant | 62:2d2dcf999fb5 | 98 | #define M0_STOP 0x40 //group command select: e. switch off the GLD //r. выключить ГЛД |
| Diletant | 62:2d2dcf999fb5 | 99 | #define M0_PULSE 0x0a //group command select: e. generation of the light-up pulse //r. генерация импульса поджига |
| Diletant | 62:2d2dcf999fb5 | 100 | //Maintenance rate commands group |
| Diletant | 63:823c7f1ec6c3 | 101 | #define M0_RATE 0xdd //e. delivery of a stack of parameters M_Rate (Rate2, Rate3) //r. выдача набора параметров M_Rate (Rate2, Rate3) |
| Diletant | 62:2d2dcf999fb5 | 102 | #define M0_RATE_0 0x00 //group command select: output parameters set 0? |
| Diletant | 62:2d2dcf999fb5 | 103 | #define M0_RATE_1 0x01 //group command select: output parameters set 1? |
| Diletant | 62:2d2dcf999fb5 | 104 | #define M0_RATE_2 0x02 //group command select: output parameters set 2 |
| Diletant | 62:2d2dcf999fb5 | 105 | #define M0_RATE_3 0x03 //group command select: output parameters set 3 |
| Diletant | 62:2d2dcf999fb5 | 106 | #define M0_RATE_4 0x04 //group command select: output parameters set 4 |
| Diletant | 62:2d2dcf999fb5 | 107 | #define M0_RATE_7 0x07 //group command select: output parameters set 7 |
| Diletant | 62:2d2dcf999fb5 | 108 | |
| Diletant | 61:1b76fe74a0d9 | 109 | //Other maintenance commands |
| Diletant | 63:823c7f1ec6c3 | 110 | #define M0_STIMUL 0x0a //e. the code of the Stimul command //r. код команды Stimul |
| Diletant | 63:823c7f1ec6c3 | 111 | #define M0_RESET 0x80 //e. software device reset(restart) //r. программный сброс (рестарт) прибора |
| Diletant | 61:1b76fe74a0d9 | 112 | |
| Diletant | 63:823c7f1ec6c3 | 113 | #define M0_CTL_R 0xd9 //e. reading the control register of the device //r. чтение регистра управления устройства |
| Diletant | 63:823c7f1ec6c3 | 114 | #define M0_CTL_M 0xd8 //e. modification of bit of the control register //r. модификация бита регистра управления |
| Diletant | 61:1b76fe74a0d9 | 115 | |
| Diletant | 63:823c7f1ec6c3 | 116 | #define M0_TMP_W 0xe0 //e. writing to the AD7714 circuit (temperature sensors) //r. запись в схемы AD7714 (измерители температуры) |
| Diletant | 63:823c7f1ec6c3 | 117 | #define M0_TMP_R 0xe1 //e. reading from the AD7714 circuit (temperature sensors) //r. чтение из схем AD7714 (измерители температуры) |
| Diletant | 63:823c7f1ec6c3 | 118 | #define M0_E5R_W 0xe2 //e. writing to the register of a mode of the Elio5 card //r. запись в регистр режима платы Elio5 |
| Diletant | 63:823c7f1ec6c3 | 119 | #define M0_ADC_R 0xe3 //e. reading data from the ADC of the Elio5 card //r. чтение данных из АЦП платы Elio5 |
| Diletant | 63:823c7f1ec6c3 | 120 | #define M0_VIB_W 0xe4 //e. loading of the oscillation period of the dither drive //r. загрузка периода колебаний вибропривода |
| Diletant | 63:823c7f1ec6c3 | 121 | #define M0_CNT_R 0xe5 //e. reading data from the counters of the Elio5 card //r. чтение данных из счетчиков платы Elio5 |
| Diletant | 63:823c7f1ec6c3 | 122 | #define M0_GPH_W 0xe6 //e. loading gain factors of photodetector channels //r. загрузка коэффициентов усиления каналов фотоприемника |
| Diletant | 63:823c7f1ec6c3 | 123 | #define M0_FLG_R 0xe7 //e. reading data from the register of input flags //r. чтение данных из регистра входных флагов |
| Diletant | 63:823c7f1ec6c3 | 124 | #define M0_PARAM_W 0xe8 //e. writing working parameter to the data memory //r. запись рабочего параметра в память данных |
| Diletant | 63:823c7f1ec6c3 | 125 | #define M0_PARAM_R 0xe9 //e. reading working parameter of the GLD from the data memory //r. чтение рабочего параметра GLD из памяти данных |
| Diletant | 63:823c7f1ec6c3 | 126 | #define M0_E5RA_W 0xea //e. writing in 1st additional (A) register of a mode of the Elio5 card //r. запись в 1-ый дополнительный (А) регистр режима платы Elio5 |
| Diletant | 54:d94145ba23f4 | 127 | |
| Diletant | 54:d94145ba23f4 | 128 | //Command: DeviceMode |
| Diletant | 59:daf3a8ed255e | 129 | //DeviceMessageCheckPoint DeviceModeRequestCheck[] = {{0x00,0xff,0xcc},{0x02,0xff,0xcc},{0x03,0xf0,0x00}}; |
| Diletant | 59:daf3a8ed255e | 130 | //DeviceMessageCheckPoint DeviceModeResponseCheck[] = {{0x00,0xff,0xcc},{0x02,0xff,0x00}}; |
| Diletant | 54:d94145ba23f4 | 131 | typedef enum |
| Diletant | 54:d94145ba23f4 | 132 | { |
| Diletant | 63:823c7f1ec6c3 | 133 | RESPONSE_IMMEDIATE, //external latch by RS422 B_Delta_BINS request with B_Delta_BINS format response |
| Diletant | 63:823c7f1ec6c3 | 134 | RESPONSE_BROADCAST //external latch mode with B_Delta_BINS format data and latch pulse request |
| Diletant | 63:823c7f1ec6c3 | 135 | } ResponseModes; |
| Diletant | 63:823c7f1ec6c3 | 136 | typedef enum |
| Diletant | 63:823c7f1ec6c3 | 137 | { |
| Diletant | 54:d94145ba23f4 | 138 | Reserved, |
| Diletant | 54:d94145ba23f4 | 139 | DevModeLatch10kHz, //internal latch with frequency 10 kHz (power on default mode) |
| Diletant | 54:d94145ba23f4 | 140 | DevModeLatchMeander, //internal latch by signed meander pulses |
| Diletant | 54:d94145ba23f4 | 141 | DevModeLatchRS422PS, //external latch by RS422 B_Delta_PS request with B_Delta_PS format response |
| Diletant | 54:d94145ba23f4 | 142 | DevModeLatchRequestPS, //external latch by pulse request with B_Delta_PS format response |
| Diletant | 54:d94145ba23f4 | 143 | DevModeLatchRS422BINS, //external latch by RS422 B_Delta_BINS request with B_Delta_BINS format response |
| Diletant | 54:d94145ba23f4 | 144 | DevModeLatchRequestBINS //external latch mode with B_Delta_BINS format data and latch pulse request |
| Diletant | 54:d94145ba23f4 | 145 | } DeviceModes; |
| Diletant | 62:2d2dcf999fb5 | 146 | /* |
| Diletant | 54:d94145ba23f4 | 147 | typedef __packed struct { |
| Diletant | 54:d94145ba23f4 | 148 | uint8_t SOC; //Start Of Command: 0xCC |
| Diletant | 54:d94145ba23f4 | 149 | uint8_t Address; //Device address: 0x00, 0x01, 0x02, 0x1f |
| Diletant | 54:d94145ba23f4 | 150 | uint8_t Cmd; //Command code: 0xA5 |
| Diletant | 54:d94145ba23f4 | 151 | uint8_t Reserved : 4; //Reserved |
| Diletant | 54:d94145ba23f4 | 152 | DeviceModes Mode : 4; //Device mode |
| Diletant | 54:d94145ba23f4 | 153 | uint8_t ChecksumHi; //Checksum Hi byte |
| Diletant | 54:d94145ba23f4 | 154 | uint8_t ChecksumLo; //Checksum Lo byte |
| Diletant | 54:d94145ba23f4 | 155 | } DeviceModeRequest; |
| Diletant | 54:d94145ba23f4 | 156 | typedef __packed struct { |
| Diletant | 54:d94145ba23f4 | 157 | uint8_t SOC; //Start Of Command: 0xCC |
| Diletant | 54:d94145ba23f4 | 158 | uint8_t Address; //Device address: 0x00, 0x01, 0x02, 0x1f |
| Diletant | 54:d94145ba23f4 | 159 | uint8_t Zero; //Reserved: 0x00 |
| Diletant | 54:d94145ba23f4 | 160 | uint8_t Mode; //Device mode |
| Diletant | 54:d94145ba23f4 | 161 | uint8_t RgRHi; //Register RgR Hi byte |
| Diletant | 54:d94145ba23f4 | 162 | uint8_t RgRLo; //Register RgR Lo byte |
| Diletant | 54:d94145ba23f4 | 163 | uint8_t ChecksumHi; //Checksum Hi byte |
| Diletant | 54:d94145ba23f4 | 164 | uint8_t ChecksumLo; //Checksum Lo byte |
| Diletant | 54:d94145ba23f4 | 165 | } DeviceModeResponse; |
| Diletant | 62:2d2dcf999fb5 | 166 | |
| Diletant | 54:d94145ba23f4 | 167 | DeviceMessageCheck DeviceRequestChecks[] = { |
| Diletant | 54:d94145ba23f4 | 168 | {DMID_DeviceMode, 6, 3, DeviceModeRequestCheck} |
| Diletant | 54:d94145ba23f4 | 169 | }; |
| Diletant | 54:d94145ba23f4 | 170 | |
| Diletant | 54:d94145ba23f4 | 171 | DeviceMessageCheck DeviceResponseChecks[] = { |
| Diletant | 54:d94145ba23f4 | 172 | {DMID_DeviceMode, 8, 2, DeviceModeResponseCheck} |
| Diletant | 54:d94145ba23f4 | 173 | }; |
| Diletant | 59:daf3a8ed255e | 174 | */ |
| Diletant | 54:d94145ba23f4 | 175 | |
| Diletant | 69:70849751d98e | 176 | int PullRequest(DeviceInputBuffer *b); |
| Diletant | 69:70849751d98e | 177 | |
| Diletant | 69:70849751d98e | 178 | void TransmitResponse(void); |
| Diletant | 54:d94145ba23f4 | 179 | |
| Diletant | 71:7835a18110bd | 180 | DeviceLatchMode DecodeLatchModeFromDeviceMode(uint8_t param); |
| Diletant | 71:7835a18110bd | 181 | DeviceDeltaMode DecodeDeltaModeFromDeviceMode(uint8_t param); |
| Diletant | 71:7835a18110bd | 182 | uint32_t DecodeResponseBaudRateFromDeltaBINS(uint8_t param); |
| Diletant | 71:7835a18110bd | 183 | uint32_t DecodeRequestBaudRateFromDeltaBINS(uint8_t param); |
| Diletant | 71:7835a18110bd | 184 | uint32_t DecodeResponsePeriodFromDeltaBINS(uint8_t param); |
| Diletant | 64:8179dacbf32b | 185 | |
| Diletant | 72:f5e189c62bcb | 186 | void Encode8(uint8_t); |
| Diletant | 72:f5e189c62bcb | 187 | void Encode16(uint16_t); |
| Diletant | 72:f5e189c62bcb | 188 | void EncodeDeviceMode(void); |
| Diletant | 72:f5e189c62bcb | 189 | void EncodeSysRgR(void); |
| Diletant | 72:f5e189c62bcb | 190 | void EncodeCRC(void); |
| Diletant | 72:f5e189c62bcb | 191 | |
| Diletant | 54:d94145ba23f4 | 192 | #endif /* __DEVICEPROTOCOL_H__ */ |
