Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of LG by
DeviceUserEncoder.c@186:c7a9c309086c, 2016-07-31 (annotated)
- Committer:
- Diletant
- Date:
- Sun Jul 31 06:19:02 2016 +0000
- Revision:
- 186:c7a9c309086c
- Parent:
- 184:2bd8ec44998f
Device&... update. More AskGld&Techno functionality.NotFinal!!!
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 | 184:2bd8ec44998f | 7 | void InitUserEncoderDefaultSettings(void) { | 
| Diletant | 167:bedc0a9d559a | 8 | } | 
| Diletant | 167:bedc0a9d559a | 9 | |
| Diletant | 184: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 | 184:2bd8ec44998f | 16 | void DeviceStartUserEncoder(void) { | 
| Diletant | 167:bedc0a9d559a | 17 | } | 
| Diletant | 167:bedc0a9d559a | 18 | |
| Diletant | 161:efd949e8d536 | 19 | //Next to LineDecode(), PinDecode() | 
| Diletant | 178:672ef279c8e0 | 20 | void userEncodeResponse(void) { | 
| Diletant | 161:efd949e8d536 | 21 | if (device.user.response.enabled) { | 
| Diletant | 184:2bd8ec44998f | 22 | if (device.user.response.type == RESPONSE_PERIODIC) { | 
| Diletant | 184:2bd8ec44998f | 23 | if (device.user.response.triggered) | 
| Diletant | 184:2bd8ec44998f | 24 | device.user.response.triggered = 0; //Clear trigger event. Here ok - encode response in one pass | 
| Diletant | 184:2bd8ec44998f | 25 | else | 
| Diletant | 184:2bd8ec44998f | 26 | return; | 
| Diletant | 184:2bd8ec44998f | 27 | } | 
| Diletant | 161:efd949e8d536 | 28 | |
| Diletant | 186: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 | 178:672ef279c8e0 | 30 | case DEV_MODE: EncodeDeviceMode(); break; | 
| Diletant | 178:672ef279c8e0 | 31 | case DELTA_BINS: EncodeDeltaBINS(); break; | 
| Diletant | 178:672ef279c8e0 | 32 | case DELTA_PS: EncodeDeltaPS(); break; | 
| Diletant | 178:672ef279c8e0 | 33 | case DELTA_SF: EncodeDeltaSF(); break; | 
| Diletant | 178:672ef279c8e0 | 34 | case BIT_MODE: EncodeDeviceMode(); break; //Same response as DEV_MODE | 
| Diletant | 178:672ef279c8e0 | 35 | case MAINTENANCE: EncodeMainMode(); break; | 
| Diletant | 178:672ef279c8e0 | 36 | case M0_RATE_1: EncodeMRate(); break; | 
| Diletant | 184:2bd8ec44998f | 37 | case M0_PARAM_R: EncodeMParamR(); break; | 
| Diletant | 184:2bd8ec44998f | 38 | case M0_PARAM_W: EncodeMParamW(); break; | 
| Diletant | 178:672ef279c8e0 | 39 | case M0_CTL_R: EncodeMCtlR(); break; | 
| Diletant | 178:672ef279c8e0 | 40 | case M0_CTL_A_M: EncodeMCtlAM(); break; | 
| Diletant | 178:672ef279c8e0 | 41 | case M0_CTL_B_M: EncodeMCtlBM(); break; | 
| Diletant | 178:672ef279c8e0 | 42 | case M0_CNT_R: EncodeMCntR(); break; | 
| Diletant | 186:c7a9c309086c | 43 | case M0_GPH_W: EncodeStart(); EncodeAddress(); Encode8(0xe6); Encode8(0); EncodeCRC(); break; | 
| Diletant | 161:efd949e8d536 | 44 | case H_PARAM8_W: | 
| Diletant | 186: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 | 178: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 | 184:2bd8ec44998f | 80 | #ifdef DEBUG_ENCODER_OUTPUT | 
| Diletant | 184:2bd8ec44998f | 81 | static char h[16] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66};//0123456789abcdef; | 
| Diletant | 184:2bd8ec44998f | 82 | device.service.buffer[0] = 0x45; //E | 
| Diletant | 184:2bd8ec44998f | 83 | uint8_t c; | 
| Diletant | 184:2bd8ec44998f | 84 | for (uint8_t i = 0; i < device.user.response.buffer.count; i++) { | 
| Diletant | 184:2bd8ec44998f | 85 | c = device.user.response.buffer.data[i]; | 
| Diletant | 184:2bd8ec44998f | 86 | device.service.buffer[i * 3 + 1] = 0x20; | 
| Diletant | 184:2bd8ec44998f | 87 | device.service.buffer[i * 3 + 2] = h[c >> 4]; | 
| Diletant | 184:2bd8ec44998f | 88 | device.service.buffer[i * 3 + 3] = h[c & 0x0f]; | 
| Diletant | 184:2bd8ec44998f | 89 | } | 
| Diletant | 184:2bd8ec44998f | 90 | device.service.buffer[device.user.response.buffer.count * 3 + 1] = 13; | 
| Diletant | 184:2bd8ec44998f | 91 | device.service.buffer[device.user.response.buffer.count * 3 + 2] = 10; | 
| Diletant | 184:2bd8ec44998f | 92 | device.service.buffer[device.user.response.buffer.count * 3 + 3] = 0; | 
| Diletant | 184:2bd8ec44998f | 93 | WriteConcole(); //Development message | 
| Diletant | 184:2bd8ec44998f | 94 | #endif | 
| Diletant | 184: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 | 178:672ef279c8e0 | 110 | //TODO: EncodePacket(uint16_t length) - auto reset packet index | 
| Diletant | 178:672ef279c8e0 | 111 | void EncodePacket(void) { | 
| Diletant | 178:672ef279c8e0 | 112 | Encode8(device.user.response.packet); | 
| Diletant | 178:672ef279c8e0 | 113 | device.user.response.packet++; | 
| Diletant | 178:672ef279c8e0 | 114 | } | 
| Diletant | 178: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 | 184:2bd8ec44998f | 136 | //Deprecated | 
| Diletant | 161:efd949e8d536 | 137 | void EncodeDeviceMode(void) { | 
| Diletant | 178:672ef279c8e0 | 138 | EncodeStart(); | 
| Diletant | 178:672ef279c8e0 | 139 | EncodeAddress(); | 
| Diletant | 184:2bd8ec44998f | 140 | Encode8(var_Device_Mode()); | 
| Diletant | 184:2bd8ec44998f | 141 | Encode8(var_SRgR()); | 
| Diletant | 178:672ef279c8e0 | 142 | EncodeCRC(); | 
| Diletant | 161:efd949e8d536 | 143 | } | 
| Diletant | 161:efd949e8d536 | 144 | |
| Diletant | 184:2bd8ec44998f | 145 | //Deprecated | 
| Diletant | 178:672ef279c8e0 | 146 | void EncodeDeltaPS(void) { | 
| Diletant | 184:2bd8ec44998f | 147 | static uint16_t param16; | 
| Diletant | 178:672ef279c8e0 | 148 | EncodeStart(); | 
| Diletant | 178:672ef279c8e0 | 149 | EncodeAddress(); | 
| Diletant | 178:672ef279c8e0 | 150 | //Encode angle counts | 
| Diletant | 184:2bd8ec44998f | 151 | Encode16(var_PSdiff()); | 
| Diletant | 178:672ef279c8e0 | 152 | //Prepare parameter | 
| Diletant | 178:672ef279c8e0 | 153 | uint8_t param; | 
| Diletant | 178:672ef279c8e0 | 154 | switch (device.user.response.packet) { | 
| Diletant | 184:2bd8ec44998f | 155 | case 0: | 
| Diletant | 184:2bd8ec44998f | 156 | //Dither output frequency | 
| Diletant | 184:2bd8ec44998f | 157 | param16 = var_F_ras(); | 
| Diletant | 184:2bd8ec44998f | 158 | //High byte of output frequency | 
| Diletant | 184:2bd8ec44998f | 159 | param = (uint8_t)(param16 >> 8); | 
| Diletant | 184:2bd8ec44998f | 160 | break; | 
| Diletant | 184:2bd8ec44998f | 161 | case 1: | 
| Diletant | 184:2bd8ec44998f | 162 | //Lo byte of output frequency | 
| Diletant | 184:2bd8ec44998f | 163 | param = (uint8_t)param16; | 
| Diletant | 184:2bd8ec44998f | 164 | break; | 
| Diletant | 184:2bd8ec44998f | 165 | case 2: | 
| Diletant | 186:c7a9c309086c | 166 | //ISACS output | 
| Diletant | 186:c7a9c309086c | 167 | param16 = var_HF_reg(); | 
| Diletant | 184:2bd8ec44998f | 168 | //Hi byte of ISACS output | 
| Diletant | 186:c7a9c309086c | 169 | param = (uint8_t)(param16 >> 8); | 
| Diletant | 184:2bd8ec44998f | 170 | break; | 
| Diletant | 184:2bd8ec44998f | 171 | case 3: | 
| Diletant | 184:2bd8ec44998f | 172 | //Lo byte of ISACS output | 
| Diletant | 186:c7a9c309086c | 173 | param = (uint8_t)param16; | 
| Diletant | 184:2bd8ec44998f | 174 | break; | 
| Diletant | 184:2bd8ec44998f | 175 | case 4: | 
| Diletant | 184:2bd8ec44998f | 176 | //T_Vibro Dither drive period | 
| Diletant | 184:2bd8ec44998f | 177 | param16 = var_T_Vibro(); | 
| Diletant | 184:2bd8ec44998f | 178 | //Hi byte of dither oscillation frequency divider | 
| Diletant | 184:2bd8ec44998f | 179 | param = (uint8_t)(param16 >> 8); | 
| Diletant | 184:2bd8ec44998f | 180 | break; | 
| Diletant | 184:2bd8ec44998f | 181 | case 5: | 
| Diletant | 184:2bd8ec44998f | 182 | //Lo byte of dither oscillation frequency divider | 
| Diletant | 184:2bd8ec44998f | 183 | param = (uint8_t)param16; | 
| Diletant | 184:2bd8ec44998f | 184 | break; | 
| Diletant | 184:2bd8ec44998f | 185 | case 6: | 
| Diletant | 184:2bd8ec44998f | 186 | //L_Vibro Dither pulse width | 
| Diletant | 184:2bd8ec44998f | 187 | param16 = var_L_Vibro(); | 
| Diletant | 184:2bd8ec44998f | 188 | //Hi byte of dither pulse width | 
| Diletant | 184:2bd8ec44998f | 189 | param = (uint8_t)(param16 >> 8); | 
| Diletant | 184:2bd8ec44998f | 190 | break; | 
| Diletant | 184:2bd8ec44998f | 191 | case 7: | 
| Diletant | 184:2bd8ec44998f | 192 | //Lo byte of dither pulse width | 
| Diletant | 184:2bd8ec44998f | 193 | param = (uint8_t)param16; | 
| Diletant | 184:2bd8ec44998f | 194 | break; | 
| Diletant | 184:2bd8ec44998f | 195 | case 8: | 
| Diletant | 186:c7a9c309086c | 196 | //PLCS output | 
| Diletant | 186:c7a9c309086c | 197 | param16 = var_WP_reg(); | 
| Diletant | 186:c7a9c309086c | 198 | //Hi byte of PLCS output | 
| Diletant | 184:2bd8ec44998f | 199 | param = (uint8_t)(param16 >> 8); | 
| Diletant | 184:2bd8ec44998f | 200 | break; | 
| Diletant | 178:672ef279c8e0 | 201 | //Lo byte of PLCS output | 
| Diletant | 184:2bd8ec44998f | 202 | case 9: | 
| Diletant | 184:2bd8ec44998f | 203 | param = (uint8_t)(param16 & 0xff); | 
| Diletant | 184:2bd8ec44998f | 204 | break; | 
| Diletant | 178:672ef279c8e0 | 205 | //Unused | 
| Diletant | 178:672ef279c8e0 | 206 | case 10: param = 0; break; | 
| Diletant | 178:672ef279c8e0 | 207 | //Unused | 
| Diletant | 178:672ef279c8e0 | 208 | case 11: param = 0; break; | 
| Diletant | 178:672ef279c8e0 | 209 | //Unused | 
| Diletant | 178:672ef279c8e0 | 210 | case 12: param = 0; break; | 
| Diletant | 178:672ef279c8e0 | 211 | //Unused | 
| Diletant | 178:672ef279c8e0 | 212 | case 13: param = 0; break; | 
| Diletant | 184:2bd8ec44998f | 213 | case 14: | 
| Diletant | 184:2bd8ec44998f | 214 | param16 = (uint16_t)device.ccs.current[0].state.raw; | 
| Diletant | 184:2bd8ec44998f | 215 | //Hi byte of CCS current[0] | 
| Diletant | 184:2bd8ec44998f | 216 | param = (uint8_t)(param16 >> 8); | 
| Diletant | 184:2bd8ec44998f | 217 | break; | 
| Diletant | 184:2bd8ec44998f | 218 | case 15: | 
| Diletant | 184:2bd8ec44998f | 219 | //Lo byte of CCS current[0] | 
| Diletant | 184:2bd8ec44998f | 220 | param = (uint8_t)(param16 & 0xff); | 
| Diletant | 184:2bd8ec44998f | 221 | break; | 
| Diletant | 184:2bd8ec44998f | 222 | case 16: | 
| Diletant | 184:2bd8ec44998f | 223 | param16 = (uint16_t)device.ccs.current[1].state.raw; | 
| Diletant | 184:2bd8ec44998f | 224 | //Hi byte of CCS current[1] | 
| Diletant | 184:2bd8ec44998f | 225 | param = (uint8_t)(param16 >> 8); | 
| Diletant | 184:2bd8ec44998f | 226 | break; | 
| Diletant | 184:2bd8ec44998f | 227 | case 17: | 
| Diletant | 184:2bd8ec44998f | 228 | param = (uint8_t)(param16 & 0xff); | 
| Diletant | 184:2bd8ec44998f | 229 | //Lo byte of CCS current[1] | 
| Diletant | 184:2bd8ec44998f | 230 | break; | 
| Diletant | 184:2bd8ec44998f | 231 | case 18: | 
| Diletant | 184:2bd8ec44998f | 232 | param16 = (uint16_t)device.tss.gradient.state.raw; | 
| Diletant | 184:2bd8ec44998f | 233 | //Hi byte of TSS gradient | 
| Diletant | 184:2bd8ec44998f | 234 | param = (uint8_t)(param16 >> 8); | 
| Diletant | 184:2bd8ec44998f | 235 | break; | 
| Diletant | 184:2bd8ec44998f | 236 | case 19: | 
| Diletant | 184:2bd8ec44998f | 237 | //Lo byte of TSS gradient | 
| Diletant | 184:2bd8ec44998f | 238 | param = (uint8_t)(param16 & 0xff); | 
| Diletant | 184:2bd8ec44998f | 239 | break; | 
| Diletant | 184:2bd8ec44998f | 240 | case 20: | 
| Diletant | 184:2bd8ec44998f | 241 | param16 = (uint16_t)device.tss.temperature.state.raw; | 
| Diletant | 184:2bd8ec44998f | 242 | //Hi byte of TSS temperature | 
| Diletant | 184:2bd8ec44998f | 243 | param = (uint8_t)(param16 >> 8); | 
| Diletant | 184:2bd8ec44998f | 244 | break; | 
| Diletant | 184:2bd8ec44998f | 245 | case 21: | 
| Diletant | 184:2bd8ec44998f | 246 | //Lo byte of TSS temperature | 
| Diletant | 184:2bd8ec44998f | 247 | param = (uint8_t)(param16 & 0xff); | 
| Diletant | 184:2bd8ec44998f | 248 | break; | 
| Diletant | 178:672ef279c8e0 | 249 | } | 
| Diletant | 178:672ef279c8e0 | 250 | //Encode packet index | 
| Diletant | 178:672ef279c8e0 | 251 | EncodePacket(); | 
| Diletant | 178:672ef279c8e0 | 252 | //Reset packet index | 
| Diletant | 178:672ef279c8e0 | 253 | if (device.user.response.packet > 21) device.user.response.packet = 0; | 
| Diletant | 178:672ef279c8e0 | 254 | //Encode parameter | 
| Diletant | 178:672ef279c8e0 | 255 | Encode8(param); | 
| Diletant | 178:672ef279c8e0 | 256 | //Finish encoding | 
| Diletant | 178:672ef279c8e0 | 257 | EncodeCRC(); | 
| Diletant | 161:efd949e8d536 | 258 | } | 
| Diletant | 161:efd949e8d536 | 259 | |
| Diletant | 178:672ef279c8e0 | 260 | void EncodeDeltaBINS(void) { | 
| Diletant | 178:672ef279c8e0 | 261 | EncodeStart(); | 
| Diletant | 178:672ef279c8e0 | 262 | EncodeAddress(); | 
| Diletant | 178:672ef279c8e0 | 263 | Encode16(0); Encode16(0); //TODO: BINSDiff_32 | 
| Diletant | 178:672ef279c8e0 | 264 | Encode8(0); //Data ok | 
| Diletant | 178:672ef279c8e0 | 265 | EncodeCRC(); | 
| Diletant | 178:672ef279c8e0 | 266 | } | 
| Diletant | 178:672ef279c8e0 | 267 | |
| Diletant | 178:672ef279c8e0 | 268 | void EncodeDeltaSF(void) { | 
| Diletant | 178:672ef279c8e0 | 269 | //TODO | 
| Diletant | 161:efd949e8d536 | 270 | } | 
| Diletant | 161:efd949e8d536 | 271 | |
| Diletant | 178:672ef279c8e0 | 272 | //Usage: Ask_Gld "Maintenance" button | 
| Diletant | 178:672ef279c8e0 | 273 | //Usage: Ask_Gld "x" button | 
| Diletant | 178:672ef279c8e0 | 274 | void EncodeMainMode(void) { | 
| Diletant | 178:672ef279c8e0 | 275 | EncodeStart(); | 
| Diletant | 178:672ef279c8e0 | 276 | EncodeAddress(); | 
| Diletant | 178:672ef279c8e0 | 277 | Encode8(0); //Version - 0: use extended command to get version | 
| Diletant | 178:672ef279c8e0 | 278 | Encode8(0); //Serial number - 0: use extended command to get serial number | 
| Diletant | 178:672ef279c8e0 | 279 | EncodeMessage(); | 
| Diletant | 178:672ef279c8e0 | 280 | EncodeCRC(); | 
| Diletant | 178:672ef279c8e0 | 281 | } | 
| Diletant | 178:672ef279c8e0 | 282 | |
| Diletant | 184:2bd8ec44998f | 283 | //Deprecated | 
| Diletant | 178:672ef279c8e0 | 284 | void EncodeMCntR(void) { | 
| Diletant | 178:672ef279c8e0 | 285 | EncodeStart(); | 
| Diletant | 178:672ef279c8e0 | 286 | EncodeAddress(); | 
| Diletant | 178:672ef279c8e0 | 287 | Encode16((int16_t)device.counters.meander.state.a); | 
| Diletant | 178:672ef279c8e0 | 288 | Encode16((int16_t)device.counters.meander.state.b); | 
| Diletant | 178:672ef279c8e0 | 289 | EncodeCRC(); | 
| Diletant | 175:0f86eedd511c | 290 | } | 
| Diletant | 175:0f86eedd511c | 291 | |
| Diletant | 184:2bd8ec44998f | 292 | //Deprecated | 
| Diletant | 175:0f86eedd511c | 293 | void EncodeMRate(void) { | 
| Diletant | 175:0f86eedd511c | 294 | EncodeStart(); | 
| Diletant | 175:0f86eedd511c | 295 | EncodeAddress(); | 
| Diletant | 178:672ef279c8e0 | 296 | //Encode positive meander latched counter data | 
| Diletant | 175:0f86eedd511c | 297 | Encode16((int16_t)device.counters.meander.state.a); | 
| Diletant | 178:672ef279c8e0 | 298 | //Encode negative meander latched counter data | 
| Diletant | 175:0f86eedd511c | 299 | Encode16((int16_t)device.counters.meander.state.b); | 
| Diletant | 178:672ef279c8e0 | 300 | //Encode accumulated meander latched counters difference | 
| Diletant | 186:c7a9c309086c | 301 | Encode16(var_Cnt_Dif()); | 
| Diletant | 178:672ef279c8e0 | 302 | //Encode output frequency | 
| Diletant | 184:2bd8ec44998f | 303 | Encode16(var_F_ras()); | 
| Diletant | 178:672ef279c8e0 | 304 | //Encode ISACS output | 
| Diletant | 186:c7a9c309086c | 305 | Encode16(var_HF_reg()); | 
| Diletant | 178:672ef279c8e0 | 306 | //Encode ISACS error | 
| Diletant | 186:c7a9c309086c | 307 | Encode16(var_HF_dif()); | 
| Diletant | 184:2bd8ec44998f | 308 | //Encode dither divider | 
| Diletant | 184:2bd8ec44998f | 309 | Encode16(var_T_Vibro()); | 
| Diletant | 178:672ef279c8e0 | 310 | //Encode dither phase detector output | 
| Diletant | 184:2bd8ec44998f | 311 | Encode16(var_T_VB_pll()); | 
| Diletant | 178:672ef279c8e0 | 312 | //Encode dither pulse width | 
| Diletant | 184:2bd8ec44998f | 313 | Encode16(var_L_Vibro()); | 
| Diletant | 178:672ef279c8e0 | 314 | //Encode unused | 
| Diletant | 178:672ef279c8e0 | 315 | Encode16(0); | 
| Diletant | 178:672ef279c8e0 | 316 | //Encode PLCS output | 
| Diletant | 186:c7a9c309086c | 317 | Encode16(var_WP_reg()); | 
| Diletant | 178:672ef279c8e0 | 318 | //Encode PLCS error | 
| Diletant | 186:c7a9c309086c | 319 | Encode16(var_WP_pll()); | 
| Diletant | 178:672ef279c8e0 | 320 | //Encode unused | 
| Diletant | 178:672ef279c8e0 | 321 | Encode16(0); //T0 | 
| Diletant | 178:672ef279c8e0 | 322 | //Encode unused | 
| Diletant | 178:672ef279c8e0 | 323 | Encode16(0); //T1 | 
| Diletant | 178:672ef279c8e0 | 324 | //Encode CCS data | 
| Diletant | 178:672ef279c8e0 | 325 | Encode16((int16_t)device.ccs.current[0].state.raw); //T2 | 
| Diletant | 178:672ef279c8e0 | 326 | Encode16((int16_t)device.ccs.current[1].state.raw); //T3 | 
| Diletant | 178:672ef279c8e0 | 327 | //Encode TSS data | 
| Diletant | 178:672ef279c8e0 | 328 | Encode16((int16_t)device.tss.gradient.state.raw); //T4 | 
| Diletant | 178:672ef279c8e0 | 329 | Encode16((int16_t)device.tss.temperature.state.raw); //T5 | 
| Diletant | 178:672ef279c8e0 | 330 | //Encode unused | 
| Diletant | 178:672ef279c8e0 | 331 | Encode16(0); | 
| Diletant | 178:672ef279c8e0 | 332 | //Encode unused | 
| Diletant | 178:672ef279c8e0 | 333 | Encode16(0); | 
| Diletant | 178:672ef279c8e0 | 334 | //Finish encoding | 
| Diletant | 178:672ef279c8e0 | 335 | EncodeCRC(); | 
| Diletant | 178:672ef279c8e0 | 336 | } | 
| Diletant | 178:672ef279c8e0 | 337 | |
| Diletant | 178:672ef279c8e0 | 338 | //Deprecated | 
| Diletant | 178:672ef279c8e0 | 339 | void EncodeMCtlR(void) { | 
| Diletant | 178:672ef279c8e0 | 340 | EncodeStart(); | 
| Diletant | 178:672ef279c8e0 | 341 | EncodeAddress(); | 
| Diletant | 178:672ef279c8e0 | 342 | Encode8(device.user.response.code >> 8); | 
| Diletant | 178:672ef279c8e0 | 343 | if (device.user.response.code & 0x10 == 0){ | 
| Diletant | 178:672ef279c8e0 | 344 | Encode8(0); //Encode error status and RgConA attribute (clear register RgConB bit) | 
| Diletant | 178:672ef279c8e0 | 345 | //Prepare RgConA | 
| Diletant | 178:672ef279c8e0 | 346 | uint16_t param = 0; | 
| Diletant | 178:672ef279c8e0 | 347 | if (device.dither.frequency.state.enabled) param |= 1 << 6; | 
| Diletant | 178:672ef279c8e0 | 348 | if (device.dither.amplitude.state.enabled) param |= 1 << 5; | 
| Diletant | 178:672ef279c8e0 | 349 | if (device.sequencer.sampler.state.enabled) param |= 1 << 4; | 
| Diletant | 178:672ef279c8e0 | 350 | if (device.plcs.regulator.state.enabled) param |= 1 << 3; | 
| Diletant | 178:672ef279c8e0 | 351 | if (device.isacs.regulator.state.enabled) param |= 1 << 1; | 
| Diletant | 178:672ef279c8e0 | 352 | Encode16(param); //Encode RgConA | 
| Diletant | 178:672ef279c8e0 | 353 | } else { | 
| Diletant | 178:672ef279c8e0 | 354 | Encode8(0x10); //Encode error status and RgConB attribute (set register RgConB bit) | 
| Diletant | 178:672ef279c8e0 | 355 | Encode16(device.counters.rate.state.source); //Encode RgConB | 
| Diletant | 178:672ef279c8e0 | 356 | } | 
| Diletant | 178:672ef279c8e0 | 357 | //Finish encoding | 
| Diletant | 178:672ef279c8e0 | 358 | EncodeCRC(); | 
| Diletant | 178:672ef279c8e0 | 359 | } | 
| Diletant | 178:672ef279c8e0 | 360 | |
| Diletant | 178:672ef279c8e0 | 361 | //Deprecated | 
| Diletant | 178:672ef279c8e0 | 362 | void EncodeMCtlAM(void) { | 
| Diletant | 178:672ef279c8e0 | 363 | EncodeStart(); | 
| Diletant | 178:672ef279c8e0 | 364 | EncodeAddress(); | 
| Diletant | 178:672ef279c8e0 | 365 | Encode8(device.user.response.code >> 8); | 
| Diletant | 175:0f86eedd511c | 366 | //TODO: | 
| Diletant | 178:672ef279c8e0 | 367 | Encode8(0x10); Encode8(0);Encode8(0); //Encode RgConA content | 
| Diletant | 178:672ef279c8e0 | 368 | //Finish encoding | 
| Diletant | 178:672ef279c8e0 | 369 | EncodeCRC(); | 
| Diletant | 178:672ef279c8e0 | 370 | } | 
| Diletant | 178:672ef279c8e0 | 371 | |
| Diletant | 184:2bd8ec44998f | 372 | //Deprecated | 
| Diletant | 178:672ef279c8e0 | 373 | void EncodeMCtlBM(void) { | 
| Diletant | 178:672ef279c8e0 | 374 | EncodeStart(); | 
| Diletant | 178:672ef279c8e0 | 375 | EncodeAddress(); | 
| Diletant | 184:2bd8ec44998f | 376 | Encode16(device.user.response.code); //TODO: Embed error code | 
| Diletant | 184:2bd8ec44998f | 377 | Encode16(device.counters.rate.state.source); | 
| Diletant | 178:672ef279c8e0 | 378 | EncodeCRC(); | 
| Diletant | 178:672ef279c8e0 | 379 | } | 
| Diletant | 178:672ef279c8e0 | 380 | |
| Diletant | 184:2bd8ec44998f | 381 | //Deprecated | 
| Diletant | 178:672ef279c8e0 | 382 | void EncodeMParamR(void) { | 
| Diletant | 178:672ef279c8e0 | 383 | EncodeStart(); | 
| Diletant | 178:672ef279c8e0 | 384 | EncodeAddress(); | 
| Diletant | 178:672ef279c8e0 | 385 | EncodeMessage(); | 
| Diletant | 178:672ef279c8e0 | 386 | EncodeCRC(); | 
| Diletant | 178:672ef279c8e0 | 387 | } | 
| Diletant | 178:672ef279c8e0 | 388 | |
| Diletant | 184:2bd8ec44998f | 389 | //Deprecated | 
| Diletant | 178:672ef279c8e0 | 390 | void EncodeMParamW(void) { | 
| Diletant | 178:672ef279c8e0 | 391 | EncodeStart(); | 
| Diletant | 178:672ef279c8e0 | 392 | EncodeAddress(); | 
| Diletant | 184:2bd8ec44998f | 393 | Encode8(device.user.response.code >> 8); | 
| Diletant | 184:2bd8ec44998f | 394 | Encode8(0); //TODO: Encode error code | 
| Diletant | 175:0f86eedd511c | 395 | EncodeCRC(); | 
| Diletant | 161:efd949e8d536 | 396 | } | 
