123
Fork of LG by
Diff: DeviceUserDecoder.c
- Revision:
- 198:78dd6d14d108
- Parent:
- 197:7a05523bf588
diff -r 7a05523bf588 -r 78dd6d14d108 DeviceUserDecoder.c --- a/DeviceUserDecoder.c Wed Oct 19 10:55:05 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1892 +0,0 @@ -#include "Device.h" - -extern Device device; -extern HashParam hashParamTable[HASH_PARAM_COUNT]; -extern HashFunc hashFuncTable[HASH_FUNC_COUNT]; - -void InitUserDecoderDefaultSettings(void) { -} - -void InitUserDecoderState(void) { - device.user.decoder.error = 0; - device.user.decoder.count = 0; - device.user.decoder.canceled = 1; - device.user.decoder.address = 0; - device.user.decoder.version = 0; - device.user.decoder.code = 0; - device.user.decoder.position = 0; - device.user.decoder.CRC = 0; -} - -void DeviceStartUserDecoder(void) { -} - -void userDecodeRequests(void) { - do { - DecodeStart(); if (device.user.decoder.error) continue; - DecodeAddress(); if (device.user.decoder.error) continue; - DecodeCode(); if (device.user.decoder.error) continue; - switch(device.user.decoder.code){ - case FACTORY_ACCESS: DecodeFactory(); break; - case DEV_MODE: DecodeDeviceMode(); break; - case DELTA_BINS: DecodeDelta(); break; - case DELTA_PS: DecodeDelta(); break; - case DELTA_SF: DecodeDelta(); break; - case BIT_MODE: DecodeBITMode(); break; - case MAINTENANCE: DecodeMaintenanceMode(); break; - case M0_BASIC: DecodeMBasic(); break; - case M0_RATE: DecodeMRate(); break; - case M0_STIMUL: DecodeMStymul(); break; - case M0_RESET: DecodeMReset(); break; - case M0_CTL_R: DecodeMCtlR(); break; - case M0_CTL_M: DecodeMCtlM(); break; - case M0_TMP_W: DecodeMTmpW(); break; - case M0_TMP_R: DecodeMTmpR(); break; - //case M0_E5R_W: break; - //case M0_ADC_R: break; - //case M0_VIB_W: break; - case M0_CNT_R: DecodeMCntR(); break; - case M0_GPH_W: DecodeMGphW(); break; - //case M0_FLG_R: break; - case M0_PARAM_W: DecodeMParamW(); break; - case M0_PARAM_R: DecodeMParamR(); break; - //case M0_E5RA_W: break; - default: DecodeFail(); - } - } while (device.user.decoder.count > 0); -} - -uint8_t Decode8(void) { - if (device.user.decoder.position != device.user.request.buffer.end) { - uint8_t param = device.user.request.buffer.data[device.user.decoder.position]; - - //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 - - device.user.decoder.position = (device.user.decoder.position + 1) % InputBufferSize; - device.user.decoder.count++; - device.user.decoder.CRC += param; - return param; - } else { - DecodeCancel(); - return 0; - } -} - -uint16_t Decode16(void) { - uint8_t hi = Decode8(); if (device.user.decoder.error) return 0; - uint8_t lo = Decode8(); if (device.user.decoder.error) return 0; - return (hi << 8) | lo; -} - -uint32_t Decode32(void) { - uint32_t b3 = Decode8(); if (device.user.decoder.error) return 0; - uint32_t b2 = Decode8(); if (device.user.decoder.error) return 0; - uint32_t b1 = Decode8(); if (device.user.decoder.error) return 0; - uint32_t b0 = Decode8(); if (device.user.decoder.error) return 0; - return (b3 << 24) | (b2 << 16) | (b1 << 8) | b0; -} - -void DecodeStart(void) { - if (device.user.decoder.canceled){ - DecodeCancel(); //Prevent next decode attempts until more data arrive - } else { - //Reset answer - //device.user.response.ready = 0; - //device.user.response.enabled = 0; - //device.user.response.trigger = 0x7fffffff; - //device.user.response.triggered = 0; - //device.user.response.counter = 0; - //Reset decoder - device.user.decoder.error = 0; - device.user.decoder.count = 0; - device.user.decoder.position = device.user.request.buffer.start; - - uint8_t param = Decode8(); if (device.user.decoder.error) return; - - //sprintf(tmp,"DecodeStart()\r\n"); WriteConcole(tmp); //Development message - - if (param != 0xcc) DecodeFail(); - - device.user.response.type = RESPONSE_IMMEDIATE; //Default type - device.user.response.packet = 0; - } -} - -void DecodeAddress(void) { - uint8_t address = Decode8(); if (device.user.decoder.error) return; - device.user.decoder.CRC = 0; - if ((address == device.user.address) || (address == BROADCAST_ADDRESS)) { - device.user.decoder.address = address; - } else { - DecodeFail(); - } - //sprintf(tmp,"DecodeAddress()\r\n"); WriteConcole(tmp); //Development message -} - -void DecodeCode(void) { - uint8_t code = Decode8(); if (device.user.decoder.error) return; - device.user.decoder.code = code << 8; - //sprintf(tmp,"DecodeCode()\r\n"); WriteConcole(tmp); //Development message -} - -void DecodeExtentionCode(void) { - uint8_t ext = Decode8(); if (device.user.decoder.error) return; - device.user.decoder.code |= ext; - //sprintf(tmp,"DecodeExtensionCode()\r\n"); WriteConcole(tmp); //Development message -} - -void DecodeEnd(void) { - #ifdef DEBUG_DECODER_INPUT - 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] = 0x44; //D - uint8_t c; - for (uint8_t i = 0; i < device.user.decoder.count; i++) { - c = device.user.request.buffer.data[(device.user.request.buffer.start + i) % InputBufferSize]; - 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.decoder.count * 3 + 1] = 13; - device.service.buffer[device.user.decoder.count * 3 + 2] = 10; - device.service.buffer[device.user.decoder.count * 3 + 3] = 0; - WriteConcole(); //Development message - #endif - - device.user.request.buffer.start = (device.user.request.buffer.start + device.user.decoder.count) % InputBufferSize; - if (device.user.request.buffer.start == device.user.request.buffer.end) device.user.request.buffer.empty = 1; - - device.user.decoder.count = 0; - if (device.user.decoder.error == 0) { - device.user.response.code = device.user.decoder.code; - - if (device.user.decoder.address == BROADCAST_ADDRESS) { - device.user.response.type = RESPONSE_DELAYED; - device.user.response.counter = 0; - device.user.response.trigger = BROADCAST_FRAME * device.user.address; //0/100/200 mks - } - - device.user.response.enabled = 1; - } -} - -void DecodeCancel(void) { - device.user.decoder.error = 1; - device.user.decoder.canceled = 1; //Set canceled flag: do not try to decode until new data arrive - device.user.decoder.count = 0; -} - -void DecodeFail(void) { - //sprintf(tmp,"DecodeFail()\r\n"); WriteConcole(tmp); //Development message - - device.user.decoder.error = 2; - device.user.decoder.count = 1; - DecodeEnd(); -} - -void DecodeCRC(void) { - uint16_t CRC = device.user.decoder.CRC; - //sprintf(tmp,"CS1 %4x\r\n", device.host.decoder.CRC); WriteConcole(tmp); //Development message - - device.user.decoder.CRC = Decode16(); if (device.user.decoder.error) return; - //sprintf(tmp,"CS2 %4x\r\n", device.host.decoder.CRC); WriteConcole(tmp); //Development message - - if (CRC == device.user.decoder.CRC) - DecodeEnd(); - else - DecodeFail(); -} - -void DecodeHashParam(uint32_t * size, void ** ref) { - uint32_t hash = Decode32(); if (device.user.decoder.error) return; - for (uint32_t i = 0; i < HASH_PARAM_COUNT; i++){ - if (hashParamTable[i].hash == hash){ - *ref = hashParamTable[i].ref; - *size = hashParamTable[i].size; - return; - } - } - DecodeFail(); -} - -void DecodeFactoryReadParam(void) { - void * ref; - uint32_t size; - - DecodeHashParam(&size, &ref); if (device.user.decoder.error) return; - switch (device.user.decoder.code & 0x0f) { - //Read 8 bit - case 0x00: - DecodeCRC(); if (device.user.decoder.error) return; - device.user.response.parametersCount = 1; - device.user.response.parameters[0].ref = ref; - device.user.response.parameters[0].size = size; - device.user.response.message = MESSAGE_OK; - break; - //Read 16 bit - case 0x01: - DecodeCRC(); if (device.user.decoder.error) return; - device.user.response.parametersCount = 1; - device.user.response.parameters[0].ref = ref; - device.user.response.parameters[0].size = size; - device.user.response.message = MESSAGE_OK; - break; - //Read 32 bit - case 0x03: - DecodeCRC(); if (device.user.decoder.error) return; - device.user.response.parametersCount = 1; - device.user.response.parameters[0].ref = ref; - device.user.response.parameters[0].size = size; - device.user.response.message = MESSAGE_OK; - break; - //Read array - case 0x0f: - DecodeCRC(); if (device.user.decoder.error) return; - device.user.response.parametersCount = 1; - device.user.response.parameters[0].ref = ref; - device.user.response.parameters[0].size = size; - device.user.response.message = MESSAGE_OK; - break; - default: - DecodeFail(); - device.user.response.message = MESSAGE_UNKNOWN_REQUEST_CODE; - device.user.response.parametersCount = 0; - } -} - -void DecodeFactoryWriteParam(void) { - void * ref; - uint32_t size; - uint8_t param8; - uint16_t param16; - uint32_t param32; - - DecodeHashParam(&size, &ref); if (device.user.decoder.error) return; - switch (device.user.decoder.code & 0x0f) { - //Write 8 bit - case 0x00: - param8 = Decode8(); if (device.user.decoder.error) return; - DecodeCRC(); if (device.user.decoder.error) return; - *((uint8_t *)ref) = param8; - device.user.response.message = MESSAGE_OK; - device.user.response.parametersCount = 0; - break; - //Write 16 bit - case 0x01: - param16 = Decode8(); if (device.user.decoder.error) return; - DecodeCRC(); if (device.user.decoder.error) return; - *((uint16_t *)ref) = param16; - device.user.response.message = MESSAGE_OK; - device.user.response.parametersCount = 0; - break; - //Write 32 bit - case 0x03: - param32 = Decode8(); if (device.user.decoder.error) return; - DecodeCRC(); if (device.user.decoder.error) return; - *((uint32_t *)ref) = param32; - device.user.response.message = MESSAGE_OK; - device.user.response.parametersCount = 0; - break; - //Write array - case 0x0f: - param16 = Decode16(); if (device.user.decoder.error) return; - for (uint16_t i = 0; i < param16; i++){ - param8 = Decode8(); if (device.user.decoder.error) return; - *(((uint8_t *)ref + i)) = param8; - } - DecodeCRC(); if (device.user.decoder.error) return; - device.user.response.message = MESSAGE_OK; - device.user.response.parametersCount = 0; - break; - default: - DecodeFail(); - device.user.response.message = MESSAGE_UNKNOWN_REQUEST_CODE; - device.user.response.parametersCount = 0; - } -} - -void DecodeFactoryFunctionCall(uint16_t parametersLength) { - uint32_t hash = Decode32(); if (device.user.decoder.error) return; - for (uint32_t i = 0; i < HASH_FUNC_COUNT; i++){ - if (hashFuncTable[i].hash == hash){ - void * ref = hashFuncTable[i].ref; - uint32_t resultSize = hashFuncTable[i].resultSize; - uint32_t paramCount = hashFuncTable[i].paramCount; - if (paramCount == parametersLength){ - if (paramCount == 0){ - //FunctionCall(ref); - ((void (*)())ref)(); - return; - } else if (paramCount == 1){ - ((void (*)())ref)(device.user.decoder.param0); - return; - } else if (paramCount == 2){ - ((void (*)())ref)(device.user.decoder.param0, device.user.decoder.param1); - return; - } else if (paramCount == 3){ - ((void (*)())ref)(device.user.decoder.param0, device.user.decoder.param1, device.user.decoder.param2); - return; - } else if (paramCount == 4){ - ((void (*)())ref)(device.user.decoder.param0, device.user.decoder.param1, device.user.decoder.param2, device.user.decoder.param3); - return; - } - } - } - } - DecodeFail(); -} - -void DecodeFactory(void) { - //sprintf(tmp," DecodeFactory()\r\n"); WriteConcole(tmp); //Development message - DecodeExtentionCode(); if (device.user.decoder.error) return; - - switch (device.user.decoder.code & 0xf0) { - //Read param - case 0x00: - DecodeFactoryReadParam(); - break; - //Write param - case 0x10: - DecodeFactoryWriteParam(); - break; - //Set function parameter by immediate value - case 0x20: - break; - //Set function parameter by variable value - case 0x30: - break; - //Set function parameter by variable reference - case 0x40: - break; - //Call function - no parameters - case 0x50: - case 0x51: - case 0x52: - case 0x53: - case 0x54: - DecodeFactoryFunctionCall(device.user.decoder.code & 0x0f); - break; - //Read flash - case 0x60: - DecodeCRC(); if (device.user.decoder.error) return; - DeviceFlashReadAll(); - device.user.response.message = MESSAGE_OK; - device.user.response.parametersCount = 0; - break; - //Write flash - case 0x70: - DecodeCRC(); if (device.user.decoder.error) return; - DeviceFlashWriteAll(); - device.user.response.message = MESSAGE_OK; - device.user.response.parametersCount = 0; - break; - default: - DecodeFail(); - device.user.response.message = MESSAGE_UNKNOWN_REQUEST_CODE; - } -} - -void DecodeDeviceMode(void) { - uint8_t mode = Decode8(); if (device.user.decoder.error) return; - if ((mode > 0) && (mode < 7)){ - DecodeCRC(); if (device.user.decoder.error) return; - - //sprintf(device.service.buffer, "Dev_Mode %02x\r\n", mode); WriteConcole(); //Development message - - switch (mode) { - case 1: - //DM_INT_10KHZ_LATCH: latch by pulses 10 kHz (power on default mode) - device.counters.latch.state.enabled = 0;//Internal latch - //TODO: should switch meander/dither latched counters here or ignore command and continue to use use RgConB setting instead? - break; - case 2: - //DM_INT_SIGN_MEANDER_LATCH: latch by signed meander pulses - device.counters.latch.state.enabled = 0;//Internal latch - //TODO: should switch meander/dither latched counters here or ignore command and continue to use use RgConB setting instead? - break; - case 3: - //DM_EXT_LATCH_DELTA_PS_LINE: external latch mode with B_Delta_PS format data and RS422 request by command B_Delta_PS - device.counters.latch.state.enabled = 1;//External latch - device.counters.latch.state.signal = 0; //RS422 latch signal - device.counters.latch.state.format = 0; //DeltaPS output format - break; - case 4: - //DM_EXT_LATCH_DELTA_PS_PULSE: external latch mode with B_Delta_PS format data and latch pulse request - device.counters.latch.state.enabled = 1;//External latch - device.counters.latch.state.signal = 1; //Wire latch signal - device.counters.latch.state.format = 0; //DeltaPS output format - break; - case 5: - //DM_EXT_LATCH_DELTA_BINS_LINE: external latch mode with B_Delta_BINS format data and RS422 request by command B_Delta_BINS - device.counters.latch.state.enabled = 1;//External latch - device.counters.latch.state.signal = 0; //RS422 latch signal - device.counters.latch.state.format = 1; //DeltaBINS output format - break; - case 6: - //DM_EXT_LATCH_DELTA_BINS_PULSE: external latch mode with B_Delta_BINS format data and latch pulse request - device.counters.latch.state.enabled = 1;//External latch - device.counters.latch.state.signal = 1; //Wire latch signal - device.counters.latch.state.format = 1; //DeltaBINS output format - break; - } - } else { - DecodeFail(); - } -} - -void DecodeBITMode(void) { - //In commandset.c - look as useless: set not used Is_BIT and BIT_Number variables - //Consume required amount of input: - Decode8(); if (device.user.decoder.error) return; //Is_BIT = 1/0; - Decode8(); if (device.user.decoder.error) return; //BIT_number = (long)(rcv_buf[4] & 0x00FF) << 24; - Decode8(); if (device.user.decoder.error) return; //BIT_number |= (long)(rcv_buf[5] & 0x00FF) << 16; - Decode8(); if (device.user.decoder.error) return; //BIT_number |= (long)(rcv_buf[6] & 0x00FF) << 8; - Decode8(); if (device.user.decoder.error) return; //BIT_number |= (long)(rcv_buf[7] & 0x00FF); - DecodeCRC(); if (device.user.decoder.error) return; -} - -void DecodeDelta(void) { - //Same for DELTA_PS,DELTA_BINS,DELTA_SF - only code different and it processed already - uint8_t mode = Decode8(); if (device.user.decoder.error) return; - - //sprintf(device.service.buffer, "Delta %02x\r\n", mode); WriteConcole(); //Development message - - //if ((mode & 0x0f) == 0){ //DELTA_PS,DELTA_BINS - if ((mode & 0x0e) == 0){ //DELTA_PS,DELTA_BINS,DELTA_SF - DecodeCRC(); if (device.user.decoder.error) return; - //SRgR bits 4-5 - reponse rate - uint32_t baud; - switch ((mode >> 5) & 0x03){ - case 0: baud = 38400; break; - case 1: baud = 115200; break; - case 2: baud = 460800; break; - case 3: baud = 921600; break; - default: baud = 38400; - } - userSetBaudRate(baud); - //Not supported - //if (mode & 0x04) { - // device.user.request.rate = device.user.response.rate; - //} else { - // device.user.request.rate = 38400; - //} - if (mode & 0x01) { //DELTA_SF - device.counters.latch.state.reset = 0; - } else { - device.counters.latch.state.reset = 1; - } - - if (device.user.decoder.address == device.user.address) { - if (mode & 0x80) { - //Reset device counters here - device.counters.dither.state.angle = 0; - - device.user.response.counter = 0; - device.user.response.trigger = 2000; //2000 mks - 500Hz - device.user.response.type = RESPONSE_PERIODIC; //Override default type - device.user.response.packet = 0; - } - } - } else { - DecodeFail(); - } -} - -void DecodeMaintenanceMode(void) { - uint8_t version = Decode8(); if (device.user.decoder.error) return; - if (version == 0x99) { - DecodeCRC(); if (device.user.decoder.error) return; - device.user.decoder.version = 0; - - userSetBaudRate(38400); - - //sprintf(device.service.buffer, "MaintenanceMode()\r\n"); WriteConcole(); //Development message - } else { - DecodeFail(); - } -} - -void DecodeMBasic(void) { - DecodeExtentionCode(); if (device.user.decoder.error) return; - switch (device.user.decoder.code) { - case M0_CLEAR: - DecodeCRC(); if (device.user.decoder.error) return; - DoMaintenanceClear(); - break; - case M0_MIRROR: - DecodeCRC(); if (device.user.decoder.error) return; - DoMaintenanceMirror(); - break; - case M0_LDPAR_F: - DecodeCRC(); if (device.user.decoder.error) return; - DeviceFlashReadAll(); - DeviceInitState(); - break; - case M0_LDPAR_D: - DecodeCRC(); if (device.user.decoder.error) return; - DeviceInitDefaultSettings(); - DeviceInitState(); - break; - case M0_START: - DecodeCRC(); if (device.user.decoder.error) return; - DoMaintenanceStart(); - break; - case M0_STOP: - DecodeCRC(); if (device.user.decoder.error) return; - DoMaintenanceStop(); - break; - case M0_PULSE: - DecodeCRC(); if (device.user.decoder.error) return; - DeviceStartLightUp(); - break; - default: DecodeFail(); - } -} - -void DoMaintenanceClear(void) { - //TODO -} - -void DoMaintenanceMirror(void) { - //TODO -} - -void DoMaintenanceStart(void) { - //TODO -} - -void DoMaintenanceStop(void) { - //TODO -} - -//Deprecated -void DecodeMRate(void) { - uint8_t mode = Decode8(); if (device.user.decoder.error) return; - if ((mode & 0x1f) == 1){ - DecodeCRC(); if (device.user.decoder.error) return; - - //sprintf(device.service.buffer, "MRate %02x\r\n", mode); WriteConcole(); //Development message - - device.user.response.code |= mode & 0x1f; - - uint32_t baud; - switch ((mode>>5) & 0x03) { - case 0: baud = 38400; break; - case 1: baud = 115200; break; - default: baud = 38400; - } - userSetBaudRate(baud); - - if (mode & 0x80) { - //Reset device counters here - device.counters.dither.state.angle = 0; - device.counters.meander.state.angle[0] = 0; - device.counters.meander.state.angle[1] = 0; - - device.user.response.type = RESPONSE_PERIODIC; //Override default type - device.user.response.trigger = 1000000; //1000000mks - 1Hz - //device.user.response.counter = device.user.response.trigger; //Ask_Gld expect immediate answer? - device.user.response.counter = 0; //No? - } - } else { - DecodeFail(); - } -} - -/* Template for MRate2,... -void DecodeMRate(void) { - uint8_t mode = Decode8(); if (device.user.decoder.error) return; - if ((mode & 0x1f) == 0){ - //MRate - DecodeCRC(); if (device.user.decoder.error) return; - - device.user.response.code |= mode & 0x1f; - - switch ((mode>>5) & 0x03) { - case 0: device.user.response.rate = 38400; break; - case 1: device.user.response.rate = 115200; break; - case 2: device.user.response.rate = 460800; break; - case 3: device.user.response.rate = 921600; break; - } - - if (mode & 0x80) { - //TODO: reset device.counters here - device.user.response.counter = 0; - switch (mode & 0x03) { - case 1: device.user.response.trigger = 1000000; break; //1 000 000 mks - 1Hz - case 2: device.user.response.trigger = 3276700; break; //??? - case 3: device.user.response.trigger = 100; break; //100 mks - 10000Hz - case 4: device.user.response.trigger = 800; break; //800 mks - 1250Hz - case 7: device.user.response.trigger = 800; break; //800 mks - 1250Hz - } - device.user.response.type = RESPONSE_PERIODIC; //Override default type - } - } else { - DecodeFail(); - } -}*/ - -void DecodeMStymul(void) { - uint8_t param = Decode8(); if (device.user.decoder.error) return; - if ((param & 0x18) == 0){ - uint8_t hi = Decode8(); if (device.user.decoder.error) return; - uint8_t lo = Decode8(); if (device.user.decoder.error) return; - DecodeCRC(); if (device.user.decoder.error) return; - - //sprintf(device.service.buffer, "MStymul %02x %02x %02x\r\n", param, hi, lo); WriteConcole(); //Development message - - device.user.decoder.code |= param & 0x04; - userSetBaudRate(38400); - - device.user.response.enabled = (param & 0x80) >> 7; - - uint8_t channel = param & 0x03; - if (param & 0x04) { - uint32_t flags = (hi << 8) | lo; - //TODO: write flags - only flag register 0 defined - if (channel == 0){ - //Potentiometers data - if (flags & 0x01){ - } else { - } - //Potentiometers data input enable/disable flag - if (flags & 0x02){ - } else { - } - //Laser Up - if (flags & 0x03){ - } else { - } - //Software reper - if (flags & 0x04){ - } else { - } - } - } else { - uint32_t voltage = ((hi << 4) | (lo >> 4)); //TODO: do correct transformations - //TODO: write DAC - switch (channel){ - case 0://PLC regulator - break; - case 1://PLC modulator - break; - case 2://laser power regulator - break; - case 3://worms - break; - } - } - } else { - DecodeFail(); - } -} - -void DecodeMReset(void) { - DecodeCRC(); if (device.user.decoder.error) return; - - while (1); //Wait watch dog reset -} - -//Deprecated -void DecodeMCtlR(void) { - uint8_t param = Decode8(); if (device.user.decoder.error) return; - DecodeCRC(); if (device.user.decoder.error) return; - - //sprintf(device.service.buffer, "MCtlR %02x\r\n", param); WriteConcole(); //Development message - - if ((param & 0x60) == 0) - userSetBaudRate(38400); - else - userSetBaudRate(115200); - - device.user.response.code |= param & 0x10; -} - -//Deprecated -void DecodeMCtlM(void) { - uint8_t param = Decode8(); if (device.user.decoder.error) return; - DecodeCRC(); if (device.user.decoder.error) return; - - //sprintf(device.service.buffer, "MCtlM %02x\r\n", param); WriteConcole(); //Development message - - if ((param & 0x60) == 0) - userSetBaudRate(38400); - else - userSetBaudRate(115200); - - uint8_t bit = param & 0x0f; - uint8_t value = (param & 0x80) >> 7; - if ((param & 0x10) == 0) { - //RgConA - flags of regulator loops - switch (bit){ - case 0://Laser switch - //TODO - break; - - case 1://HFO loop switch - device.isacs.regulator.state.enabled = value; - break; - - case 3://PLC loop switch - device.plcs.regulator.state.enabled = value; - break; - - case 4://Modulator switch - //device.plcs.modulator.state.enabled = value; - device.sequencer.output.analog.state.enabled = value; - break; - - case 5://Dither drive pulse width/output frequency loop switch - device.dither.amplitude.state.enabled = value; - break; - - case 6://Dither drive oscillation frequency loop switch - device.dither.frequency.state.enabled = value; - break; - - case 7: //All loops switch - device.isacs.regulator.state.enabled = value; - device.plcs.regulator.state.enabled = value; - device.sequencer.output.analog.state.enabled = value; - device.dither.amplitude.state.enabled = value; - device.dither.frequency.state.enabled = value; - break; - } - } else { - //RgConB - counting mode: 00 - reference counters, 01 - dither counters and moving average filter - switch (bit){ - case 0://Moving average filter - device.counters.rate.state.source = value; - #ifdef DEBUG_DECODER_INPUT - if (value == 0) - sprintf(device.service.buffer, "RgConB reset bit %1d\r\n", bit); - else - sprintf(device.service.buffer, "RgConB set bit %1d\r\n", bit); - WriteConcole(); - #endif - break; - - case 1://Not used - //TODO - break; - - case 2://Not used - //TODO - break; - } - } - - device.user.response.code |= param & 0x10; -} - -//Deprecated -void DecodeMADCR(void) { - //TODO -} - -//Deprecated -void DecodeMTmpW(void) { - //Not compatible with new ADC - //Just consume required amount of input: - Decode8(); if (device.user.decoder.error) return; - Decode8(); if (device.user.decoder.error) return; - Decode8(); if (device.user.decoder.error) return; - Decode8(); if (device.user.decoder.error) return; - Decode8(); if (device.user.decoder.error) return; - DecodeCRC(); if (device.user.decoder.error) return; -} - -//Deprecated -void DecodeMTmpR(void) { - //Not compatible with new ADC - //Just consume required amount of input: - Decode8(); if (device.user.decoder.error) return; - DecodeCRC(); if (device.user.decoder.error) return; -} - -//Deprecated -void DecodeMe5rW(void) { - //TODO -} - -void DecodeMCntR(void) { - uint8_t param = Decode8(); if (device.user.decoder.error) return; - DecodeCRC(); if (device.user.decoder.error) return; - - //sprintf(device.service.buffer, "MCntR %02x\r\n", param); WriteConcole(); //Development message - - if ((param & 0x60) == 0) - userSetBaudRate(38400); - else - userSetBaudRate(115200); - - if (param & 0x80) { - device.user.response.counter = 0; - device.user.response.trigger = 200; //200 mks - 500Hz - device.user.response.type = RESPONSE_PERIODIC; //Override default type - } -} - -//Deprecated -void DecodeMFlgR(void) { - //TODO -} - -//Deprecated -void DecodeMVibW(void) { - //TODO -} - -//Deprecated -void DecodeMGphW(void) { - uint8_t reply = Decode8(); if (device.user.decoder.error) return; - uint8_t gainA = Decode8(); if (device.user.decoder.error) return; - uint8_t gainB = Decode8(); if (device.user.decoder.error) return; - DecodeCRC(); if (device.user.decoder.error) return; - device.isacs.potentiometers.state.a = gainA; - device.isacs.potentiometers.state.b = gainB; - DeviceISACSSetPotentiometers(); - if (!reply) device.user.response.enabled = 0; -} - -uint16_t GetCompatibilityValue(uint8_t index) { - - return 0; -} - -//Deprecated -void DecodeMParamR(void) { - uint8_t index = Decode8(); if (device.user.decoder.error) return; - DecodeCRC(); if (device.user.decoder.error) return; - - uint32_t param32; - switch (index){ - case 0: - //My_Address s16 device address - device.user.response.message = device.user.address; - break; - - case 1: - //HF_ref s16 value of the reference - //int32_t device.isacs.regulator.settings.reference - device.user.response.message = param_HF_ref(); - break; - - case 2: - //HF_scl s16 HFO gain factor - //int32_t device.isacs.regulator.settings.scale - device.user.response.message = param_HF_scl(); - break; - - case 3: - //HF_min dac ttf:minimum DAC code in HFO channel; value:maximal voltage of HFO; value=(ttf>>4)/2048*(-12)-1.3; Range -13.2V...10.7V - //int32_t device.isacs.output.settings.max - device.user.response.message = param_HF_min(); - break; - - case 4: - //HF_max dac ttf:maximum DAC code in HFO channel; value:minimal voltage of HFO; value=(ttf>>4)/2048*(-12)-1.3; Range -13.2V...10.7V - //int32_t device.isacs.output.settings.min - device.user.response.message = param_HF_max(); - break; - - case 5: - //RI_ref s16 not used (DS reference) - device.user.response.message = 0; - break; - - case 6: - //RI_scl s16 not used (DS gain factor) - device.user.response.message = 0; - break; - - case 7: - //WP_ref s16 PLCS reference - //int32_t device.plcs.regulator.reference - device.user.response.message = param_WP_ref(); - break; - - case 8: - //WP_scl s16 PLCS gain factor (1.15) 5..20 - //int32_t device.plcs.regulator.scale - device.user.response.message = param_WP_scl(); - break; - - case 9: - //WP_mdy s16 PLCS reset delay in 10kHz cycles - //device.plcs.reset.up/down.state.duration - device.user.response.message = param_WP_mdy(); - break; - - case 10: - //WP_rup dac ttf:PLCS maximum DAC code in heater channel; value:minimal voltage on the heater; value=(ttf>>4)/2048*(-12)-1.3; Range -13.2V...10.7V - //device.plcs.reset.up.state.trigger - device.user.response.message = param_WP_rup(); - break; - - case 11: - //WP_rdw dac ttf:PLCS minimum DAC code in heater channel; value:maximal voltage on the heater; value=(ttf>>4)/2048*(-12)-1.3; Range -13.2V...10.7V - //device.plcs.reset.down.state.trigger - device.user.response.message = param_WP_rdw(); - break; - - case 12: - //VB_phs s16 the phase delay parameter of the dither drive PLL - //0 - device.user.response.message = 0; - break; - - case 13: - //VB_scl s16 the gain factor (1.15) of the dither drive PLL - param32 = device.dither.frequency.settings.scale >> 16; - device.user.response.message = (uint16_t)param32; - break; - - case 14: - //VB_N vbd ttf:dither drive oscillation central frequency divider 7680000/F; value:dither drive central oscillation frequency - device.user.response.message = param_VB_N(); - break; - - case 15: - //VB_Nmin vbd ttf:minimum dither drive oscillation frequency divider 7680000/F; value:maximum dither drive oscillation frequency - device.user.response.message = param_VB_Nmin(); - break; - - case 16: - //VB_Nmax vbd ttf:maximum dither drive oscillation frequency divider 7680000/F; value:minimum dither drive oscillation frequency - device.user.response.message = param_VB_Nmax(); - break; - - case 17: - //VB_Fdf s32 double output frequency (Hi) - param32 = param_VB_Fdf() >> 16; - device.user.response.message = (uint16_t)param32; - break; - - case 18: - //VB_Fdf s32 double output frequency (Lo) - param32 = param_VB_Fdf() & 0xffff; - device.user.response.message = (uint16_t)param32; - break; - - case 19: - //VB_Fsc s16 the gain factor of the frequency regulator - param32 = device.dither.amplitude.settings.scale >> 16; - device.user.response.message = (uint16_t)param32; - break; - - case 20: - //VB_Tmin tau minimum pulse width of the dither drive; value=ttf/15360000 in seconds - device.user.response.message = param_VB_Tmin(); - break; - - case 21: - //VB_Tmax tau maximum pulse width of the dither drive; value=ttf/15360000 in seconds - device.user.response.message = param_VB_Tmax(); - break; - - case 22: - //VB_tau tau pulse width of the dither drive without noise or current pulse width of the dither drive with noise; value=ttf/15360000 in seconds - device.user.response.message = param_VB_tau(); - break; - - case 23: - //VBN_Tzd s16 adjusted noise period - //int32_t device.dither.noise.settings.period - device.user.response.message = param_VBN_Tzd(); - break; - - case 24: - //VBN_Ran s16 range of the random component of noise - //int32_t device.dither.noise.settings.range - device.user.response.message = param_VBN_Ran(); - break; - - case 25: - //VBN_k s16 adjusted noise constant: pulse width = VB_tau +/- VBN_k - //int32_t device.dither.noise.settings.amplitude - device.user.response.message = param_VBN_k(); - break; - - case 26: - case 27: - case 28: - case 29: - case 30: - case 31: - case 32: - case 33: - case 34: - case 35: - case 36: - case 37: - case 38: - case 39: - case 40: - case 41: - case 42: - //Reserved s16 not used - device.user.response.message = 0; - break; - - case 43: - case 44: - case 45: - case 46: - case 47: - case 48: - //Tmp_bias0[0] ... Tmp_bias0[5] s16 Tmp_bias[6]: an array of shifts of the 0..5 temperature sensors - //? - device.user.response.message = 0; - break; - - case 49: - case 50: - case 51: - case 52: - case 53: - case 54: - //Tmp_scal0[0] ... Tmp_scal0[5] s16 Tmp_scal[6]: an array of the scale coefficients of the 0..5 temperature sensors - //? - device.user.response.message = 0; - break; - - case 55: - //WP_reset dac ttf:PLCS DAC code after reset at heating; value:heater voltage after reset at heating; value=(ttf>>4)/2048*(-12)-1.3; Range -13.2V...10.7V - //int32_t device.plcs.reset.up.state.target - device.user.response.message = param_WP_reset(); - break; - - case 56: - //KSin s16 Gain_Ph_A: initial gain factor of the A channel of photodetector - //uint32_t device.isacs.potentiometers.settings.a - device.user.response.message = 0; - break; - - case 57: - //KCos s16 Gain_Ph_B: initial gain factor of the B channel of photodetector - //uint32_t device.isacs.potentiometers.settings.b - device.user.response.message = 0; - break; - - case 58: - //Header s16 flash memory load validity control value: should be 0x55AA - device.user.response.message = 0x55AA; - break; - - case 59: - //LoadFlash_Enable s16 parameters load switch: 1 - load from the flash 0 - load default parameters (factory) - //? - device.user.response.message = 1; - break; - - case 60: - //SerialNumber u16 serial number of device - // - device.user.response.message = 0; - break; - - case 61: - //WP_start dac not used (ttf:PLCS initial DAC code after switch-on; value:heater voltage after switch-on; value=(ttf>>4)/2048*(-12))-1.3; Range -13.2V...10.7V - device.user.response.message = 0; - break; - - case 62: - //TermoMode u16 device operation mode switch: 0-raw output, 1-thermocompensated output, 2-thermocompensation value only for debug purposes - //? - device.user.response.message = 0; - break; - - case 63: - case 64: - case 65: - case 66: - case 67: - case 68: - case 69: - case 70: - case 71: - case 72: - case 73: - case 74: - case 75: - case 76: - //TemperInt[0] ... TemperInt[13] s16 reserved: should be zero! - // - device.user.response.message = 0; - break; - - case 77: - case 78: - case 79: - case 80: - case 81: - case 82: - case 83: - case 84: - case 85: - case 86: - case 87: - case 88: - case 89: - case 90: - case 91: - case 92: - case 93: - case 94: - case 95: - case 96: - case 97: - case 98: - case 99: - case 100: - case 101: - case 102: - case 103: - case 104: - //TermoFunc[0]...TermoFunc[13] f32 reserved: should be zero! (Hi)/(Lo) - device.user.response.message = 0; - break; - - case 105: - //WP_reset2 dac ttf:PLCS DAC code after reset at cooling; value:heater voltage after reset at cooling; value=(ttf>>4)/2048*(-12)-1.3 - //int32_t device.plcs.reset.down.state.target - device.user.response.message = param_WP_reset2(); - break; - - case 106: - case 107: - //TermoHeatDelta f32 reserved: should be zero! (Lo) - device.user.response.message = 0; - break; - - case 108: - case 109: - //TermoCoolDelta f32 reserved: should be zero! (Lo) - device.user.response.message = 0; - break; - - case 110: - //K_vb_tu s16 slope of dependence of the VB_N division factor from temperature (as though Hz/degree, but in c.u.) - //? - device.user.response.message = 0; - break; - - case 111: - //TemperNormal s16 temperature for which the VB_N division factor of the dither drive is set - //? - device.user.response.message = 0; - break; - - case 112: - //K_WP_rst_heating s16 - //? - device.user.response.message = 0; - break; - - case 113: - //K_WP_rst_cooling s16 slope of dependence of a reset voltage at cooling from temperature (as though Volt/degree, but in c.u. of DAC and temperature sensors) - //? - device.user.response.message = 0; - break; - - case 114: - //WP_transition_step s16 step of change of a heater voltage at resetting - //? - device.user.response.message = 0; - break; - - case 115: - //Reserved s16 not used - device.user.response.message = 0; - break; - - case 116: - //HF_scl_2 s16 HFO scale factor during PLCS reset - //Deprecated: always same as HF_scl - device.user.response.message = param_HF_scl(); - break; - - case 117: - //TemperIntDyn[0] s16 thermal sensor value for first point of thermo error interpolation at heating - //? - device.user.response.message = 0; - break; - - case 118: - //TemperIntDyn[1] s16 thermal sensor value for interim point of thermo error interpolation at heating - //? - device.user.response.message = 0; - break; - - case 119: - //TemperIntDyn[2] s16 thermal sensor value for interim point of thermo error interpolation at heating - //? - device.user.response.message = 0; - break; - - case 120: - //TemperIntDyn[3] s16 thermal sensor value for interim point of thermo error interpolation at heating - //? - device.user.response.message = 0; - break; - - case 121: - //TemperIntDyn[4] s16 thermal sensor value for interim point of thermo error interpolation at heating - //? - device.user.response.message = 0; - break; - - case 122: - //TemperIntDyn[5] s16 thermal sensor value for interim point of thermo error interpolation at heating - //? - device.user.response.message = 0; - break; - - case 123: - //TemperIntDyn[6] s16 thermal sensor value for interim point of thermo error interpolation at heating - //? - device.user.response.message = 0; - break; - - case 124: - //TemperIntDyn[7] s16 thermal sensor value for interim point of thermo error interpolation at heating - //? - device.user.response.message = 0; - break; - - case 125: - //TemperIntDyn[8] s16 thermal sensor value for interim point of thermo error interpolation at heating - //? - device.user.response.message = 0; - break; - - case 126: - //TemperIntDyn[9] s16 thermal sensor value for interim point of thermo error interpolation at heating - //? - device.user.response.message = 0; - break; - - case 127: - //TemperIntDyn[10] s16 thermal sensor value for interim point of thermo error interpolation at heating - //? - device.user.response.message = 0; - break; - - case 128: - //TemperIntDyn[11] s16 thermal sensor value for interim point of thermo error interpolation at heating - //? - device.user.response.message = 0; - break; - - case 129: - //TemperIntDyn[12] s16 thermal sensor value for interim point of thermo error interpolation at heating - //? - device.user.response.message = 0; - break; - - case 130: - //TemperIntDyn[13] s16 thermal sensor value for last point of thermo error interpolation at heating - //? - device.user.response.message = 0; - break; - - case 131: - //ThermoHeatDelta[0] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 132: - //ThermoHeatDelta[0] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 133: - //ThermoHeatDelta[1] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 134: - //ThermoHeatDelta[1] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 135: - //ThermoHeatDelta[2] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 136: - //ThermoHeatDelta[2] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 137: - //ThermoHeatDelta[3] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 138: - //ThermoHeatDelta[3] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 139: - //ThermoHeatDelta[4] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 140: - //ThermoHeatDelta[4] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 141: - //ThermoHeatDelta[5] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 142: - //ThermoHeatDelta[5] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 143: - //ThermoHeatDelta[6] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 144: - //ThermoHeatDelta[6] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 145: - //ThermoHeatDelta[7] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 146: - //ThermoHeatDelta[7] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 147: - //ThermoHeatDelta[8] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 148: - //ThermoHeatDelta[8] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 149: - //ThermoHeatDelta[9] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 150: - //ThermoHeatDelta[9] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 151: - //ThermoHeatDelta[10] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 152: - //ThermoHeatDelta[10] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 153: - //ThermoHeatDelta[11] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 154: - //ThermoHeatDelta[11] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 155: - //ThermoHeatDelta[12] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 156: - //ThermoHeatDelta[12] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 157: - //ThermoHeatDelta[13] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 158: - //ThermoHeatDelta[13] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 159: - //DeltaTempRecalc s16 - //? - device.user.response.message = 0; - break; - - case 160: - //TemperCoolIntDyn[0] s16 thermal sensor value for first point of thermo error interpolation at cooling - //? - device.user.response.message = 0; - break; - - case 161: - //TemperCoolIntDyn[1] s16 thermal sensor value for interim point of thermo error interpolation at cooling - //? - device.user.response.message = 0; - break; - - case 162: - //TemperCoolIntDyn[2] s16 thermal sensor value for interim point of thermo error interpolation at cooling - //? - device.user.response.message = 0; - break; - - case 163: - //TemperCoolIntDyn[3] s16 thermal sensor value for interim point of thermo error interpolation at cooling - //? - device.user.response.message = 0; - break; - - case 164: - //TemperCoolIntDyn[4] s16 thermal sensor value for interim point of thermo error interpolation at cooling - //? - device.user.response.message = 0; - break; - - case 165: - //TemperCoolIntDyn[5] s16 thermal sensor value for interim point of thermo error interpolation at cooling - //? - device.user.response.message = 0; - break; - - case 166: - //TemperCoolIntDyn[6] s16 thermal sensor value for interim point of thermo error interpolation at cooling - //? - device.user.response.message = 0; - break; - - case 167: - //TemperCoolIntDyn[7] s16 thermal sensor value for interim point of thermo error interpolation at cooling - //? - device.user.response.message = 0; - break; - - case 168: - //TemperCoolIntDyn[8] s16 thermal sensor value for interim point of thermo error interpolation at cooling - //? - device.user.response.message = 0; - break; - - case 169: - //TemperCoolIntDyn[9] s16 thermal sensor value for interim point of thermo error interpolation at cooling - //? - device.user.response.message = 0; - break; - - case 170: - //TemperCoolIntDyn[10] s16 thermal sensor value for interim point of thermo error interpolation at cooling - //? - device.user.response.message = 0; - break; - - case 171: - //TemperCoolIntDyn[11] s16 thermal sensor value for interim point of thermo error interpolation at cooling - //? - device.user.response.message = 0; - break; - - case 172: - //TemperCoolIntDyn[12] s16 thermal sensor value for interim point of thermo error interpolation at cooling - //? - device.user.response.message = 0; - break; - - case 173: - //TemperCoolIntDyn[13] s16 thermal sensor value for last point of thermo error interpolation at cooling - //? - device.user.response.message = 0; - break; - - case 174: - //ThermoCoolDelta[0] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 175: - //ThermoCoolDelta[0] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 176: - //ThermoCoolDelta[1] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 177: - //ThermoCoolDelta[1] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 178: - //ThermoCoolDelta[2] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 179: - //ThermoCoolDelta[2] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 180: - //ThermoCoolDelta[3] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 181: - //ThermoCoolDelta[3] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 182: - //ThermoCoolDelta[4] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 183: - //ThermoCoolDelta[4] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 184: - //ThermoCoolDelta[5] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 185: - //ThermoCoolDelta[5] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 186: - //ThermoCoolDelta[6] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 187: - //ThermoCoolDelta[6] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 188: - //ThermoCoolDelta[7] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 189: - //ThermoCoolDelta[7] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 190: - //ThermoCoolDelta[8] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 191: - //ThermoCoolDelta[8] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 192: - //ThermoCoolDelta[9] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 193: - //ThermoCoolDelta[9] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 194: - //ThermoCoolDelta[10] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 195: - //ThermoCoolDelta[10] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 196: - //ThermoCoolDelta[11] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 197: - //ThermoCoolDelta[11] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 198: - //ThermoCoolDelta[12] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 199: - //ThermoCoolDelta[12] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - - case 200: - //ThermoCoolDelta[13] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Hi) - //? - device.user.response.message = 0; - break; - - case 201: - //ThermoCoolDelta[13] tc ttf:value of thermo error per 10kHz cycle; value:value of thermo error for 100 second accumulation (Lo) - //? - device.user.response.message = 0; - break; - /* - case 27: - case 28: - case 29: - case 30: - case 31: - case 32: - case 33: - case 34: - case 35: - case 36: - case 37: - case 38: - case 39: - case 40: - case 41: - case 42: - case 43: - break; - - case 61: - param16 = device.sensor.settings.id; - break; - - case 64: - case 65: - case 66: - case 67: - case 68: - case 69: - case 70: - case 71: - case 72: - case 73: - case 74: - case 75: - case 76: - case 77: - case 78: - case 79: - case 81: - case 82: - case 84: - case 85: - case 87: - case 88: - case 90: - case 91: - case 93: - case 94: - case 96: - case 97: - case 99: - case 100: - case 102: - case 103: - case 105: - case 106: - case 108: - case 109: - case 111: - case 112: - case 114: - case 115: - case 117: - case 118: - case 121: - case 122: - case 124: - case 125: - //reserved - break; - */ - default: DecodeFail(); - } -} - -void DecodeMParamW(void) { - uint8_t index = Decode8(); if (device.user.decoder.error) return; - uint8_t param = Decode16(); if (device.user.decoder.error) return; - DecodeCRC(); if (device.user.decoder.error) return; - - switch (index){ - case 0: - device.user.address = param; - break; - - case 27: - case 28: - case 29: - case 30: - case 31: - case 32: - case 33: - case 34: - case 35: - case 36: - case 37: - case 38: - case 39: - case 40: - case 41: - case 42: - case 43: - break; - - case 61: - device.sensor.settings.id = param; - break; - - case 64: - case 65: - case 66: - case 67: - case 68: - case 69: - case 70: - case 71: - case 72: - case 73: - case 74: - case 75: - case 76: - case 77: - case 78: - case 79: - case 81: - case 82: - case 84: - case 85: - case 87: - case 88: - case 90: - case 91: - case 93: - case 94: - case 96: - case 97: - case 99: - case 100: - case 102: - case 103: - case 105: - case 106: - case 108: - case 109: - case 111: - case 112: - case 114: - case 115: - case 117: - case 118: - case 121: - case 122: - case 124: - case 125: - /*reserved*/ - break; - - default: DecodeFail(); - } -} - -void DecodeMRate2(void) { - //TODO -} - -void DecodeMRate3(void) { - //TODO -} - -//Deprecated -void DecodeMe5raW(void) { - //TODO -} \ No newline at end of file