123
Fork of LG by
Diff: DeviceUserEncoder.c
- Revision:
- 198:78dd6d14d108
- Parent:
- 197:7a05523bf588
diff -r 7a05523bf588 -r 78dd6d14d108 DeviceUserEncoder.c --- a/DeviceUserEncoder.c Wed Oct 19 10:55:05 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,396 +0,0 @@ -#include "Device.h" - -extern Device device; -extern HashParam hashParamTable[HASH_PARAM_COUNT]; -extern HashFunc hashFuncTable[HASH_FUNC_COUNT]; - -void InitUserEncoderDefaultSettings(void) { -} - -void InitUserEncoderState(void) { - device.user.encoder.error = 0; - device.user.encoder.count = 0; - device.user.encoder.CRC = 0; -} - -void DeviceStartUserEncoder(void) { -} - -//Next to LineDecode(), PinDecode() -void userEncodeResponse(void) { - if (device.user.response.enabled) { - if (device.user.response.type == RESPONSE_PERIODIC) { - if (device.user.response.triggered) - device.user.response.triggered = 0; //Clear trigger event. Here ok - encode response in one pass - else - return; - } - - switch(device.user.response.code){ //TODO: switch(device.user.response.code & 0xff00) { case group: switch (device.user.response.code & 0x00ff) { case cmd: ...}...} - case DEV_MODE: EncodeDeviceMode(); break; - case DELTA_BINS: EncodeDeltaBINS(); break; - case DELTA_PS: EncodeDeltaPS(); break; - case DELTA_SF: EncodeDeltaSF(); break; - case BIT_MODE: EncodeDeviceMode(); break; //Same response as DEV_MODE - case MAINTENANCE: EncodeMainMode(); break; - case M0_RATE_1: EncodeMRate(); break; - case M0_PARAM_R: EncodeMParamR(); break; - case M0_PARAM_W: EncodeMParamW(); break; - case M0_CTL_R: EncodeMCtlR(); break; - case M0_CTL_A_M: EncodeMCtlAM(); break; - case M0_CTL_B_M: EncodeMCtlBM(); break; - case M0_CNT_R: EncodeMCntR(); break; - case M0_GPH_W: EncodeStart(); EncodeAddress(); Encode8(0xe6); Encode8(0); EncodeCRC(); break; - case H_PARAM8_W: - case H_PARAM8_R: - case H_PARAM16_W: - case H_PARAM16_R: - case H_PARAM32_W: - case H_PARAM32_R: - case H_BYTES_W: - case H_BYTES_R: - case FLASH_READ_ALL: - case FLASH_WRITE_ALL: - EncodeStart(); EncodeAddress(); Encode16(device.user.response.code); EncodeMessage(); if (device.user.response.message == 0) EncodeParameters(); EncodeCRC(); - break; - default: EncodeFail(); - } - } -} - -void Encode8(uint8_t param){ - device.user.response.buffer.data[device.user.response.buffer.count] = param; - device.user.response.buffer.count += 1; - - //sprintf(device.service.buffer,"- %2x\r\n", param); WriteConcole(); //Development message -} - -void Encode16(uint16_t param) { - Encode8((param >> 8) & 0xff); - Encode8(param & 0xff); -} - -void EncodeStart(void) { - device.user.response.ready = 0; //Disable transmission - device.user.response.buffer.count = 0; //Clear buffer - Encode8(0xdd); //Write response header code -} - -void EncodeEnd(void) { - #ifdef DEBUG_ENCODER_OUTPUT - static char h[16] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66};//0123456789abcdef; - device.service.buffer[0] = 0x45; //E - uint8_t c; - for (uint8_t i = 0; i < device.user.response.buffer.count; i++) { - c = device.user.response.buffer.data[i]; - device.service.buffer[i * 3 + 1] = 0x20; - device.service.buffer[i * 3 + 2] = h[c >> 4]; - device.service.buffer[i * 3 + 3] = h[c & 0x0f]; - } - device.service.buffer[device.user.response.buffer.count * 3 + 1] = 13; - device.service.buffer[device.user.response.buffer.count * 3 + 2] = 10; - device.service.buffer[device.user.response.buffer.count * 3 + 3] = 0; - WriteConcole(); //Development message - #endif - - device.user.response.enabled = 0; //Disable response overwrite - device.user.response.ready = 1; //Enable transmission - device.user.response.buffer.position = 0; //Reset transmitter -} - -void EncodeFail(void) { - device.user.response.buffer.count = 0; //Clear buffer - device.user.response.enabled = 0; //Disable response overwrite -} - -void EncodeAddress(void) { - Encode8(device.user.address); -} - -//TODO: EncodePacket(uint16_t length) - auto reset packet index -void EncodePacket(void) { - Encode8(device.user.response.packet); - device.user.response.packet++; -} - -void EncodeMessage(void) { - Encode16(device.user.response.message); -} - -void EncodeParameters(void) { - for (uint8_t i = 0; i < device.user.response.parametersCount; i++){ - uint8_t * b = (uint8_t *)device.user.response.parameters[i].ref; - for (uint8_t j = 0; j < device.user.response.parameters[i].size; j++){ - Encode8(*b); b++; - } - } -} - -void EncodeCRC(void) { - int16_t crc = 0; - for (int i = 2; i < device.user.response.buffer.count; i++) crc += device.user.response.buffer.data[i]; - Encode16(crc); - EncodeEnd(); -} - -//Deprecated -void EncodeDeviceMode(void) { - EncodeStart(); - EncodeAddress(); - Encode8(var_Device_Mode()); - Encode8(var_SRgR()); - EncodeCRC(); -} - -//Deprecated -void EncodeDeltaPS(void) { - static uint16_t param16; - EncodeStart(); - EncodeAddress(); - //Encode angle counts - Encode16(var_PSdiff()); - //Prepare parameter - uint8_t param; - switch (device.user.response.packet) { - case 0: - //Dither output frequency - param16 = var_F_ras(); - //High byte of output frequency - param = (uint8_t)(param16 >> 8); - break; - case 1: - //Lo byte of output frequency - param = (uint8_t)param16; - break; - case 2: - //ISACS output - param16 = var_HF_reg(); - //Hi byte of ISACS output - param = (uint8_t)(param16 >> 8); - break; - case 3: - //Lo byte of ISACS output - param = (uint8_t)param16; - break; - case 4: - //T_Vibro Dither drive period - param16 = var_T_Vibro(); - //Hi byte of dither oscillation frequency divider - param = (uint8_t)(param16 >> 8); - break; - case 5: - //Lo byte of dither oscillation frequency divider - param = (uint8_t)param16; - break; - case 6: - //L_Vibro Dither pulse width - param16 = var_L_Vibro(); - //Hi byte of dither pulse width - param = (uint8_t)(param16 >> 8); - break; - case 7: - //Lo byte of dither pulse width - param = (uint8_t)param16; - break; - case 8: - //PLCS output - param16 = var_WP_reg(); - //Hi byte of PLCS output - param = (uint8_t)(param16 >> 8); - break; - //Lo byte of PLCS output - case 9: - param = (uint8_t)(param16 & 0xff); - break; - //Unused - case 10: param = 0; break; - //Unused - case 11: param = 0; break; - //Unused - case 12: param = 0; break; - //Unused - case 13: param = 0; break; - case 14: - param16 = (uint16_t)device.ccs.current[0].state.raw; - //Hi byte of CCS current[0] - param = (uint8_t)(param16 >> 8); - break; - case 15: - //Lo byte of CCS current[0] - param = (uint8_t)(param16 & 0xff); - break; - case 16: - param16 = (uint16_t)device.ccs.current[1].state.raw; - //Hi byte of CCS current[1] - param = (uint8_t)(param16 >> 8); - break; - case 17: - param = (uint8_t)(param16 & 0xff); - //Lo byte of CCS current[1] - break; - case 18: - param16 = (uint16_t)device.tss.gradient.state.raw; - //Hi byte of TSS gradient - param = (uint8_t)(param16 >> 8); - break; - case 19: - //Lo byte of TSS gradient - param = (uint8_t)(param16 & 0xff); - break; - case 20: - param16 = (uint16_t)device.tss.temperature.state.raw; - //Hi byte of TSS temperature - param = (uint8_t)(param16 >> 8); - break; - case 21: - //Lo byte of TSS temperature - param = (uint8_t)(param16 & 0xff); - break; - } - //Encode packet index - EncodePacket(); - //Reset packet index - if (device.user.response.packet > 21) device.user.response.packet = 0; - //Encode parameter - Encode8(param); - //Finish encoding - EncodeCRC(); -} - -void EncodeDeltaBINS(void) { - EncodeStart(); - EncodeAddress(); - Encode16(0); Encode16(0); //TODO: BINSDiff_32 - Encode8(0); //Data ok - EncodeCRC(); -} - -void EncodeDeltaSF(void) { -//TODO -} - -//Usage: Ask_Gld "Maintenance" button -//Usage: Ask_Gld "x" button -void EncodeMainMode(void) { - EncodeStart(); - EncodeAddress(); - Encode8(0); //Version - 0: use extended command to get version - Encode8(0); //Serial number - 0: use extended command to get serial number - EncodeMessage(); - EncodeCRC(); -} - -//Deprecated -void EncodeMCntR(void) { - EncodeStart(); - EncodeAddress(); - Encode16((int16_t)device.counters.meander.state.a); - Encode16((int16_t)device.counters.meander.state.b); - EncodeCRC(); -} - -//Deprecated -void EncodeMRate(void) { - EncodeStart(); - EncodeAddress(); - //Encode positive meander latched counter data - Encode16((int16_t)device.counters.meander.state.a); - //Encode negative meander latched counter data - Encode16((int16_t)device.counters.meander.state.b); - //Encode accumulated meander latched counters difference - Encode16(var_Cnt_Dif()); - //Encode output frequency - Encode16(var_F_ras()); - //Encode ISACS output - Encode16(var_HF_reg()); - //Encode ISACS error - Encode16(var_HF_dif()); - //Encode dither divider - Encode16(var_T_Vibro()); - //Encode dither phase detector output - Encode16(var_T_VB_pll()); - //Encode dither pulse width - Encode16(var_L_Vibro()); - //Encode unused - Encode16(0); - //Encode PLCS output - Encode16(var_WP_reg()); - //Encode PLCS error - Encode16(var_WP_pll()); - //Encode unused - Encode16(0); //T0 - //Encode unused - Encode16(0); //T1 - //Encode CCS data - Encode16((int16_t)device.ccs.current[0].state.raw); //T2 - Encode16((int16_t)device.ccs.current[1].state.raw); //T3 - //Encode TSS data - Encode16((int16_t)device.tss.gradient.state.raw); //T4 - Encode16((int16_t)device.tss.temperature.state.raw); //T5 - //Encode unused - Encode16(0); - //Encode unused - Encode16(0); - //Finish encoding - EncodeCRC(); -} - -//Deprecated -void EncodeMCtlR(void) { - EncodeStart(); - EncodeAddress(); - Encode8(device.user.response.code >> 8); - if (device.user.response.code & 0x10 == 0){ - Encode8(0); //Encode error status and RgConA attribute (clear register RgConB bit) - //Prepare RgConA - uint16_t param = 0; - if (device.dither.frequency.state.enabled) param |= 1 << 6; - if (device.dither.amplitude.state.enabled) param |= 1 << 5; - if (device.sequencer.sampler.state.enabled) param |= 1 << 4; - if (device.plcs.regulator.state.enabled) param |= 1 << 3; - if (device.isacs.regulator.state.enabled) param |= 1 << 1; - Encode16(param); //Encode RgConA - } else { - Encode8(0x10); //Encode error status and RgConB attribute (set register RgConB bit) - Encode16(device.counters.rate.state.source); //Encode RgConB - } - //Finish encoding - EncodeCRC(); -} - -//Deprecated -void EncodeMCtlAM(void) { - EncodeStart(); - EncodeAddress(); - Encode8(device.user.response.code >> 8); - //TODO: - Encode8(0x10); Encode8(0);Encode8(0); //Encode RgConA content - //Finish encoding - EncodeCRC(); -} - -//Deprecated -void EncodeMCtlBM(void) { - EncodeStart(); - EncodeAddress(); - Encode16(device.user.response.code); //TODO: Embed error code - Encode16(device.counters.rate.state.source); - EncodeCRC(); -} - -//Deprecated -void EncodeMParamR(void) { - EncodeStart(); - EncodeAddress(); - EncodeMessage(); - EncodeCRC(); -} - -//Deprecated -void EncodeMParamW(void) { - EncodeStart(); - EncodeAddress(); - Encode8(device.user.response.code >> 8); - Encode8(0); //TODO: Encode error code - EncodeCRC(); -} \ No newline at end of file