123
Fork of LG by
DeviceUserProtocolDecoder.c@166:c3c0b8a90d81, 2016-05-22 (annotated)
- Committer:
- Diletant
- Date:
- Sun May 22 18:59:20 2016 +0000
- Revision:
- 166:c3c0b8a90d81
- Parent:
- 161:efd949e8d536
- Child:
- 167:bedc0a9d559a
Device & ... update. Not final!!!
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Diletant | 161:efd949e8d536 | 1 | #include "Device.h" |
Diletant | 161:efd949e8d536 | 2 | |
Diletant | 161:efd949e8d536 | 3 | extern Device device; |
Diletant | 161:efd949e8d536 | 4 | extern HashParam hashParamTable[HASH_PARAM_COUNT]; |
Diletant | 161:efd949e8d536 | 5 | extern HashFunc hashFuncTable[HASH_FUNC_COUNT]; |
Diletant | 161:efd949e8d536 | 6 | |
Diletant | 161:efd949e8d536 | 7 | void InitUserProtocolDecoder(void) { |
Diletant | 161:efd949e8d536 | 8 | device.user.decoder.error = 0; |
Diletant | 161:efd949e8d536 | 9 | device.user.decoder.count = 0; |
Diletant | 161:efd949e8d536 | 10 | device.user.decoder.canceled = 1; |
Diletant | 161:efd949e8d536 | 11 | device.user.decoder.address = 0; |
Diletant | 161:efd949e8d536 | 12 | device.user.decoder.version = 0; |
Diletant | 161:efd949e8d536 | 13 | device.user.decoder.code = 0; |
Diletant | 161:efd949e8d536 | 14 | device.user.decoder.position = 0; |
Diletant | 161:efd949e8d536 | 15 | device.user.decoder.CRC = 0; |
Diletant | 161:efd949e8d536 | 16 | } |
Diletant | 161:efd949e8d536 | 17 | |
Diletant | 161:efd949e8d536 | 18 | void DeviceDecodeUserRequests(void) { |
Diletant | 161:efd949e8d536 | 19 | do { |
Diletant | 161:efd949e8d536 | 20 | DecodeStart(); if (device.user.decoder.error) continue; |
Diletant | 161:efd949e8d536 | 21 | DecodeAddress(); if (device.user.decoder.error) continue; |
Diletant | 161:efd949e8d536 | 22 | DecodeCode(); if (device.user.decoder.error) continue; |
Diletant | 161:efd949e8d536 | 23 | switch(device.user.decoder.code){ |
Diletant | 161:efd949e8d536 | 24 | case FACTORY_ACCESS: DecodeFactory(); break; |
Diletant | 161:efd949e8d536 | 25 | case DEV_MODE: DecodeDeviceMode(); break; |
Diletant | 161:efd949e8d536 | 26 | case DELTA_BINS: DecodeDelta(); break; |
Diletant | 161:efd949e8d536 | 27 | case DELTA_PS: DecodeDelta(); break; |
Diletant | 161:efd949e8d536 | 28 | case DELTA_SF: DecodeDelta(); break; |
Diletant | 161:efd949e8d536 | 29 | case BIT_MODE: DecodeBITMode(); break; |
Diletant | 161:efd949e8d536 | 30 | case MAINTENANCE: DecodeMaintenanceMode(); break; |
Diletant | 161:efd949e8d536 | 31 | case M0_BASIC: DecodeMBasic(); break; |
Diletant | 161:efd949e8d536 | 32 | case M0_RATE: DecodeMRate(); break; |
Diletant | 161:efd949e8d536 | 33 | case M0_STIMUL: DecodeMStymul(); break; |
Diletant | 161:efd949e8d536 | 34 | case M0_RESET: DecodeMReset(); break; |
Diletant | 161:efd949e8d536 | 35 | case M0_TMP_W: DecodeMTmpW(); break; |
Diletant | 161:efd949e8d536 | 36 | case M0_TMP_R: DecodeMTmpR(); break; |
Diletant | 161:efd949e8d536 | 37 | //case M0_E5R_W: break; |
Diletant | 161:efd949e8d536 | 38 | //case M0_ADC_R: break; |
Diletant | 161:efd949e8d536 | 39 | //case M0_VIB_W: break; |
Diletant | 161:efd949e8d536 | 40 | //case M0_CNT_R: break; |
Diletant | 161:efd949e8d536 | 41 | case M0_GPH_W: DecodeMGphW(); break; |
Diletant | 161:efd949e8d536 | 42 | //case M0_FLG_R: break; |
Diletant | 161:efd949e8d536 | 43 | case M0_PARAM_W: DecodeMParamW(); break; |
Diletant | 161:efd949e8d536 | 44 | case M0_PARAM_R: DecodeMParamR(); break; |
Diletant | 161:efd949e8d536 | 45 | //case M0_E5RA_W: break; |
Diletant | 161:efd949e8d536 | 46 | default: DecodeFail(); |
Diletant | 161:efd949e8d536 | 47 | } |
Diletant | 161:efd949e8d536 | 48 | } while (device.user.decoder.count > 0); |
Diletant | 161:efd949e8d536 | 49 | } |
Diletant | 161:efd949e8d536 | 50 | |
Diletant | 161:efd949e8d536 | 51 | uint8_t Decode8(void) { |
Diletant | 161:efd949e8d536 | 52 | if (device.user.decoder.position != device.user.request.buffer.end) { |
Diletant | 161:efd949e8d536 | 53 | uint8_t param = device.user.request.buffer.data[device.user.decoder.position]; |
Diletant | 161:efd949e8d536 | 54 | |
Diletant | 161:efd949e8d536 | 55 | sprintf(device.service.buffer, "Decode8(): %02x %04d %04d %04d\r\n", param, device.user.decoder.position, device.user.request.buffer.start, device.user.request.buffer.end); WriteConcole(); //Development message |
Diletant | 161:efd949e8d536 | 56 | |
Diletant | 161:efd949e8d536 | 57 | device.user.decoder.position = (device.user.decoder.position + 1) % InputBufferSize; |
Diletant | 161:efd949e8d536 | 58 | device.user.decoder.count++; |
Diletant | 161:efd949e8d536 | 59 | device.user.decoder.CRC += param; |
Diletant | 161:efd949e8d536 | 60 | return param; |
Diletant | 161:efd949e8d536 | 61 | } else { |
Diletant | 161:efd949e8d536 | 62 | DecodeCancel(); |
Diletant | 161:efd949e8d536 | 63 | return 0; |
Diletant | 161:efd949e8d536 | 64 | } |
Diletant | 161:efd949e8d536 | 65 | } |
Diletant | 161:efd949e8d536 | 66 | |
Diletant | 161:efd949e8d536 | 67 | uint16_t Decode16(void) { |
Diletant | 161:efd949e8d536 | 68 | uint8_t hi = Decode8(); if (device.user.decoder.error) return 0; |
Diletant | 161:efd949e8d536 | 69 | uint8_t lo = Decode8(); if (device.user.decoder.error) return 0; |
Diletant | 161:efd949e8d536 | 70 | return (hi << 8) | lo; |
Diletant | 161:efd949e8d536 | 71 | } |
Diletant | 161:efd949e8d536 | 72 | |
Diletant | 161:efd949e8d536 | 73 | uint32_t Decode32(void) { |
Diletant | 161:efd949e8d536 | 74 | uint32_t b3 = Decode8(); if (device.user.decoder.error) return 0; |
Diletant | 161:efd949e8d536 | 75 | uint32_t b2 = Decode8(); if (device.user.decoder.error) return 0; |
Diletant | 161:efd949e8d536 | 76 | uint32_t b1 = Decode8(); if (device.user.decoder.error) return 0; |
Diletant | 161:efd949e8d536 | 77 | uint32_t b0 = Decode8(); if (device.user.decoder.error) return 0; |
Diletant | 161:efd949e8d536 | 78 | return (b3 << 24) | (b2 << 16) | (b1 << 8) | b0; |
Diletant | 161:efd949e8d536 | 79 | } |
Diletant | 161:efd949e8d536 | 80 | |
Diletant | 161:efd949e8d536 | 81 | void DecodeStart(void) { |
Diletant | 161:efd949e8d536 | 82 | if (device.user.decoder.canceled){ |
Diletant | 161:efd949e8d536 | 83 | DecodeCancel(); //Prevent next decode attempts until more data arrive |
Diletant | 161:efd949e8d536 | 84 | } else { |
Diletant | 161:efd949e8d536 | 85 | device.user.decoder.error = 0; |
Diletant | 161:efd949e8d536 | 86 | device.user.decoder.count = 0; |
Diletant | 161:efd949e8d536 | 87 | device.user.decoder.position = device.user.request.buffer.start; |
Diletant | 161:efd949e8d536 | 88 | device.user.response.enabled = 0; |
Diletant | 161:efd949e8d536 | 89 | uint8_t param = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 90 | |
Diletant | 161:efd949e8d536 | 91 | //sprintf(tmp,"DecodeStart()\r\n"); WriteConcole(tmp); //Development message |
Diletant | 161:efd949e8d536 | 92 | |
Diletant | 161:efd949e8d536 | 93 | if (param != 0xcc) DecodeFail(); |
Diletant | 161:efd949e8d536 | 94 | |
Diletant | 161:efd949e8d536 | 95 | device.user.response.type = RESPONSE_IMMEDIATE; //Default type |
Diletant | 161:efd949e8d536 | 96 | } |
Diletant | 161:efd949e8d536 | 97 | } |
Diletant | 161:efd949e8d536 | 98 | |
Diletant | 161:efd949e8d536 | 99 | void DecodeAddress(void) { |
Diletant | 161:efd949e8d536 | 100 | uint8_t address = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 101 | device.user.decoder.CRC = 0; |
Diletant | 161:efd949e8d536 | 102 | if ((address == device.user.address) || (address == BROADCAST_ADDRESS)) { |
Diletant | 161:efd949e8d536 | 103 | device.user.decoder.address = address; |
Diletant | 161:efd949e8d536 | 104 | } else { |
Diletant | 161:efd949e8d536 | 105 | DecodeFail(); |
Diletant | 161:efd949e8d536 | 106 | } |
Diletant | 161:efd949e8d536 | 107 | //sprintf(tmp,"DecodeAddress()\r\n"); WriteConcole(tmp); //Development message |
Diletant | 161:efd949e8d536 | 108 | } |
Diletant | 161:efd949e8d536 | 109 | |
Diletant | 161:efd949e8d536 | 110 | void DecodeCode(void) { |
Diletant | 161:efd949e8d536 | 111 | uint8_t code = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 112 | device.user.decoder.code = code << 8; |
Diletant | 161:efd949e8d536 | 113 | //sprintf(tmp,"DecodeCode()\r\n"); WriteConcole(tmp); //Development message |
Diletant | 161:efd949e8d536 | 114 | } |
Diletant | 161:efd949e8d536 | 115 | |
Diletant | 161:efd949e8d536 | 116 | void DecodeExtentionCode(void) { |
Diletant | 161:efd949e8d536 | 117 | uint8_t ext = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 118 | device.user.decoder.code |= ext; |
Diletant | 161:efd949e8d536 | 119 | //sprintf(tmp,"DecodeExtensionCode()\r\n"); WriteConcole(tmp); //Development message |
Diletant | 161:efd949e8d536 | 120 | } |
Diletant | 161:efd949e8d536 | 121 | |
Diletant | 161:efd949e8d536 | 122 | void DecodeEnd(void) { |
Diletant | 161:efd949e8d536 | 123 | //sprintf(tmp,"DecodeEnd()\r\n"); WriteConcole(tmp); //Development message |
Diletant | 161:efd949e8d536 | 124 | |
Diletant | 161:efd949e8d536 | 125 | device.user.request.buffer.start = (device.user.request.buffer.start + device.user.decoder.count) % InputBufferSize; |
Diletant | 161:efd949e8d536 | 126 | if (device.user.request.buffer.start == device.user.request.buffer.end) device.user.request.buffer.empty = 1; |
Diletant | 161:efd949e8d536 | 127 | |
Diletant | 161:efd949e8d536 | 128 | device.user.decoder.count = 0; |
Diletant | 161:efd949e8d536 | 129 | if (device.user.decoder.error == 0) { |
Diletant | 161:efd949e8d536 | 130 | device.user.response.code = device.user.decoder.code; |
Diletant | 161:efd949e8d536 | 131 | |
Diletant | 161:efd949e8d536 | 132 | if (device.user.decoder.address == BROADCAST_ADDRESS) { |
Diletant | 161:efd949e8d536 | 133 | device.user.response.type = RESPONSE_DELAYED; |
Diletant | 161:efd949e8d536 | 134 | device.user.response.counter = 0; |
Diletant | 161:efd949e8d536 | 135 | device.user.response.trigger = BROADCAST_FRAME * device.user.address; //0/100/200 mks |
Diletant | 161:efd949e8d536 | 136 | } |
Diletant | 161:efd949e8d536 | 137 | |
Diletant | 161:efd949e8d536 | 138 | device.user.response.enabled = 1; |
Diletant | 161:efd949e8d536 | 139 | } |
Diletant | 161:efd949e8d536 | 140 | } |
Diletant | 161:efd949e8d536 | 141 | |
Diletant | 161:efd949e8d536 | 142 | void DecodeCancel(void) { |
Diletant | 161:efd949e8d536 | 143 | device.user.decoder.error = 1; |
Diletant | 161:efd949e8d536 | 144 | device.user.decoder.canceled = 1; //Set canceled flag: do not try to decode until new data arrive |
Diletant | 161:efd949e8d536 | 145 | device.user.decoder.count = 0; |
Diletant | 161:efd949e8d536 | 146 | } |
Diletant | 161:efd949e8d536 | 147 | |
Diletant | 161:efd949e8d536 | 148 | void DecodeFail(void) { |
Diletant | 161:efd949e8d536 | 149 | //sprintf(tmp,"DecodeFail()\r\n"); WriteConcole(tmp); //Development message |
Diletant | 161:efd949e8d536 | 150 | |
Diletant | 161:efd949e8d536 | 151 | device.user.decoder.error = 2; |
Diletant | 161:efd949e8d536 | 152 | device.user.decoder.count = 1; |
Diletant | 161:efd949e8d536 | 153 | DecodeEnd(); |
Diletant | 161:efd949e8d536 | 154 | } |
Diletant | 161:efd949e8d536 | 155 | |
Diletant | 161:efd949e8d536 | 156 | void DecodeCRC(void) { |
Diletant | 161:efd949e8d536 | 157 | uint16_t CRC = device.user.decoder.CRC; |
Diletant | 161:efd949e8d536 | 158 | //sprintf(tmp,"CS1 %4x\r\n", device.host.decoder.CRC); WriteConcole(tmp); //Development message |
Diletant | 161:efd949e8d536 | 159 | |
Diletant | 161:efd949e8d536 | 160 | device.user.decoder.CRC = Decode16(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 161 | //sprintf(tmp,"CS2 %4x\r\n", device.host.decoder.CRC); WriteConcole(tmp); //Development message |
Diletant | 161:efd949e8d536 | 162 | |
Diletant | 161:efd949e8d536 | 163 | if (CRC == device.user.decoder.CRC) |
Diletant | 161:efd949e8d536 | 164 | DecodeEnd(); |
Diletant | 161:efd949e8d536 | 165 | else |
Diletant | 161:efd949e8d536 | 166 | DecodeFail(); |
Diletant | 161:efd949e8d536 | 167 | } |
Diletant | 161:efd949e8d536 | 168 | |
Diletant | 161:efd949e8d536 | 169 | void DecodeHashParam(uint32_t * size, void ** ref) { |
Diletant | 161:efd949e8d536 | 170 | uint32_t hash = Decode32(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 171 | for (uint32_t i = 0; i < HASH_PARAM_COUNT; i++){ |
Diletant | 161:efd949e8d536 | 172 | if (hashParamTable[i].hash == hash){ |
Diletant | 161:efd949e8d536 | 173 | *ref = hashParamTable[i].ref; |
Diletant | 161:efd949e8d536 | 174 | *size = hashParamTable[i].size; |
Diletant | 161:efd949e8d536 | 175 | return; |
Diletant | 161:efd949e8d536 | 176 | } |
Diletant | 161:efd949e8d536 | 177 | } |
Diletant | 161:efd949e8d536 | 178 | DecodeFail(); |
Diletant | 161:efd949e8d536 | 179 | } |
Diletant | 161:efd949e8d536 | 180 | |
Diletant | 161:efd949e8d536 | 181 | void DecodeFactoryReadParam(void) { |
Diletant | 161:efd949e8d536 | 182 | void * ref; |
Diletant | 161:efd949e8d536 | 183 | uint32_t size; |
Diletant | 161:efd949e8d536 | 184 | |
Diletant | 161:efd949e8d536 | 185 | DecodeHashParam(&size, &ref); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 186 | switch (device.user.decoder.code & 0x0f) { |
Diletant | 161:efd949e8d536 | 187 | //Read 8 bit |
Diletant | 161:efd949e8d536 | 188 | case 0x00: |
Diletant | 161:efd949e8d536 | 189 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 190 | device.user.response.parametersCount = 1; |
Diletant | 161:efd949e8d536 | 191 | device.user.response.parameters[0].ref = ref; |
Diletant | 161:efd949e8d536 | 192 | device.user.response.parameters[0].size = size; |
Diletant | 161:efd949e8d536 | 193 | device.user.response.message = MESSAGE_OK; |
Diletant | 161:efd949e8d536 | 194 | break; |
Diletant | 161:efd949e8d536 | 195 | //Read 16 bit |
Diletant | 161:efd949e8d536 | 196 | case 0x01: |
Diletant | 161:efd949e8d536 | 197 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 198 | device.user.response.parametersCount = 1; |
Diletant | 161:efd949e8d536 | 199 | device.user.response.parameters[0].ref = ref; |
Diletant | 161:efd949e8d536 | 200 | device.user.response.parameters[0].size = size; |
Diletant | 161:efd949e8d536 | 201 | device.user.response.message = MESSAGE_OK; |
Diletant | 161:efd949e8d536 | 202 | break; |
Diletant | 161:efd949e8d536 | 203 | //Read 32 bit |
Diletant | 161:efd949e8d536 | 204 | case 0x03: |
Diletant | 161:efd949e8d536 | 205 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 206 | device.user.response.parametersCount = 1; |
Diletant | 161:efd949e8d536 | 207 | device.user.response.parameters[0].ref = ref; |
Diletant | 161:efd949e8d536 | 208 | device.user.response.parameters[0].size = size; |
Diletant | 161:efd949e8d536 | 209 | device.user.response.message = MESSAGE_OK; |
Diletant | 161:efd949e8d536 | 210 | break; |
Diletant | 161:efd949e8d536 | 211 | //Read array |
Diletant | 161:efd949e8d536 | 212 | case 0x0f: |
Diletant | 161:efd949e8d536 | 213 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 214 | device.user.response.parametersCount = 1; |
Diletant | 161:efd949e8d536 | 215 | device.user.response.parameters[0].ref = ref; |
Diletant | 161:efd949e8d536 | 216 | device.user.response.parameters[0].size = size; |
Diletant | 161:efd949e8d536 | 217 | device.user.response.message = MESSAGE_OK; |
Diletant | 161:efd949e8d536 | 218 | break; |
Diletant | 161:efd949e8d536 | 219 | default: |
Diletant | 161:efd949e8d536 | 220 | DecodeFail(); |
Diletant | 161:efd949e8d536 | 221 | device.user.response.message = MESSAGE_UNKNOWN_REQUEST_CODE; |
Diletant | 161:efd949e8d536 | 222 | device.user.response.parametersCount = 0; |
Diletant | 161:efd949e8d536 | 223 | } |
Diletant | 161:efd949e8d536 | 224 | } |
Diletant | 161:efd949e8d536 | 225 | |
Diletant | 161:efd949e8d536 | 226 | void DecodeFactoryWriteParam(void) { |
Diletant | 161:efd949e8d536 | 227 | void * ref; |
Diletant | 161:efd949e8d536 | 228 | uint32_t size; |
Diletant | 161:efd949e8d536 | 229 | uint8_t param8; |
Diletant | 161:efd949e8d536 | 230 | uint16_t param16; |
Diletant | 161:efd949e8d536 | 231 | uint32_t param32; |
Diletant | 161:efd949e8d536 | 232 | |
Diletant | 161:efd949e8d536 | 233 | DecodeHashParam(&size, &ref); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 234 | switch (device.user.decoder.code & 0x0f) { |
Diletant | 161:efd949e8d536 | 235 | //Write 8 bit |
Diletant | 161:efd949e8d536 | 236 | case 0x00: |
Diletant | 161:efd949e8d536 | 237 | param8 = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 238 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 239 | *((uint8_t *)ref) = param8; |
Diletant | 161:efd949e8d536 | 240 | device.user.response.message = MESSAGE_OK; |
Diletant | 161:efd949e8d536 | 241 | device.user.response.parametersCount = 0; |
Diletant | 161:efd949e8d536 | 242 | break; |
Diletant | 161:efd949e8d536 | 243 | //Write 16 bit |
Diletant | 161:efd949e8d536 | 244 | case 0x01: |
Diletant | 161:efd949e8d536 | 245 | param16 = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 246 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 247 | *((uint16_t *)ref) = param16; |
Diletant | 161:efd949e8d536 | 248 | device.user.response.message = MESSAGE_OK; |
Diletant | 161:efd949e8d536 | 249 | device.user.response.parametersCount = 0; |
Diletant | 161:efd949e8d536 | 250 | break; |
Diletant | 161:efd949e8d536 | 251 | //Write 32 bit |
Diletant | 161:efd949e8d536 | 252 | case 0x03: |
Diletant | 161:efd949e8d536 | 253 | param32 = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 254 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 255 | *((uint32_t *)ref) = param32; |
Diletant | 161:efd949e8d536 | 256 | device.user.response.message = MESSAGE_OK; |
Diletant | 161:efd949e8d536 | 257 | device.user.response.parametersCount = 0; |
Diletant | 161:efd949e8d536 | 258 | break; |
Diletant | 161:efd949e8d536 | 259 | //Write array |
Diletant | 161:efd949e8d536 | 260 | case 0x0f: |
Diletant | 161:efd949e8d536 | 261 | param16 = Decode16(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 262 | for (uint16_t i = 0; i < param16; i++){ |
Diletant | 161:efd949e8d536 | 263 | param8 = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 264 | *(((uint8_t *)ref + i)) = param8; |
Diletant | 161:efd949e8d536 | 265 | } |
Diletant | 161:efd949e8d536 | 266 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 267 | device.user.response.message = MESSAGE_OK; |
Diletant | 161:efd949e8d536 | 268 | device.user.response.parametersCount = 0; |
Diletant | 161:efd949e8d536 | 269 | break; |
Diletant | 161:efd949e8d536 | 270 | default: |
Diletant | 161:efd949e8d536 | 271 | DecodeFail(); |
Diletant | 161:efd949e8d536 | 272 | device.user.response.message = MESSAGE_UNKNOWN_REQUEST_CODE; |
Diletant | 161:efd949e8d536 | 273 | device.user.response.parametersCount = 0; |
Diletant | 161:efd949e8d536 | 274 | } |
Diletant | 161:efd949e8d536 | 275 | } |
Diletant | 161:efd949e8d536 | 276 | |
Diletant | 161:efd949e8d536 | 277 | void DecodeFactoryFunctionCall(uint16_t parametersLength) { |
Diletant | 161:efd949e8d536 | 278 | uint32_t hash = Decode32(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 279 | for (uint32_t i = 0; i < HASH_FUNC_COUNT; i++){ |
Diletant | 161:efd949e8d536 | 280 | if (hashFuncTable[i].hash == hash){ |
Diletant | 161:efd949e8d536 | 281 | void * ref = hashFuncTable[i].ref; |
Diletant | 161:efd949e8d536 | 282 | uint32_t resultSize = hashFuncTable[i].resultSize; |
Diletant | 161:efd949e8d536 | 283 | uint32_t paramCount = hashFuncTable[i].paramCount; |
Diletant | 161:efd949e8d536 | 284 | if (paramCount == parametersLength){ |
Diletant | 161:efd949e8d536 | 285 | if (paramCount == 0){ |
Diletant | 161:efd949e8d536 | 286 | //FunctionCall(ref); |
Diletant | 161:efd949e8d536 | 287 | ((void (*)())ref)(); |
Diletant | 161:efd949e8d536 | 288 | return; |
Diletant | 161:efd949e8d536 | 289 | } else if (paramCount == 1){ |
Diletant | 161:efd949e8d536 | 290 | ((void (*)())ref)(device.user.decoder.param0); |
Diletant | 161:efd949e8d536 | 291 | return; |
Diletant | 161:efd949e8d536 | 292 | } else if (paramCount == 2){ |
Diletant | 161:efd949e8d536 | 293 | ((void (*)())ref)(device.user.decoder.param0, device.user.decoder.param1); |
Diletant | 161:efd949e8d536 | 294 | return; |
Diletant | 161:efd949e8d536 | 295 | } else if (paramCount == 3){ |
Diletant | 161:efd949e8d536 | 296 | ((void (*)())ref)(device.user.decoder.param0, device.user.decoder.param1, device.user.decoder.param2); |
Diletant | 161:efd949e8d536 | 297 | return; |
Diletant | 161:efd949e8d536 | 298 | } else if (paramCount == 4){ |
Diletant | 161:efd949e8d536 | 299 | ((void (*)())ref)(device.user.decoder.param0, device.user.decoder.param1, device.user.decoder.param2, device.user.decoder.param3); |
Diletant | 161:efd949e8d536 | 300 | return; |
Diletant | 161:efd949e8d536 | 301 | } |
Diletant | 161:efd949e8d536 | 302 | } |
Diletant | 161:efd949e8d536 | 303 | } |
Diletant | 161:efd949e8d536 | 304 | } |
Diletant | 161:efd949e8d536 | 305 | DecodeFail(); |
Diletant | 161:efd949e8d536 | 306 | } |
Diletant | 161:efd949e8d536 | 307 | |
Diletant | 161:efd949e8d536 | 308 | void DecodeFactory(void) { |
Diletant | 161:efd949e8d536 | 309 | //sprintf(tmp," DecodeFactory()\r\n"); WriteConcole(tmp); //Development message |
Diletant | 161:efd949e8d536 | 310 | DecodeExtentionCode(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 311 | |
Diletant | 161:efd949e8d536 | 312 | switch (device.user.decoder.code & 0xf0) { |
Diletant | 161:efd949e8d536 | 313 | //Read param |
Diletant | 161:efd949e8d536 | 314 | case 0x00: |
Diletant | 161:efd949e8d536 | 315 | DecodeFactoryReadParam(); |
Diletant | 161:efd949e8d536 | 316 | break; |
Diletant | 161:efd949e8d536 | 317 | //Write param |
Diletant | 161:efd949e8d536 | 318 | case 0x10: |
Diletant | 161:efd949e8d536 | 319 | DecodeFactoryWriteParam(); |
Diletant | 161:efd949e8d536 | 320 | break; |
Diletant | 161:efd949e8d536 | 321 | //Set function parameter by immediate value |
Diletant | 161:efd949e8d536 | 322 | case 0x20: |
Diletant | 161:efd949e8d536 | 323 | break; |
Diletant | 161:efd949e8d536 | 324 | //Set function parameter by variable value |
Diletant | 161:efd949e8d536 | 325 | case 0x30: |
Diletant | 161:efd949e8d536 | 326 | break; |
Diletant | 161:efd949e8d536 | 327 | //Set function parameter by variable reference |
Diletant | 161:efd949e8d536 | 328 | case 0x40: |
Diletant | 161:efd949e8d536 | 329 | break; |
Diletant | 161:efd949e8d536 | 330 | //Call function - no parameters |
Diletant | 161:efd949e8d536 | 331 | case 0x50: |
Diletant | 161:efd949e8d536 | 332 | case 0x51: |
Diletant | 161:efd949e8d536 | 333 | case 0x52: |
Diletant | 161:efd949e8d536 | 334 | case 0x53: |
Diletant | 161:efd949e8d536 | 335 | case 0x54: |
Diletant | 161:efd949e8d536 | 336 | DecodeFactoryFunctionCall(device.user.decoder.code & 0x0f); |
Diletant | 161:efd949e8d536 | 337 | break; |
Diletant | 161:efd949e8d536 | 338 | //Read flash |
Diletant | 161:efd949e8d536 | 339 | case 0x60: |
Diletant | 161:efd949e8d536 | 340 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 341 | DeviceFlashReadAll(); |
Diletant | 161:efd949e8d536 | 342 | device.user.response.message = MESSAGE_OK; |
Diletant | 161:efd949e8d536 | 343 | device.user.response.parametersCount = 0; |
Diletant | 161:efd949e8d536 | 344 | break; |
Diletant | 161:efd949e8d536 | 345 | //Write flash |
Diletant | 161:efd949e8d536 | 346 | case 0x70: |
Diletant | 161:efd949e8d536 | 347 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 348 | DeviceFlashWriteAll(); |
Diletant | 161:efd949e8d536 | 349 | device.user.response.message = MESSAGE_OK; |
Diletant | 161:efd949e8d536 | 350 | device.user.response.parametersCount = 0; |
Diletant | 161:efd949e8d536 | 351 | break; |
Diletant | 161:efd949e8d536 | 352 | default: |
Diletant | 161:efd949e8d536 | 353 | DecodeFail(); |
Diletant | 161:efd949e8d536 | 354 | device.user.response.message = MESSAGE_UNKNOWN_REQUEST_CODE; |
Diletant | 161:efd949e8d536 | 355 | } |
Diletant | 161:efd949e8d536 | 356 | } |
Diletant | 161:efd949e8d536 | 357 | |
Diletant | 161:efd949e8d536 | 358 | void DecodeDeviceMode(void) { |
Diletant | 161:efd949e8d536 | 359 | /* |
Diletant | 161:efd949e8d536 | 360 | *** Description *** |
Diletant | 161:efd949e8d536 | 361 | Elio5_cmd_en.pdf: |
Diletant | 161:efd949e8d536 | 362 | Device_Mode - device operating modes: |
Diletant | 161:efd949e8d536 | 363 | The device operating mode is encoded by 4 low bits (0..3) of byte 4. |
Diletant | 161:efd949e8d536 | 364 | 0 – reserved; |
Diletant | 161:efd949e8d536 | 365 | 1 – internal latch mode: latch by pulses 10 kHz (power on default mode); |
Diletant | 161:efd949e8d536 | 366 | 2 - internal latch mode: latch by signed meander pulses; |
Diletant | 161:efd949e8d536 | 367 | 3 – external latch mode with B_Delta_PS format data and RS422 request by command B_Delta_PS; |
Diletant | 161:efd949e8d536 | 368 | 4 – external latch mode with B_Delta_PS format data and latch pulse request; |
Diletant | 161:efd949e8d536 | 369 | 5 – external latch mode with B_Delta_BINS format data and RS422 request by command B_Delta_BINS; |
Diletant | 161:efd949e8d536 | 370 | 6 – external latch mode with B_Delta_BINS format data and latch pulse request; |
Diletant | 161:efd949e8d536 | 371 | |
Diletant | 161:efd949e8d536 | 372 | *** Command action *** |
Diletant | 161:efd949e8d536 | 373 | commandset_asm.asm - exec_CMD: |
Diletant | 161:efd949e8d536 | 374 | CMD_Mode = 3; |
Diletant | 161:efd949e8d536 | 375 | |
Diletant | 161:efd949e8d536 | 376 | commandset.c - B_Dev_Mode(void): |
Diletant | 161:efd949e8d536 | 377 | Device_Mode = rcv_buf[3] & 0x00ff; //e. read the byte of command parameter from the receiver buffer and write it to the counter mode register //r. и записываем в регистр режима счетчиков |
Diletant | 161:efd949e8d536 | 378 | trm_cycl = 0; //e. periodic data transmission is not needed //r. периодическая передача ответа не требуется |
Diletant | 161:efd949e8d536 | 379 | |
Diletant | 161:efd949e8d536 | 380 | commandset_asm.asm - Mk_AskDev(): |
Diletant | 161:efd949e8d536 | 381 | num_of_par = 2; //e. 2 parameters output //r. выводить два параметра |
Diletant | 161:efd949e8d536 | 382 | addr_param[0] = &Device_Mode; //e. address of the counter mode register (intenal latch, external latch, etc.) //r. адрес регистра режима счетчиков (внутр., внешняя защелка и т.д.) |
Diletant | 161:efd949e8d536 | 383 | addr_param[1] = &SRgR; //e. address of the mode register of the processor card //r. адрес регистра режима платы процессора |
Diletant | 161:efd949e8d536 | 384 | size_param[0] = 2; //e. size of the counter mode register - 2 bytes //r. размер регистра режима счетчиков - 2 байта |
Diletant | 161:efd949e8d536 | 385 | size_param[1] = 2; //e. size of the mode register of the processor card //r. размер регистра режима платы процессора |
Diletant | 161:efd949e8d536 | 386 | trm_cycl = 0; //e. forbid cyclic transmission of the parameter //r. запретить передачу параметра в цикле |
Diletant | 161:efd949e8d536 | 387 | trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика |
Diletant | 161:efd949e8d536 | 388 | */ |
Diletant | 161:efd949e8d536 | 389 | uint8_t mode = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 390 | if ((mode > 0) && (mode < 7)){ |
Diletant | 161:efd949e8d536 | 391 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 392 | switch (mode) { |
Diletant | 161:efd949e8d536 | 393 | case 1: device.latch.mode = DeviceLatch10kHz; break; |
Diletant | 161:efd949e8d536 | 394 | case 2: device.latch.mode = DeviceLatchMeander; break; |
Diletant | 161:efd949e8d536 | 395 | case 3: device.latch.mode = DeviceLatchRS422; device.latch.format = DeviceLatchFormatDeltaPS; break; |
Diletant | 161:efd949e8d536 | 396 | case 4: device.latch.mode = DeviceLatchPin; device.latch.format = DeviceLatchFormatDeltaPS; break; |
Diletant | 161:efd949e8d536 | 397 | case 5: device.latch.mode = DeviceLatchRS422; device.latch.format = DeviceLatchFormatDeltaBINS; break; |
Diletant | 161:efd949e8d536 | 398 | case 6: device.latch.mode = DeviceLatchPin; device.latch.format = DeviceLatchFormatDeltaBINS; break; |
Diletant | 161:efd949e8d536 | 399 | } |
Diletant | 161:efd949e8d536 | 400 | //device.host.response.type = RESPONSE_IMMEDIATE; //Default type |
Diletant | 161:efd949e8d536 | 401 | } else { |
Diletant | 161:efd949e8d536 | 402 | DecodeFail(); |
Diletant | 161:efd949e8d536 | 403 | } |
Diletant | 161:efd949e8d536 | 404 | } |
Diletant | 161:efd949e8d536 | 405 | |
Diletant | 161:efd949e8d536 | 406 | void DecodeBITMode(void) { |
Diletant | 161:efd949e8d536 | 407 | //In commandset.c - look as useless: set not used Is_BIT and BIT_Number variables |
Diletant | 161:efd949e8d536 | 408 | //Consume required amount of input: |
Diletant | 161:efd949e8d536 | 409 | Decode8(); if (device.user.decoder.error) return; //Is_BIT = 1/0; |
Diletant | 161:efd949e8d536 | 410 | Decode8(); if (device.user.decoder.error) return; //BIT_number = (long)(rcv_buf[4] & 0x00FF) << 24; |
Diletant | 161:efd949e8d536 | 411 | Decode8(); if (device.user.decoder.error) return; //BIT_number |= (long)(rcv_buf[5] & 0x00FF) << 16; |
Diletant | 161:efd949e8d536 | 412 | Decode8(); if (device.user.decoder.error) return; //BIT_number |= (long)(rcv_buf[6] & 0x00FF) << 8; |
Diletant | 161:efd949e8d536 | 413 | Decode8(); if (device.user.decoder.error) return; //BIT_number |= (long)(rcv_buf[7] & 0x00FF); |
Diletant | 161:efd949e8d536 | 414 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 415 | } |
Diletant | 161:efd949e8d536 | 416 | |
Diletant | 161:efd949e8d536 | 417 | void DecodeDelta(void) { |
Diletant | 161:efd949e8d536 | 418 | //Same for DELTA_PS,DELTA_BINS,DELTA_SF - only code different and it processed already |
Diletant | 161:efd949e8d536 | 419 | uint8_t mode = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 420 | //if ((mode && 0x0f) == 0){ //DELTA_PS,DELTA_BINS |
Diletant | 161:efd949e8d536 | 421 | if ((mode && 0x0e) == 0){ //DELTA_PS,DELTA_BINS,DELTA_SF |
Diletant | 161:efd949e8d536 | 422 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 423 | //SRgR bits 4-5 - reponse rate |
Diletant | 161:efd949e8d536 | 424 | switch ((mode >> 5) & 0x03){ |
Diletant | 161:efd949e8d536 | 425 | case 0: device.user.response.rate = 38400; break; |
Diletant | 161:efd949e8d536 | 426 | case 1: device.user.response.rate = 115200; break; |
Diletant | 161:efd949e8d536 | 427 | case 2: device.user.response.rate = 460800; break; |
Diletant | 161:efd949e8d536 | 428 | case 3: device.user.response.rate = 921600; break; |
Diletant | 161:efd949e8d536 | 429 | } |
Diletant | 161:efd949e8d536 | 430 | if (mode & 0x04) { |
Diletant | 161:efd949e8d536 | 431 | device.user.request.rate = device.user.response.rate; |
Diletant | 161:efd949e8d536 | 432 | } else { |
Diletant | 161:efd949e8d536 | 433 | device.user.request.rate = 38400; |
Diletant | 161:efd949e8d536 | 434 | } |
Diletant | 161:efd949e8d536 | 435 | if (mode & 0x01) { //DELTA_SF |
Diletant | 161:efd949e8d536 | 436 | device.latch.reset = 0; |
Diletant | 161:efd949e8d536 | 437 | } else { |
Diletant | 161:efd949e8d536 | 438 | device.latch.reset = 1; |
Diletant | 161:efd949e8d536 | 439 | } |
Diletant | 161:efd949e8d536 | 440 | //device.latch.mode = DeviceLatchRS422; //Have to set by Device Mode command? |
Diletant | 161:efd949e8d536 | 441 | if (device.user.response.code == DELTA_PS) device.latch.format = DeviceLatchFormatDeltaPS; |
Diletant | 161:efd949e8d536 | 442 | else if (device.user.response.code == DELTA_BINS) device.latch.format = DeviceLatchFormatDeltaBINS; |
Diletant | 161:efd949e8d536 | 443 | else if (device.user.response.code == DELTA_SF) device.latch.format = DeviceLatchFormatDeltaSF; |
Diletant | 161:efd949e8d536 | 444 | //TODO: Latch(); //Remember counters for transmission, reset counters |
Diletant | 161:efd949e8d536 | 445 | if (device.user.decoder.address == device.user.address) { |
Diletant | 161:efd949e8d536 | 446 | if (mode & 0x80) { |
Diletant | 161:efd949e8d536 | 447 | //TODO: reset device.counters here (or already done in Latch()) |
Diletant | 161:efd949e8d536 | 448 | device.user.response.counter = 0; |
Diletant | 161:efd949e8d536 | 449 | device.user.response.trigger = 2000; //2000 mks - 500Hz |
Diletant | 161:efd949e8d536 | 450 | device.user.response.type = RESPONSE_PERIODIC; //Override default type |
Diletant | 161:efd949e8d536 | 451 | device.user.response.packet = 0; |
Diletant | 161:efd949e8d536 | 452 | } |
Diletant | 161:efd949e8d536 | 453 | } |
Diletant | 161:efd949e8d536 | 454 | } else { |
Diletant | 161:efd949e8d536 | 455 | DecodeFail(); |
Diletant | 161:efd949e8d536 | 456 | } |
Diletant | 161:efd949e8d536 | 457 | } |
Diletant | 161:efd949e8d536 | 458 | |
Diletant | 161:efd949e8d536 | 459 | void DecodeMaintenanceMode(void) { |
Diletant | 161:efd949e8d536 | 460 | uint8_t version = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 461 | if (version == 0x99) { |
Diletant | 161:efd949e8d536 | 462 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 463 | device.user.decoder.version = 0; |
Diletant | 161:efd949e8d536 | 464 | } else { |
Diletant | 161:efd949e8d536 | 465 | DecodeFail(); |
Diletant | 161:efd949e8d536 | 466 | } |
Diletant | 161:efd949e8d536 | 467 | } |
Diletant | 161:efd949e8d536 | 468 | |
Diletant | 161:efd949e8d536 | 469 | void DecodeMBasic(void) { |
Diletant | 161:efd949e8d536 | 470 | DecodeExtentionCode(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 471 | switch (device.user.decoder.code) { |
Diletant | 161:efd949e8d536 | 472 | case M0_CLEAR: |
Diletant | 161:efd949e8d536 | 473 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 474 | DoMaintenanceClear(); |
Diletant | 161:efd949e8d536 | 475 | break; |
Diletant | 161:efd949e8d536 | 476 | case M0_MIRROR: |
Diletant | 161:efd949e8d536 | 477 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 478 | DoMaintenanceMirror(); |
Diletant | 161:efd949e8d536 | 479 | break; |
Diletant | 161:efd949e8d536 | 480 | case M0_LDPAR_F: |
Diletant | 161:efd949e8d536 | 481 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 482 | DeviceFlashReadAll(); |
Diletant | 161:efd949e8d536 | 483 | break; |
Diletant | 161:efd949e8d536 | 484 | case M0_LDPAR_D: |
Diletant | 161:efd949e8d536 | 485 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 486 | DeviceInitAllWithDefaults(); |
Diletant | 161:efd949e8d536 | 487 | break; |
Diletant | 161:efd949e8d536 | 488 | case M0_START: |
Diletant | 161:efd949e8d536 | 489 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 490 | DoMaintenanceStart(); |
Diletant | 161:efd949e8d536 | 491 | break; |
Diletant | 161:efd949e8d536 | 492 | case M0_STOP: |
Diletant | 161:efd949e8d536 | 493 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 494 | DoMaintenanceStop(); |
Diletant | 161:efd949e8d536 | 495 | break; |
Diletant | 161:efd949e8d536 | 496 | case M0_PULSE: |
Diletant | 161:efd949e8d536 | 497 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 498 | DeviceStartLightUp(); |
Diletant | 161:efd949e8d536 | 499 | break; |
Diletant | 161:efd949e8d536 | 500 | default: DecodeFail(); |
Diletant | 161:efd949e8d536 | 501 | } |
Diletant | 161:efd949e8d536 | 502 | } |
Diletant | 161:efd949e8d536 | 503 | |
Diletant | 161:efd949e8d536 | 504 | void DoMaintenanceClear(void) { |
Diletant | 161:efd949e8d536 | 505 | //TODO |
Diletant | 161:efd949e8d536 | 506 | } |
Diletant | 161:efd949e8d536 | 507 | |
Diletant | 161:efd949e8d536 | 508 | void DoMaintenanceMirror(void) { |
Diletant | 161:efd949e8d536 | 509 | //TODO |
Diletant | 161:efd949e8d536 | 510 | } |
Diletant | 161:efd949e8d536 | 511 | |
Diletant | 161:efd949e8d536 | 512 | void DoMaintenanceStart(void) { |
Diletant | 161:efd949e8d536 | 513 | //TODO |
Diletant | 161:efd949e8d536 | 514 | } |
Diletant | 161:efd949e8d536 | 515 | |
Diletant | 161:efd949e8d536 | 516 | void DoMaintenanceStop(void) { |
Diletant | 161:efd949e8d536 | 517 | //TODO |
Diletant | 161:efd949e8d536 | 518 | } |
Diletant | 161:efd949e8d536 | 519 | |
Diletant | 161:efd949e8d536 | 520 | void DecodeMRate(void) { |
Diletant | 161:efd949e8d536 | 521 | uint8_t mode = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 522 | if ((mode && 0x18) == 0){ |
Diletant | 161:efd949e8d536 | 523 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 524 | |
Diletant | 161:efd949e8d536 | 525 | device.user.response.code |= mode & 0x07; |
Diletant | 161:efd949e8d536 | 526 | |
Diletant | 161:efd949e8d536 | 527 | switch ((mode>>5) & 0x03) { |
Diletant | 161:efd949e8d536 | 528 | case 0: device.user.response.rate = 38400; break; |
Diletant | 161:efd949e8d536 | 529 | case 1: device.user.response.rate = 115200; break; |
Diletant | 161:efd949e8d536 | 530 | case 2: device.user.response.rate = 460800; break; |
Diletant | 161:efd949e8d536 | 531 | case 3: device.user.response.rate = 921600; break; |
Diletant | 161:efd949e8d536 | 532 | } |
Diletant | 161:efd949e8d536 | 533 | |
Diletant | 161:efd949e8d536 | 534 | if (mode & 0x80) { |
Diletant | 161:efd949e8d536 | 535 | //TODO: reset device.counters here |
Diletant | 161:efd949e8d536 | 536 | device.user.response.counter = 0; |
Diletant | 161:efd949e8d536 | 537 | switch (mode & 0x03) { |
Diletant | 161:efd949e8d536 | 538 | case 1: device.user.response.trigger = 1000000; break; //1 000 000 mks - 1Hz |
Diletant | 161:efd949e8d536 | 539 | case 2: device.user.response.trigger = 3276700; break; //??? |
Diletant | 161:efd949e8d536 | 540 | case 3: device.user.response.trigger = 100; break; //100 mks - 10000Hz |
Diletant | 161:efd949e8d536 | 541 | case 4: device.user.response.trigger = 800; break; //800 mks - 1250Hz |
Diletant | 161:efd949e8d536 | 542 | case 7: device.user.response.trigger = 800; break; //800 mks - 1250Hz |
Diletant | 161:efd949e8d536 | 543 | } |
Diletant | 161:efd949e8d536 | 544 | device.user.response.type = RESPONSE_PERIODIC; //Override default type |
Diletant | 161:efd949e8d536 | 545 | } |
Diletant | 161:efd949e8d536 | 546 | } else { |
Diletant | 161:efd949e8d536 | 547 | DecodeFail(); |
Diletant | 161:efd949e8d536 | 548 | } |
Diletant | 161:efd949e8d536 | 549 | } |
Diletant | 161:efd949e8d536 | 550 | |
Diletant | 161:efd949e8d536 | 551 | void DecodeMStymul(void) { |
Diletant | 161:efd949e8d536 | 552 | uint8_t param = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 553 | if ((param && 0x18) == 0){ |
Diletant | 161:efd949e8d536 | 554 | uint8_t hi = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 555 | uint8_t lo = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 556 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 557 | |
Diletant | 161:efd949e8d536 | 558 | device.user.decoder.code |= param & 0x04; |
Diletant | 161:efd949e8d536 | 559 | device.user.response.rate = 38400; |
Diletant | 161:efd949e8d536 | 560 | |
Diletant | 161:efd949e8d536 | 561 | device.user.response.enabled = (param & 0x80) >> 7; |
Diletant | 161:efd949e8d536 | 562 | |
Diletant | 161:efd949e8d536 | 563 | uint8_t channel = param & 0x03; |
Diletant | 161:efd949e8d536 | 564 | if (param & 0x04) { |
Diletant | 161:efd949e8d536 | 565 | uint32_t flags = (hi << 8) | lo; |
Diletant | 161:efd949e8d536 | 566 | //TODO: write flags - only flag register 0 defined |
Diletant | 161:efd949e8d536 | 567 | if (channel == 0){ |
Diletant | 161:efd949e8d536 | 568 | //Potentiometers data |
Diletant | 161:efd949e8d536 | 569 | if (flags & 0x01){ |
Diletant | 161:efd949e8d536 | 570 | } else { |
Diletant | 161:efd949e8d536 | 571 | } |
Diletant | 161:efd949e8d536 | 572 | //Potentiometers data input enable/disable flag |
Diletant | 161:efd949e8d536 | 573 | if (flags & 0x02){ |
Diletant | 161:efd949e8d536 | 574 | } else { |
Diletant | 161:efd949e8d536 | 575 | } |
Diletant | 161:efd949e8d536 | 576 | //Laser Up |
Diletant | 161:efd949e8d536 | 577 | if (flags & 0x03){ |
Diletant | 161:efd949e8d536 | 578 | } else { |
Diletant | 161:efd949e8d536 | 579 | } |
Diletant | 161:efd949e8d536 | 580 | //Software reper |
Diletant | 161:efd949e8d536 | 581 | if (flags & 0x04){ |
Diletant | 161:efd949e8d536 | 582 | } else { |
Diletant | 161:efd949e8d536 | 583 | } |
Diletant | 161:efd949e8d536 | 584 | } |
Diletant | 161:efd949e8d536 | 585 | } else { |
Diletant | 161:efd949e8d536 | 586 | uint32_t voltage = ((hi << 4) | (lo >> 4)); //TODO: do correct transformations |
Diletant | 161:efd949e8d536 | 587 | //TODO: write DAC |
Diletant | 161:efd949e8d536 | 588 | switch (channel){ |
Diletant | 161:efd949e8d536 | 589 | case 0://PLC regulator |
Diletant | 161:efd949e8d536 | 590 | break; |
Diletant | 161:efd949e8d536 | 591 | case 1://PLC modulator |
Diletant | 161:efd949e8d536 | 592 | break; |
Diletant | 161:efd949e8d536 | 593 | case 2://laser power regulator |
Diletant | 161:efd949e8d536 | 594 | break; |
Diletant | 161:efd949e8d536 | 595 | case 3://worms |
Diletant | 161:efd949e8d536 | 596 | break; |
Diletant | 161:efd949e8d536 | 597 | } |
Diletant | 161:efd949e8d536 | 598 | } |
Diletant | 161:efd949e8d536 | 599 | } else { |
Diletant | 161:efd949e8d536 | 600 | DecodeFail(); |
Diletant | 161:efd949e8d536 | 601 | } |
Diletant | 161:efd949e8d536 | 602 | } |
Diletant | 161:efd949e8d536 | 603 | |
Diletant | 161:efd949e8d536 | 604 | void DecodeMReset(void) { |
Diletant | 161:efd949e8d536 | 605 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 606 | |
Diletant | 161:efd949e8d536 | 607 | while (1); //Wait watch dog reset |
Diletant | 161:efd949e8d536 | 608 | } |
Diletant | 161:efd949e8d536 | 609 | |
Diletant | 161:efd949e8d536 | 610 | void DecodeMControlRead(void) { |
Diletant | 161:efd949e8d536 | 611 | uint8_t param = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 612 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 613 | |
Diletant | 161:efd949e8d536 | 614 | if (param & 60 == 0) |
Diletant | 161:efd949e8d536 | 615 | device.user.response.rate = 38400; |
Diletant | 161:efd949e8d536 | 616 | else |
Diletant | 161:efd949e8d536 | 617 | device.user.response.rate = 115200; |
Diletant | 161:efd949e8d536 | 618 | |
Diletant | 161:efd949e8d536 | 619 | device.user.response.code |= param & 0x10; |
Diletant | 161:efd949e8d536 | 620 | } |
Diletant | 161:efd949e8d536 | 621 | |
Diletant | 161:efd949e8d536 | 622 | void DecodeMControlWrite(void) { |
Diletant | 161:efd949e8d536 | 623 | uint8_t param = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 624 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 625 | |
Diletant | 161:efd949e8d536 | 626 | if (param & 60 == 0) |
Diletant | 161:efd949e8d536 | 627 | device.user.response.rate = 38400; |
Diletant | 161:efd949e8d536 | 628 | else |
Diletant | 161:efd949e8d536 | 629 | device.user.response.rate = 115200; |
Diletant | 161:efd949e8d536 | 630 | |
Diletant | 161:efd949e8d536 | 631 | uint8_t bit = param & 0x0f; |
Diletant | 161:efd949e8d536 | 632 | uint8_t value = param & 0x80 >> 7; |
Diletant | 161:efd949e8d536 | 633 | if (param & 0x10 == 0){ |
Diletant | 161:efd949e8d536 | 634 | //RgConA - flags of regulator loops |
Diletant | 161:efd949e8d536 | 635 | switch (bit){ |
Diletant | 161:efd949e8d536 | 636 | case 0://Laser switch |
Diletant | 161:efd949e8d536 | 637 | //TODO |
Diletant | 161:efd949e8d536 | 638 | break; |
Diletant | 161:efd949e8d536 | 639 | |
Diletant | 161:efd949e8d536 | 640 | case 1://HFO loop switch |
Diletant | 161:efd949e8d536 | 641 | device.isacs.regulator.state.enabled = value; |
Diletant | 161:efd949e8d536 | 642 | break; |
Diletant | 161:efd949e8d536 | 643 | |
Diletant | 161:efd949e8d536 | 644 | case 3://PLC loop switch |
Diletant | 161:efd949e8d536 | 645 | device.plcs.regulator.state.enabled = value; |
Diletant | 161:efd949e8d536 | 646 | break; |
Diletant | 161:efd949e8d536 | 647 | |
Diletant | 161:efd949e8d536 | 648 | case 4://Modulator switch |
Diletant | 166:c3c0b8a90d81 | 649 | //device.plcs.modulator.state.enabled = value; |
Diletant | 166:c3c0b8a90d81 | 650 | device.plcs.sequencer.state.enabled = value; |
Diletant | 161:efd949e8d536 | 651 | break; |
Diletant | 161:efd949e8d536 | 652 | |
Diletant | 161:efd949e8d536 | 653 | case 5://Dither drive pulse width/output frequency loop switch |
Diletant | 161:efd949e8d536 | 654 | device.dither.carrier.state.enabled = value; |
Diletant | 161:efd949e8d536 | 655 | break; |
Diletant | 161:efd949e8d536 | 656 | |
Diletant | 161:efd949e8d536 | 657 | case 6://Dither drive oscillation frequency loop switch |
Diletant | 161:efd949e8d536 | 658 | device.dither.oscillation.state.enabled = value; |
Diletant | 161:efd949e8d536 | 659 | break; |
Diletant | 161:efd949e8d536 | 660 | |
Diletant | 161:efd949e8d536 | 661 | case 7: //All loops switch |
Diletant | 161:efd949e8d536 | 662 | device.isacs.regulator.state.enabled = value; |
Diletant | 166:c3c0b8a90d81 | 663 | |
Diletant | 161:efd949e8d536 | 664 | device.plcs.regulator.state.enabled = value; |
Diletant | 166:c3c0b8a90d81 | 665 | |
Diletant | 166:c3c0b8a90d81 | 666 | //device.plcs.modulator.state.enabled = value; |
Diletant | 166:c3c0b8a90d81 | 667 | device.plcs.sequencer.state.enabled = value; |
Diletant | 166:c3c0b8a90d81 | 668 | |
Diletant | 161:efd949e8d536 | 669 | device.dither.carrier.state.enabled = value; |
Diletant | 166:c3c0b8a90d81 | 670 | |
Diletant | 161:efd949e8d536 | 671 | device.dither.oscillation.state.enabled = value; |
Diletant | 161:efd949e8d536 | 672 | break; |
Diletant | 161:efd949e8d536 | 673 | } |
Diletant | 161:efd949e8d536 | 674 | } else { |
Diletant | 161:efd949e8d536 | 675 | //RgConB - counting mode: 00 - reference counters, 01 - dither counters and moving average filter |
Diletant | 161:efd949e8d536 | 676 | switch (bit){ |
Diletant | 161:efd949e8d536 | 677 | case 0://Moving average filter |
Diletant | 161:efd949e8d536 | 678 | //TODO |
Diletant | 161:efd949e8d536 | 679 | break; |
Diletant | 161:efd949e8d536 | 680 | |
Diletant | 161:efd949e8d536 | 681 | case 1:// |
Diletant | 161:efd949e8d536 | 682 | //TODO |
Diletant | 161:efd949e8d536 | 683 | break; |
Diletant | 161:efd949e8d536 | 684 | |
Diletant | 161:efd949e8d536 | 685 | case 2:// |
Diletant | 161:efd949e8d536 | 686 | //TODO |
Diletant | 161:efd949e8d536 | 687 | break; |
Diletant | 161:efd949e8d536 | 688 | } |
Diletant | 161:efd949e8d536 | 689 | } |
Diletant | 161:efd949e8d536 | 690 | |
Diletant | 161:efd949e8d536 | 691 | device.user.response.code |= param & 0x10; |
Diletant | 161:efd949e8d536 | 692 | } |
Diletant | 161:efd949e8d536 | 693 | |
Diletant | 161:efd949e8d536 | 694 | void DecodeMADCR(void) { |
Diletant | 161:efd949e8d536 | 695 | //TODO |
Diletant | 161:efd949e8d536 | 696 | } |
Diletant | 161:efd949e8d536 | 697 | |
Diletant | 161:efd949e8d536 | 698 | void DecodeMTmpW(void) { |
Diletant | 161:efd949e8d536 | 699 | //Not compatible with new ADC |
Diletant | 161:efd949e8d536 | 700 | //Just consume required amount of input: |
Diletant | 161:efd949e8d536 | 701 | Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 702 | Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 703 | Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 704 | Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 705 | Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 706 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 707 | } |
Diletant | 161:efd949e8d536 | 708 | |
Diletant | 161:efd949e8d536 | 709 | void DecodeMTmpR(void) { |
Diletant | 161:efd949e8d536 | 710 | //Not compatible with new ADC |
Diletant | 161:efd949e8d536 | 711 | //Just consume required amount of input: |
Diletant | 161:efd949e8d536 | 712 | Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 713 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 714 | } |
Diletant | 161:efd949e8d536 | 715 | |
Diletant | 161:efd949e8d536 | 716 | void DecodeMe5rW(void) { |
Diletant | 161:efd949e8d536 | 717 | //TODO |
Diletant | 161:efd949e8d536 | 718 | } |
Diletant | 161:efd949e8d536 | 719 | |
Diletant | 161:efd949e8d536 | 720 | void DecodeMCntR(void) { |
Diletant | 161:efd949e8d536 | 721 | //TODO |
Diletant | 161:efd949e8d536 | 722 | } |
Diletant | 161:efd949e8d536 | 723 | |
Diletant | 161:efd949e8d536 | 724 | void DecodeMFlgR(void) { |
Diletant | 161:efd949e8d536 | 725 | //TODO |
Diletant | 161:efd949e8d536 | 726 | } |
Diletant | 161:efd949e8d536 | 727 | |
Diletant | 161:efd949e8d536 | 728 | void DecodeMVibW(void) { |
Diletant | 161:efd949e8d536 | 729 | //TODO |
Diletant | 161:efd949e8d536 | 730 | } |
Diletant | 161:efd949e8d536 | 731 | |
Diletant | 161:efd949e8d536 | 732 | void DecodeMGphW(void) { |
Diletant | 161:efd949e8d536 | 733 | uint8_t gainA = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 734 | uint8_t gainB = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 735 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 736 | device.isacs.potentiometers.state.a = gainA; |
Diletant | 161:efd949e8d536 | 737 | device.isacs.potentiometers.state.b = gainB; |
Diletant | 161:efd949e8d536 | 738 | DeviceISACSSetPotentiometers(); |
Diletant | 161:efd949e8d536 | 739 | } |
Diletant | 161:efd949e8d536 | 740 | |
Diletant | 161:efd949e8d536 | 741 | uint16_t GetCompatibilityValue(uint8_t index) { |
Diletant | 161:efd949e8d536 | 742 | |
Diletant | 161:efd949e8d536 | 743 | return 0; |
Diletant | 161:efd949e8d536 | 744 | } |
Diletant | 161:efd949e8d536 | 745 | |
Diletant | 161:efd949e8d536 | 746 | void DecodeMParamR(void) { |
Diletant | 161:efd949e8d536 | 747 | //TODO |
Diletant | 161:efd949e8d536 | 748 | uint8_t index = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 749 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 750 | |
Diletant | 161:efd949e8d536 | 751 | uint16_t param16; |
Diletant | 161:efd949e8d536 | 752 | switch (index){ |
Diletant | 161:efd949e8d536 | 753 | case 0: |
Diletant | 161:efd949e8d536 | 754 | param16 = device.user.address; |
Diletant | 161:efd949e8d536 | 755 | break; |
Diletant | 161:efd949e8d536 | 756 | |
Diletant | 161:efd949e8d536 | 757 | case 27: |
Diletant | 161:efd949e8d536 | 758 | case 28: |
Diletant | 161:efd949e8d536 | 759 | case 29: |
Diletant | 161:efd949e8d536 | 760 | case 30: |
Diletant | 161:efd949e8d536 | 761 | case 31: |
Diletant | 161:efd949e8d536 | 762 | case 32: |
Diletant | 161:efd949e8d536 | 763 | case 33: |
Diletant | 161:efd949e8d536 | 764 | case 34: |
Diletant | 161:efd949e8d536 | 765 | case 35: |
Diletant | 161:efd949e8d536 | 766 | case 36: |
Diletant | 161:efd949e8d536 | 767 | case 37: |
Diletant | 161:efd949e8d536 | 768 | case 38: |
Diletant | 161:efd949e8d536 | 769 | case 39: |
Diletant | 161:efd949e8d536 | 770 | case 40: |
Diletant | 161:efd949e8d536 | 771 | case 41: |
Diletant | 161:efd949e8d536 | 772 | case 42: |
Diletant | 161:efd949e8d536 | 773 | case 43: |
Diletant | 161:efd949e8d536 | 774 | break; |
Diletant | 161:efd949e8d536 | 775 | |
Diletant | 161:efd949e8d536 | 776 | case 61: |
Diletant | 161:efd949e8d536 | 777 | param16 = device.sensor.settings.id; |
Diletant | 161:efd949e8d536 | 778 | break; |
Diletant | 161:efd949e8d536 | 779 | |
Diletant | 161:efd949e8d536 | 780 | case 64: |
Diletant | 161:efd949e8d536 | 781 | case 65: |
Diletant | 161:efd949e8d536 | 782 | case 66: |
Diletant | 161:efd949e8d536 | 783 | case 67: |
Diletant | 161:efd949e8d536 | 784 | case 68: |
Diletant | 161:efd949e8d536 | 785 | case 69: |
Diletant | 161:efd949e8d536 | 786 | case 70: |
Diletant | 161:efd949e8d536 | 787 | case 71: |
Diletant | 161:efd949e8d536 | 788 | case 72: |
Diletant | 161:efd949e8d536 | 789 | case 73: |
Diletant | 161:efd949e8d536 | 790 | case 74: |
Diletant | 161:efd949e8d536 | 791 | case 75: |
Diletant | 161:efd949e8d536 | 792 | case 76: |
Diletant | 161:efd949e8d536 | 793 | case 77: |
Diletant | 161:efd949e8d536 | 794 | case 78: |
Diletant | 161:efd949e8d536 | 795 | case 79: |
Diletant | 161:efd949e8d536 | 796 | case 81: |
Diletant | 161:efd949e8d536 | 797 | case 82: |
Diletant | 161:efd949e8d536 | 798 | case 84: |
Diletant | 161:efd949e8d536 | 799 | case 85: |
Diletant | 161:efd949e8d536 | 800 | case 87: |
Diletant | 161:efd949e8d536 | 801 | case 88: |
Diletant | 161:efd949e8d536 | 802 | case 90: |
Diletant | 161:efd949e8d536 | 803 | case 91: |
Diletant | 161:efd949e8d536 | 804 | case 93: |
Diletant | 161:efd949e8d536 | 805 | case 94: |
Diletant | 161:efd949e8d536 | 806 | case 96: |
Diletant | 161:efd949e8d536 | 807 | case 97: |
Diletant | 161:efd949e8d536 | 808 | case 99: |
Diletant | 161:efd949e8d536 | 809 | case 100: |
Diletant | 161:efd949e8d536 | 810 | case 102: |
Diletant | 161:efd949e8d536 | 811 | case 103: |
Diletant | 161:efd949e8d536 | 812 | case 105: |
Diletant | 161:efd949e8d536 | 813 | case 106: |
Diletant | 161:efd949e8d536 | 814 | case 108: |
Diletant | 161:efd949e8d536 | 815 | case 109: |
Diletant | 161:efd949e8d536 | 816 | case 111: |
Diletant | 161:efd949e8d536 | 817 | case 112: |
Diletant | 161:efd949e8d536 | 818 | case 114: |
Diletant | 161:efd949e8d536 | 819 | case 115: |
Diletant | 161:efd949e8d536 | 820 | case 117: |
Diletant | 161:efd949e8d536 | 821 | case 118: |
Diletant | 161:efd949e8d536 | 822 | case 121: |
Diletant | 161:efd949e8d536 | 823 | case 122: |
Diletant | 161:efd949e8d536 | 824 | case 124: |
Diletant | 161:efd949e8d536 | 825 | case 125: |
Diletant | 161:efd949e8d536 | 826 | /*reserved*/ |
Diletant | 161:efd949e8d536 | 827 | break; |
Diletant | 161:efd949e8d536 | 828 | |
Diletant | 161:efd949e8d536 | 829 | default: DecodeFail(); |
Diletant | 161:efd949e8d536 | 830 | } |
Diletant | 161:efd949e8d536 | 831 | } |
Diletant | 161:efd949e8d536 | 832 | |
Diletant | 161:efd949e8d536 | 833 | void DecodeMParamW(void) { |
Diletant | 161:efd949e8d536 | 834 | uint8_t index = Decode8(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 835 | uint8_t param = Decode16(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 836 | DecodeCRC(); if (device.user.decoder.error) return; |
Diletant | 161:efd949e8d536 | 837 | |
Diletant | 161:efd949e8d536 | 838 | switch (index){ |
Diletant | 161:efd949e8d536 | 839 | case 0: |
Diletant | 161:efd949e8d536 | 840 | device.user.address = param; |
Diletant | 161:efd949e8d536 | 841 | break; |
Diletant | 161:efd949e8d536 | 842 | |
Diletant | 161:efd949e8d536 | 843 | case 27: |
Diletant | 161:efd949e8d536 | 844 | case 28: |
Diletant | 161:efd949e8d536 | 845 | case 29: |
Diletant | 161:efd949e8d536 | 846 | case 30: |
Diletant | 161:efd949e8d536 | 847 | case 31: |
Diletant | 161:efd949e8d536 | 848 | case 32: |
Diletant | 161:efd949e8d536 | 849 | case 33: |
Diletant | 161:efd949e8d536 | 850 | case 34: |
Diletant | 161:efd949e8d536 | 851 | case 35: |
Diletant | 161:efd949e8d536 | 852 | case 36: |
Diletant | 161:efd949e8d536 | 853 | case 37: |
Diletant | 161:efd949e8d536 | 854 | case 38: |
Diletant | 161:efd949e8d536 | 855 | case 39: |
Diletant | 161:efd949e8d536 | 856 | case 40: |
Diletant | 161:efd949e8d536 | 857 | case 41: |
Diletant | 161:efd949e8d536 | 858 | case 42: |
Diletant | 161:efd949e8d536 | 859 | case 43: |
Diletant | 161:efd949e8d536 | 860 | break; |
Diletant | 161:efd949e8d536 | 861 | |
Diletant | 161:efd949e8d536 | 862 | case 61: |
Diletant | 161:efd949e8d536 | 863 | device.sensor.settings.id = param; |
Diletant | 161:efd949e8d536 | 864 | break; |
Diletant | 161:efd949e8d536 | 865 | |
Diletant | 161:efd949e8d536 | 866 | case 64: |
Diletant | 161:efd949e8d536 | 867 | case 65: |
Diletant | 161:efd949e8d536 | 868 | case 66: |
Diletant | 161:efd949e8d536 | 869 | case 67: |
Diletant | 161:efd949e8d536 | 870 | case 68: |
Diletant | 161:efd949e8d536 | 871 | case 69: |
Diletant | 161:efd949e8d536 | 872 | case 70: |
Diletant | 161:efd949e8d536 | 873 | case 71: |
Diletant | 161:efd949e8d536 | 874 | case 72: |
Diletant | 161:efd949e8d536 | 875 | case 73: |
Diletant | 161:efd949e8d536 | 876 | case 74: |
Diletant | 161:efd949e8d536 | 877 | case 75: |
Diletant | 161:efd949e8d536 | 878 | case 76: |
Diletant | 161:efd949e8d536 | 879 | case 77: |
Diletant | 161:efd949e8d536 | 880 | case 78: |
Diletant | 161:efd949e8d536 | 881 | case 79: |
Diletant | 161:efd949e8d536 | 882 | case 81: |
Diletant | 161:efd949e8d536 | 883 | case 82: |
Diletant | 161:efd949e8d536 | 884 | case 84: |
Diletant | 161:efd949e8d536 | 885 | case 85: |
Diletant | 161:efd949e8d536 | 886 | case 87: |
Diletant | 161:efd949e8d536 | 887 | case 88: |
Diletant | 161:efd949e8d536 | 888 | case 90: |
Diletant | 161:efd949e8d536 | 889 | case 91: |
Diletant | 161:efd949e8d536 | 890 | case 93: |
Diletant | 161:efd949e8d536 | 891 | case 94: |
Diletant | 161:efd949e8d536 | 892 | case 96: |
Diletant | 161:efd949e8d536 | 893 | case 97: |
Diletant | 161:efd949e8d536 | 894 | case 99: |
Diletant | 161:efd949e8d536 | 895 | case 100: |
Diletant | 161:efd949e8d536 | 896 | case 102: |
Diletant | 161:efd949e8d536 | 897 | case 103: |
Diletant | 161:efd949e8d536 | 898 | case 105: |
Diletant | 161:efd949e8d536 | 899 | case 106: |
Diletant | 161:efd949e8d536 | 900 | case 108: |
Diletant | 161:efd949e8d536 | 901 | case 109: |
Diletant | 161:efd949e8d536 | 902 | case 111: |
Diletant | 161:efd949e8d536 | 903 | case 112: |
Diletant | 161:efd949e8d536 | 904 | case 114: |
Diletant | 161:efd949e8d536 | 905 | case 115: |
Diletant | 161:efd949e8d536 | 906 | case 117: |
Diletant | 161:efd949e8d536 | 907 | case 118: |
Diletant | 161:efd949e8d536 | 908 | case 121: |
Diletant | 161:efd949e8d536 | 909 | case 122: |
Diletant | 161:efd949e8d536 | 910 | case 124: |
Diletant | 161:efd949e8d536 | 911 | case 125: |
Diletant | 161:efd949e8d536 | 912 | /*reserved*/ |
Diletant | 161:efd949e8d536 | 913 | break; |
Diletant | 161:efd949e8d536 | 914 | |
Diletant | 161:efd949e8d536 | 915 | default: DecodeFail(); |
Diletant | 161:efd949e8d536 | 916 | } |
Diletant | 161:efd949e8d536 | 917 | } |
Diletant | 161:efd949e8d536 | 918 | |
Diletant | 161:efd949e8d536 | 919 | void DecodeMRate2(void) { |
Diletant | 161:efd949e8d536 | 920 | //TODO |
Diletant | 161:efd949e8d536 | 921 | } |
Diletant | 161:efd949e8d536 | 922 | |
Diletant | 161:efd949e8d536 | 923 | void DecodeMRate3(void) { |
Diletant | 161:efd949e8d536 | 924 | //TODO |
Diletant | 161:efd949e8d536 | 925 | } |
Diletant | 161:efd949e8d536 | 926 | |
Diletant | 161:efd949e8d536 | 927 | void DecodeMe5raW(void) { |
Diletant | 161:efd949e8d536 | 928 | //TODO |
Diletant | 161:efd949e8d536 | 929 | } |