123

Dependencies:   mbed

Fork of LG by igor Apu

Committer:
Diletant
Date:
Sun Jul 10 05:35:08 2016 +0000
Revision:
182:2bd8ec44998f
Parent:
DeviceUserProtocolEncoder.c@177:672ef279c8e0
Child:
183:c7a9c309086c
Device & ... update. More AskGld & Techno functionality. Not final!!!

Who changed what in which revision?

UserRevisionLine numberNew 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 182:2bd8ec44998f 7 void InitUserEncoderDefaultSettings(void) {
Diletant 167:bedc0a9d559a 8 }
Diletant 167:bedc0a9d559a 9
Diletant 182:2bd8ec44998f 10 void InitUserEncoderState(void) {
Diletant 161:efd949e8d536 11 device.user.encoder.error = 0;
Diletant 161:efd949e8d536 12 device.user.encoder.count = 0;
Diletant 161:efd949e8d536 13 device.user.encoder.CRC = 0;
Diletant 161:efd949e8d536 14 }
Diletant 161:efd949e8d536 15
Diletant 182:2bd8ec44998f 16 void DeviceStartUserEncoder(void) {
Diletant 167:bedc0a9d559a 17 }
Diletant 167:bedc0a9d559a 18
Diletant 161:efd949e8d536 19 //Next to LineDecode(), PinDecode()
Diletant 177:672ef279c8e0 20 void userEncodeResponse(void) {
Diletant 161:efd949e8d536 21 if (device.user.response.enabled) {
Diletant 182:2bd8ec44998f 22 if (device.user.response.type == RESPONSE_PERIODIC) {
Diletant 182:2bd8ec44998f 23 if (device.user.response.triggered)
Diletant 182:2bd8ec44998f 24 device.user.response.triggered = 0; //Clear trigger event. Here ok - encode response in one pass
Diletant 182:2bd8ec44998f 25 else
Diletant 182:2bd8ec44998f 26 return;
Diletant 182:2bd8ec44998f 27 }
Diletant 161:efd949e8d536 28
Diletant 161:efd949e8d536 29 switch(device.user.response.code){
Diletant 177:672ef279c8e0 30 case DEV_MODE: EncodeDeviceMode(); break;
Diletant 177:672ef279c8e0 31 case DELTA_BINS: EncodeDeltaBINS(); break;
Diletant 177:672ef279c8e0 32 case DELTA_PS: EncodeDeltaPS(); break;
Diletant 177:672ef279c8e0 33 case DELTA_SF: EncodeDeltaSF(); break;
Diletant 177:672ef279c8e0 34 case BIT_MODE: EncodeDeviceMode(); break; //Same response as DEV_MODE
Diletant 177:672ef279c8e0 35 case MAINTENANCE: EncodeMainMode(); break;
Diletant 177:672ef279c8e0 36 case M0_RATE_1: EncodeMRate(); break;
Diletant 182:2bd8ec44998f 37 case M0_PARAM_R: EncodeMParamR(); break;
Diletant 182:2bd8ec44998f 38 case M0_PARAM_W: EncodeMParamW(); break;
Diletant 177:672ef279c8e0 39 case M0_CTL_R: EncodeMCtlR(); break;
Diletant 177:672ef279c8e0 40 case M0_CTL_A_M: EncodeMCtlAM(); break;
Diletant 177:672ef279c8e0 41 case M0_CTL_B_M: EncodeMCtlBM(); break;
Diletant 177:672ef279c8e0 42 case M0_CNT_R: EncodeMCntR(); break;
Diletant 161:efd949e8d536 43 case M0_GPH_W: EncodeStart(); EncodeAddress(); Encode8(M0_GPH_W >> 8); Encode8(0); EncodeCRC(); break;
Diletant 161:efd949e8d536 44 case H_PARAM8_W:
Diletant 161:efd949e8d536 45 case H_PARAM16_W:
Diletant 161:efd949e8d536 46 case H_PARAM16_R:
Diletant 161:efd949e8d536 47 case H_PARAM32_W:
Diletant 161:efd949e8d536 48 case H_PARAM32_R:
Diletant 161:efd949e8d536 49 case H_BYTES_W:
Diletant 161:efd949e8d536 50 case H_BYTES_R:
Diletant 161:efd949e8d536 51 case FLASH_READ_ALL:
Diletant 161:efd949e8d536 52 case FLASH_WRITE_ALL:
Diletant 161:efd949e8d536 53 EncodeStart(); EncodeAddress(); Encode16(device.user.response.code); EncodeMessage(); if (device.user.response.message == 0) EncodeParameters(); EncodeCRC();
Diletant 161:efd949e8d536 54 break;
Diletant 161:efd949e8d536 55 default: EncodeFail();
Diletant 161:efd949e8d536 56 }
Diletant 161:efd949e8d536 57 }
Diletant 161:efd949e8d536 58 }
Diletant 161:efd949e8d536 59
Diletant 161:efd949e8d536 60 void Encode8(uint8_t param){
Diletant 161:efd949e8d536 61 device.user.response.buffer.data[device.user.response.buffer.count] = param;
Diletant 161:efd949e8d536 62 device.user.response.buffer.count += 1;
Diletant 161:efd949e8d536 63
Diletant 177:672ef279c8e0 64 //sprintf(device.service.buffer,"- %2x\r\n", param); WriteConcole(); //Development message
Diletant 161:efd949e8d536 65 }
Diletant 161:efd949e8d536 66
Diletant 161:efd949e8d536 67 void Encode16(uint16_t param) {
Diletant 161:efd949e8d536 68 Encode8((param >> 8) & 0xff);
Diletant 161:efd949e8d536 69 Encode8(param & 0xff);
Diletant 161:efd949e8d536 70 }
Diletant 161:efd949e8d536 71
Diletant 161:efd949e8d536 72 void EncodeStart(void) {
Diletant 161:efd949e8d536 73 device.user.response.ready = 0; //Disable transmission
Diletant 161:efd949e8d536 74 device.user.response.buffer.count = 0; //Clear buffer
Diletant 161:efd949e8d536 75 Encode8(0xdd); //Write response header code
Diletant 161:efd949e8d536 76 }
Diletant 161:efd949e8d536 77
Diletant 161:efd949e8d536 78 void EncodeEnd(void) {
Diletant 182:2bd8ec44998f 79 #ifdef DEBUG_ENCODER_OUTPUT
Diletant 182:2bd8ec44998f 80 static char h[16] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66};//0123456789abcdef;
Diletant 182:2bd8ec44998f 81 device.service.buffer[0] = 0x45; //E
Diletant 182:2bd8ec44998f 82 uint8_t c;
Diletant 182:2bd8ec44998f 83 for (uint8_t i = 0; i < device.user.response.buffer.count; i++) {
Diletant 182:2bd8ec44998f 84 c = device.user.response.buffer.data[i];
Diletant 182:2bd8ec44998f 85 device.service.buffer[i * 3 + 1] = 0x20;
Diletant 182:2bd8ec44998f 86 device.service.buffer[i * 3 + 2] = h[c >> 4];
Diletant 182:2bd8ec44998f 87 device.service.buffer[i * 3 + 3] = h[c & 0x0f];
Diletant 182:2bd8ec44998f 88 }
Diletant 182:2bd8ec44998f 89 device.service.buffer[device.user.response.buffer.count * 3 + 1] = 13;
Diletant 182:2bd8ec44998f 90 device.service.buffer[device.user.response.buffer.count * 3 + 2] = 10;
Diletant 182:2bd8ec44998f 91 device.service.buffer[device.user.response.buffer.count * 3 + 3] = 0;
Diletant 182:2bd8ec44998f 92 WriteConcole(); //Development message
Diletant 182:2bd8ec44998f 93 #endif
Diletant 182:2bd8ec44998f 94
Diletant 161:efd949e8d536 95 device.user.response.enabled = 0; //Disable response overwrite
Diletant 161:efd949e8d536 96 device.user.response.ready = 1; //Enable transmission
Diletant 161:efd949e8d536 97 device.user.response.buffer.position = 0; //Reset transmitter
Diletant 161:efd949e8d536 98 }
Diletant 161:efd949e8d536 99
Diletant 161:efd949e8d536 100 void EncodeFail(void) {
Diletant 161:efd949e8d536 101 device.user.response.buffer.count = 0; //Clear buffer
Diletant 161:efd949e8d536 102 device.user.response.enabled = 0; //Disable response overwrite
Diletant 161:efd949e8d536 103 }
Diletant 161:efd949e8d536 104
Diletant 161:efd949e8d536 105 void EncodeAddress(void) {
Diletant 161:efd949e8d536 106 Encode8(device.user.address);
Diletant 161:efd949e8d536 107 }
Diletant 161:efd949e8d536 108
Diletant 177:672ef279c8e0 109 //TODO: EncodePacket(uint16_t length) - auto reset packet index
Diletant 177:672ef279c8e0 110 void EncodePacket(void) {
Diletant 177:672ef279c8e0 111 Encode8(device.user.response.packet);
Diletant 177:672ef279c8e0 112 device.user.response.packet++;
Diletant 177:672ef279c8e0 113 }
Diletant 177:672ef279c8e0 114
Diletant 161:efd949e8d536 115 void EncodeMessage(void) {
Diletant 161:efd949e8d536 116 Encode16(device.user.response.message);
Diletant 161:efd949e8d536 117 }
Diletant 161:efd949e8d536 118
Diletant 161:efd949e8d536 119 void EncodeParameters(void) {
Diletant 161:efd949e8d536 120 for (uint8_t i = 0; i < device.user.response.parametersCount; i++){
Diletant 161:efd949e8d536 121 uint8_t * b = (uint8_t *)device.user.response.parameters[i].ref;
Diletant 161:efd949e8d536 122 for (uint8_t j = 0; j < device.user.response.parameters[i].size; j++){
Diletant 161:efd949e8d536 123 Encode8(*b); b++;
Diletant 161:efd949e8d536 124 }
Diletant 161:efd949e8d536 125 }
Diletant 161:efd949e8d536 126 }
Diletant 161:efd949e8d536 127
Diletant 161:efd949e8d536 128 void EncodeCRC(void) {
Diletant 161:efd949e8d536 129 int16_t crc = 0;
Diletant 161:efd949e8d536 130 for (int i = 2; i < device.user.response.buffer.count; i++) crc += device.user.response.buffer.data[i];
Diletant 161:efd949e8d536 131 Encode16(crc);
Diletant 161:efd949e8d536 132 EncodeEnd();
Diletant 161:efd949e8d536 133 }
Diletant 161:efd949e8d536 134
Diletant 182:2bd8ec44998f 135 //Deprecated
Diletant 161:efd949e8d536 136 void EncodeDeviceMode(void) {
Diletant 177:672ef279c8e0 137 EncodeStart();
Diletant 177:672ef279c8e0 138 EncodeAddress();
Diletant 182:2bd8ec44998f 139 Encode8(var_Device_Mode());
Diletant 182:2bd8ec44998f 140 Encode8(var_SRgR());
Diletant 177:672ef279c8e0 141 EncodeCRC();
Diletant 161:efd949e8d536 142 }
Diletant 161:efd949e8d536 143
Diletant 182:2bd8ec44998f 144 //Deprecated
Diletant 177:672ef279c8e0 145 void EncodeDeltaPS(void) {
Diletant 182:2bd8ec44998f 146 static uint16_t param16;
Diletant 177:672ef279c8e0 147 EncodeStart();
Diletant 177:672ef279c8e0 148 EncodeAddress();
Diletant 177:672ef279c8e0 149 //Encode angle counts
Diletant 182:2bd8ec44998f 150 Encode16(var_PSdiff());
Diletant 177:672ef279c8e0 151 //Prepare parameter
Diletant 177:672ef279c8e0 152 uint8_t param;
Diletant 177:672ef279c8e0 153 switch (device.user.response.packet) {
Diletant 182:2bd8ec44998f 154 case 0:
Diletant 182:2bd8ec44998f 155 //Dither output frequency
Diletant 182:2bd8ec44998f 156 param16 = var_F_ras();
Diletant 182:2bd8ec44998f 157 //High byte of output frequency
Diletant 182:2bd8ec44998f 158 param = (uint8_t)(param16 >> 8);
Diletant 182:2bd8ec44998f 159 break;
Diletant 182:2bd8ec44998f 160 case 1:
Diletant 182:2bd8ec44998f 161 //Lo byte of output frequency
Diletant 182:2bd8ec44998f 162 param = (uint8_t)param16;
Diletant 182:2bd8ec44998f 163 break;
Diletant 182:2bd8ec44998f 164 case 2:
Diletant 182:2bd8ec44998f 165 //Hi byte of ISACS output
Diletant 182:2bd8ec44998f 166 param = 0;
Diletant 182:2bd8ec44998f 167 break;
Diletant 182:2bd8ec44998f 168 case 3:
Diletant 182:2bd8ec44998f 169 //Lo byte of ISACS output
Diletant 182:2bd8ec44998f 170 param = 0;
Diletant 182:2bd8ec44998f 171 break;
Diletant 182:2bd8ec44998f 172 case 4:
Diletant 182:2bd8ec44998f 173 //T_Vibro Dither drive period
Diletant 182:2bd8ec44998f 174 param16 = var_T_Vibro();
Diletant 182:2bd8ec44998f 175 //Hi byte of dither oscillation frequency divider
Diletant 182:2bd8ec44998f 176 param = (uint8_t)(param16 >> 8);
Diletant 182:2bd8ec44998f 177 break;
Diletant 182:2bd8ec44998f 178 case 5:
Diletant 182:2bd8ec44998f 179 //Lo byte of dither oscillation frequency divider
Diletant 182:2bd8ec44998f 180 param = (uint8_t)param16;
Diletant 182:2bd8ec44998f 181 break;
Diletant 182:2bd8ec44998f 182 case 6:
Diletant 182:2bd8ec44998f 183 //L_Vibro Dither pulse width
Diletant 182:2bd8ec44998f 184 param16 = var_L_Vibro();
Diletant 182:2bd8ec44998f 185 //Hi byte of dither pulse width
Diletant 182:2bd8ec44998f 186 param = (uint8_t)(param16 >> 8);
Diletant 182:2bd8ec44998f 187 break;
Diletant 182:2bd8ec44998f 188 case 7:
Diletant 182:2bd8ec44998f 189 //Lo byte of dither pulse width
Diletant 182:2bd8ec44998f 190 param = (uint8_t)param16;
Diletant 182:2bd8ec44998f 191 break;
Diletant 177:672ef279c8e0 192 //Hi byte of PLCS output
Diletant 182:2bd8ec44998f 193 case 8:
Diletant 182:2bd8ec44998f 194 param16 = (uint16_t)device.controller.SSP.out[1];
Diletant 182:2bd8ec44998f 195 param = (uint8_t)(param16 >> 8);
Diletant 182:2bd8ec44998f 196 break;
Diletant 177:672ef279c8e0 197 //Lo byte of PLCS output
Diletant 182:2bd8ec44998f 198 case 9:
Diletant 182:2bd8ec44998f 199 param = (uint8_t)(param16 & 0xff);
Diletant 182:2bd8ec44998f 200 break;
Diletant 177:672ef279c8e0 201 //Unused
Diletant 177:672ef279c8e0 202 case 10: param = 0; break;
Diletant 177:672ef279c8e0 203 //Unused
Diletant 177:672ef279c8e0 204 case 11: param = 0; break;
Diletant 177:672ef279c8e0 205 //Unused
Diletant 177:672ef279c8e0 206 case 12: param = 0; break;
Diletant 177:672ef279c8e0 207 //Unused
Diletant 177:672ef279c8e0 208 case 13: param = 0; break;
Diletant 182:2bd8ec44998f 209 case 14:
Diletant 182:2bd8ec44998f 210 param16 = (uint16_t)device.ccs.current[0].state.raw;
Diletant 182:2bd8ec44998f 211 //Hi byte of CCS current[0]
Diletant 182:2bd8ec44998f 212 param = (uint8_t)(param16 >> 8);
Diletant 182:2bd8ec44998f 213 break;
Diletant 182:2bd8ec44998f 214 case 15:
Diletant 182:2bd8ec44998f 215 //Lo byte of CCS current[0]
Diletant 182:2bd8ec44998f 216 param = (uint8_t)(param16 & 0xff);
Diletant 182:2bd8ec44998f 217 break;
Diletant 182:2bd8ec44998f 218 case 16:
Diletant 182:2bd8ec44998f 219 param16 = (uint16_t)device.ccs.current[1].state.raw;
Diletant 182:2bd8ec44998f 220 //Hi byte of CCS current[1]
Diletant 182:2bd8ec44998f 221 param = (uint8_t)(param16 >> 8);
Diletant 182:2bd8ec44998f 222 break;
Diletant 182:2bd8ec44998f 223 case 17:
Diletant 182:2bd8ec44998f 224 param = (uint8_t)(param16 & 0xff);
Diletant 182:2bd8ec44998f 225 //Lo byte of CCS current[1]
Diletant 182:2bd8ec44998f 226 break;
Diletant 182:2bd8ec44998f 227 case 18:
Diletant 182:2bd8ec44998f 228 param16 = (uint16_t)device.tss.gradient.state.raw;
Diletant 182:2bd8ec44998f 229 //Hi byte of TSS gradient
Diletant 182:2bd8ec44998f 230 param = (uint8_t)(param16 >> 8);
Diletant 182:2bd8ec44998f 231 break;
Diletant 182:2bd8ec44998f 232 case 19:
Diletant 182:2bd8ec44998f 233 //Lo byte of TSS gradient
Diletant 182:2bd8ec44998f 234 param = (uint8_t)(param16 & 0xff);
Diletant 182:2bd8ec44998f 235 break;
Diletant 182:2bd8ec44998f 236 case 20:
Diletant 182:2bd8ec44998f 237 param16 = (uint16_t)device.tss.temperature.state.raw;
Diletant 182:2bd8ec44998f 238 //Hi byte of TSS temperature
Diletant 182:2bd8ec44998f 239 param = (uint8_t)(param16 >> 8);
Diletant 182:2bd8ec44998f 240 break;
Diletant 182:2bd8ec44998f 241 case 21:
Diletant 182:2bd8ec44998f 242 //Lo byte of TSS temperature
Diletant 182:2bd8ec44998f 243 param = (uint8_t)(param16 & 0xff);
Diletant 182:2bd8ec44998f 244 break;
Diletant 177:672ef279c8e0 245 }
Diletant 177:672ef279c8e0 246 //Encode packet index
Diletant 177:672ef279c8e0 247 EncodePacket();
Diletant 177:672ef279c8e0 248 //Reset packet index
Diletant 177:672ef279c8e0 249 if (device.user.response.packet > 21) device.user.response.packet = 0;
Diletant 177:672ef279c8e0 250 //Encode parameter
Diletant 177:672ef279c8e0 251 Encode8(param);
Diletant 177:672ef279c8e0 252 //Finish encoding
Diletant 177:672ef279c8e0 253 EncodeCRC();
Diletant 161:efd949e8d536 254 }
Diletant 161:efd949e8d536 255
Diletant 177:672ef279c8e0 256 void EncodeDeltaBINS(void) {
Diletant 177:672ef279c8e0 257 EncodeStart();
Diletant 177:672ef279c8e0 258 EncodeAddress();
Diletant 177:672ef279c8e0 259 Encode16(0); Encode16(0); //TODO: BINSDiff_32
Diletant 177:672ef279c8e0 260 Encode8(0); //Data ok
Diletant 177:672ef279c8e0 261 EncodeCRC();
Diletant 177:672ef279c8e0 262 }
Diletant 177:672ef279c8e0 263
Diletant 177:672ef279c8e0 264 void EncodeDeltaSF(void) {
Diletant 177:672ef279c8e0 265 //TODO
Diletant 161:efd949e8d536 266 }
Diletant 161:efd949e8d536 267
Diletant 177:672ef279c8e0 268 //Usage: Ask_Gld "Maintenance" button
Diletant 177:672ef279c8e0 269 //Usage: Ask_Gld "x" button
Diletant 177:672ef279c8e0 270 void EncodeMainMode(void) {
Diletant 177:672ef279c8e0 271 EncodeStart();
Diletant 177:672ef279c8e0 272 EncodeAddress();
Diletant 177:672ef279c8e0 273 Encode8(0); //Version - 0: use extended command to get version
Diletant 177:672ef279c8e0 274 Encode8(0); //Serial number - 0: use extended command to get serial number
Diletant 177:672ef279c8e0 275 EncodeMessage();
Diletant 177:672ef279c8e0 276 EncodeCRC();
Diletant 177:672ef279c8e0 277 }
Diletant 177:672ef279c8e0 278
Diletant 182:2bd8ec44998f 279 //Deprecated
Diletant 177:672ef279c8e0 280 void EncodeMCntR(void) {
Diletant 177:672ef279c8e0 281 EncodeStart();
Diletant 177:672ef279c8e0 282 EncodeAddress();
Diletant 177:672ef279c8e0 283 Encode16((int16_t)device.counters.meander.state.a);
Diletant 177:672ef279c8e0 284 Encode16((int16_t)device.counters.meander.state.b);
Diletant 177:672ef279c8e0 285 EncodeCRC();
Diletant 174:0f86eedd511c 286 }
Diletant 174:0f86eedd511c 287
Diletant 182:2bd8ec44998f 288 //Deprecated
Diletant 174:0f86eedd511c 289 void EncodeMRate(void) {
Diletant 174:0f86eedd511c 290 EncodeStart();
Diletant 174:0f86eedd511c 291 EncodeAddress();
Diletant 177:672ef279c8e0 292 //Encode positive meander latched counter data
Diletant 174:0f86eedd511c 293 Encode16((int16_t)device.counters.meander.state.a);
Diletant 177:672ef279c8e0 294 //Encode negative meander latched counter data
Diletant 174:0f86eedd511c 295 Encode16((int16_t)device.counters.meander.state.b);
Diletant 177:672ef279c8e0 296 //Encode accumulated meander latched counters difference
Diletant 182:2bd8ec44998f 297 Encode16(countersGetRateAngle());
Diletant 177:672ef279c8e0 298 //Encode output frequency
Diletant 182:2bd8ec44998f 299 Encode16(var_F_ras());
Diletant 177:672ef279c8e0 300 //Encode ISACS output
Diletant 177:672ef279c8e0 301 Encode16((uint16_t)device.controller.SSP.out[0]);
Diletant 177:672ef279c8e0 302 //Encode ISACS error
Diletant 177:672ef279c8e0 303 Encode16((int16_t)device.isacs.regulator.state.error);
Diletant 182:2bd8ec44998f 304 //Encode dither divider
Diletant 182:2bd8ec44998f 305 Encode16(var_T_Vibro());
Diletant 177:672ef279c8e0 306 //Encode dither phase detector output
Diletant 182:2bd8ec44998f 307 Encode16(var_T_VB_pll());
Diletant 177:672ef279c8e0 308 //Encode dither pulse width
Diletant 182:2bd8ec44998f 309 Encode16(var_L_Vibro());
Diletant 177:672ef279c8e0 310 //Encode unused
Diletant 177:672ef279c8e0 311 Encode16(0);
Diletant 177:672ef279c8e0 312 //Encode PLCS output
Diletant 177:672ef279c8e0 313 Encode16((uint16_t)device.controller.SSP.out[1]);
Diletant 177:672ef279c8e0 314 //Encode PLCS error
Diletant 177:672ef279c8e0 315 Encode16((int16_t)device.plcs.regulator.state.error);
Diletant 177:672ef279c8e0 316 //Encode unused
Diletant 177:672ef279c8e0 317 Encode16(0); //T0
Diletant 177:672ef279c8e0 318 //Encode unused
Diletant 177:672ef279c8e0 319 Encode16(0); //T1
Diletant 177:672ef279c8e0 320 //Encode CCS data
Diletant 177:672ef279c8e0 321 Encode16((int16_t)device.ccs.current[0].state.raw); //T2
Diletant 177:672ef279c8e0 322 Encode16((int16_t)device.ccs.current[1].state.raw); //T3
Diletant 177:672ef279c8e0 323 //Encode TSS data
Diletant 177:672ef279c8e0 324 Encode16((int16_t)device.tss.gradient.state.raw); //T4
Diletant 177:672ef279c8e0 325 Encode16((int16_t)device.tss.temperature.state.raw); //T5
Diletant 177:672ef279c8e0 326 //Encode unused
Diletant 177:672ef279c8e0 327 Encode16(0);
Diletant 177:672ef279c8e0 328 //Encode unused
Diletant 177:672ef279c8e0 329 Encode16(0);
Diletant 177:672ef279c8e0 330 //Finish encoding
Diletant 177:672ef279c8e0 331 EncodeCRC();
Diletant 177:672ef279c8e0 332 }
Diletant 177:672ef279c8e0 333
Diletant 177:672ef279c8e0 334 //Deprecated
Diletant 177:672ef279c8e0 335 void EncodeMCtlR(void) {
Diletant 177:672ef279c8e0 336 EncodeStart();
Diletant 177:672ef279c8e0 337 EncodeAddress();
Diletant 177:672ef279c8e0 338 Encode8(device.user.response.code >> 8);
Diletant 177:672ef279c8e0 339 if (device.user.response.code & 0x10 == 0){
Diletant 177:672ef279c8e0 340 Encode8(0); //Encode error status and RgConA attribute (clear register RgConB bit)
Diletant 177:672ef279c8e0 341 //Prepare RgConA
Diletant 177:672ef279c8e0 342 uint16_t param = 0;
Diletant 177:672ef279c8e0 343 if (device.dither.frequency.state.enabled) param |= 1 << 6;
Diletant 177:672ef279c8e0 344 if (device.dither.amplitude.state.enabled) param |= 1 << 5;
Diletant 177:672ef279c8e0 345 if (device.sequencer.sampler.state.enabled) param |= 1 << 4;
Diletant 177:672ef279c8e0 346 if (device.plcs.regulator.state.enabled) param |= 1 << 3;
Diletant 177:672ef279c8e0 347 if (device.isacs.regulator.state.enabled) param |= 1 << 1;
Diletant 177:672ef279c8e0 348 Encode16(param); //Encode RgConA
Diletant 177:672ef279c8e0 349 } else {
Diletant 177:672ef279c8e0 350 Encode8(0x10); //Encode error status and RgConB attribute (set register RgConB bit)
Diletant 177:672ef279c8e0 351 Encode16(device.counters.rate.state.source); //Encode RgConB
Diletant 177:672ef279c8e0 352 }
Diletant 177:672ef279c8e0 353 //Finish encoding
Diletant 177:672ef279c8e0 354 EncodeCRC();
Diletant 177:672ef279c8e0 355 }
Diletant 177:672ef279c8e0 356
Diletant 177:672ef279c8e0 357 //Deprecated
Diletant 177:672ef279c8e0 358 void EncodeMCtlAM(void) {
Diletant 177:672ef279c8e0 359 EncodeStart();
Diletant 177:672ef279c8e0 360 EncodeAddress();
Diletant 177:672ef279c8e0 361 Encode8(device.user.response.code >> 8);
Diletant 174:0f86eedd511c 362 //TODO:
Diletant 177:672ef279c8e0 363 Encode8(0x10); Encode8(0);Encode8(0); //Encode RgConA content
Diletant 177:672ef279c8e0 364 //Finish encoding
Diletant 177:672ef279c8e0 365 EncodeCRC();
Diletant 177:672ef279c8e0 366 }
Diletant 177:672ef279c8e0 367
Diletant 182:2bd8ec44998f 368 //Deprecated
Diletant 177:672ef279c8e0 369 void EncodeMCtlBM(void) {
Diletant 177:672ef279c8e0 370 EncodeStart();
Diletant 177:672ef279c8e0 371 EncodeAddress();
Diletant 182:2bd8ec44998f 372 Encode16(device.user.response.code); //TODO: Embed error code
Diletant 182:2bd8ec44998f 373 Encode16(device.counters.rate.state.source);
Diletant 177:672ef279c8e0 374 EncodeCRC();
Diletant 177:672ef279c8e0 375 }
Diletant 177:672ef279c8e0 376
Diletant 182:2bd8ec44998f 377 //Deprecated
Diletant 177:672ef279c8e0 378 void EncodeMParamR(void) {
Diletant 177:672ef279c8e0 379 EncodeStart();
Diletant 177:672ef279c8e0 380 EncodeAddress();
Diletant 177:672ef279c8e0 381 EncodeMessage();
Diletant 177:672ef279c8e0 382 EncodeCRC();
Diletant 177:672ef279c8e0 383 }
Diletant 177:672ef279c8e0 384
Diletant 182:2bd8ec44998f 385 //Deprecated
Diletant 177:672ef279c8e0 386 void EncodeMParamW(void) {
Diletant 177:672ef279c8e0 387 EncodeStart();
Diletant 177:672ef279c8e0 388 EncodeAddress();
Diletant 182:2bd8ec44998f 389 Encode8(device.user.response.code >> 8);
Diletant 182:2bd8ec44998f 390 Encode8(0); //TODO: Encode error code
Diletant 174:0f86eedd511c 391 EncodeCRC();
Diletant 161:efd949e8d536 392 }