123

Dependencies:   mbed

Fork of LG by igor Apu

Committer:
Diletant
Date:
Sun Jul 31 06:19:02 2016 +0000
Revision:
183:c7a9c309086c
Parent:
182:2bd8ec44998f
Device&... update. More AskGld&Techno functionality.NotFinal!!!

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