123

Dependencies:   mbed

Fork of LG by igor Apu

Revision:
177:672ef279c8e0
Parent:
173:7f938afb0447
--- a/DeviceUserProtocolDecoder.c	Thu Jun 30 09:04:22 2016 +0000
+++ b/DeviceUserProtocolDecoder.c	Sun Jul 03 13:40:48 2016 +0000
@@ -10,6 +10,7 @@
 void InitUserProtocolDecoderState(void) {
   device.user.decoder.error = 0;
   device.user.decoder.count = 0;
+  device.user.decoder.last = 0;
   device.user.decoder.canceled = 1;
   device.user.decoder.address = 0;
   device.user.decoder.version = 0;
@@ -21,7 +22,7 @@
 void DeviceStartUserProtocolDecoder(void) {
 }
 
-void DeviceDecodeUserRequests(void) {
+void userDecodeRequests(void) {
   do {
     DecodeStart(); if (device.user.decoder.error) continue;
     DecodeAddress(); if (device.user.decoder.error) continue;
@@ -38,12 +39,14 @@
       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: break;
+      case M0_CNT_R: DecodeMCntR(); break;
       case M0_GPH_W: DecodeMGphW(); break;
       //case M0_FLG_R: break;
       case M0_PARAM_W: DecodeMParamW(); break;
@@ -58,11 +61,15 @@
   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
+    //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;
+    if (device.user.decoder.count > device.user.decoder.last) {
+      //sprintf(device.service.buffer, "+ %02x %04d\r\n", param, device.user.decoder.position); WriteConcole(); //Development message
+      device.user.decoder.last = device.user.decoder.count;
+    }
     return param;
   } else {
     DecodeCancel();
@@ -99,6 +106,7 @@
     if (param != 0xcc) DecodeFail();
     
     device.user.response.type = RESPONSE_IMMEDIATE; //Default type
+    device.user.response.packet = 0;
   }
 }
 
@@ -132,6 +140,7 @@
   if (device.user.request.buffer.start == device.user.request.buffer.end) device.user.request.buffer.empty = 1;
   
   device.user.decoder.count = 0;
+  device.user.decoder.last = 0;
   if (device.user.decoder.error == 0) {
     device.user.response.code = device.user.decoder.code;
     
@@ -362,48 +371,48 @@
 }
 
 void DecodeDeviceMode(void) {
-  /*
-        *** Description ***
-        Elio5_cmd_en.pdf:
-        Device_Mode - device operating modes:
-        The device operating mode is encoded by 4 low bits (0..3) of byte 4.
-          0 – reserved;
-          1 – internal latch mode: latch by pulses 10 kHz (power on default mode);
-          2 - internal latch mode: latch by signed meander pulses;
-          3 – external latch mode with B_Delta_PS format data and RS422 request by command B_Delta_PS;
-          4 – external latch mode with B_Delta_PS format data and latch pulse request;
-          5 – external latch mode with B_Delta_BINS format data and RS422 request by command B_Delta_BINS;
-          6 – external latch mode with B_Delta_BINS format data and latch pulse request;
-    
-        *** Command action ***
-        commandset_asm.asm - exec_CMD:
-        CMD_Mode = 3;
-          
-        commandset.c - B_Dev_Mode(void):
-        Device_Mode = rcv_buf[3] & 0x00ff; //e. read the byte of command parameter from the receiver buffer and write it to the counter mode register  //r. и записываем в регистр режима счетчиков
-        trm_cycl = 0;                      //e. periodic data transmission is not needed //r. периодическая передача ответа не требуется
-  
-        commandset_asm.asm - Mk_AskDev():
-        num_of_par = 2;                //e. 2 parameters output //r. выводить два параметра
-        addr_param[0] = &Device_Mode;  //e. address of the counter mode register (intenal latch, external latch, etc.) //r. адрес регистра режима счетчиков (внутр., внешняя защелка и т.д.)
-        addr_param[1] = &SRgR;         //e. address of the mode register of the processor card //r. адрес регистра режима платы процессора
-        size_param[0] = 2;             //e. size of the counter mode register - 2 bytes //r. размер регистра режима счетчиков - 2 байта
-        size_param[1] = 2;             //e. size of the mode register of the processor card //r. размер регистра режима платы процессора
-        trm_cycl = 0;                  //e. forbid cyclic transmission of the parameter //r. запретить передачу параметра в цикле
-        trm_ena = 1;                   //e. allow operation of the transmitter //r. разрешить работу передатчика
-      */
   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: device.latch.mode = DeviceLatch10kHz; break;
-      case 2: device.latch.mode = DeviceLatchMeander; break;
-      case 3: device.latch.mode = DeviceLatchRS422; device.latch.format = DeviceLatchFormatDeltaPS; break;
-      case 4: device.latch.mode = DeviceLatchPin;   device.latch.format = DeviceLatchFormatDeltaPS; break;
-      case 5: device.latch.mode = DeviceLatchRS422; device.latch.format = DeviceLatchFormatDeltaBINS; break;
-      case 6: device.latch.mode = DeviceLatchPin;   device.latch.format = DeviceLatchFormatDeltaBINS; break;
+      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;
     }
-    //device.host.response.type = RESPONSE_IMMEDIATE; //Default type
   } else {
     DecodeFail();
   }
@@ -423,6 +432,9 @@
 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;
@@ -439,18 +451,16 @@
       device.user.request.rate = 38400;
     }
     if (mode & 0x01) { //DELTA_SF
-      device.latch.reset = 0;
+      device.counters.latch.state.reset = 0;
     } else {
-      device.latch.reset = 1;
+      device.counters.latch.state.reset = 1;
     }
-    //device.latch.mode = DeviceLatchRS422; //Have to set by Device Mode command?
-    if (device.user.response.code == DELTA_PS) device.latch.format = DeviceLatchFormatDeltaPS;
-    else if (device.user.response.code == DELTA_BINS) device.latch.format = DeviceLatchFormatDeltaBINS;
-    else if (device.user.response.code == DELTA_SF) device.latch.format = DeviceLatchFormatDeltaSF;
-    //TODO: Latch(); //Remember counters for transmission, reset counters
+    
     if (device.user.decoder.address == device.user.address) {
       if (mode & 0x80) {
-        //TODO: reset device.counters here (or already done in Latch())
+        //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
@@ -467,6 +477,8 @@
   if (version == 0x99) {
     DecodeCRC(); if (device.user.decoder.error) return;
     device.user.decoder.version = 0;
+    
+    sprintf(device.service.buffer, "MaintenanceMode()\r\n"); WriteConcole(); //Development message
   } else {
     DecodeFail();
   }
@@ -527,10 +539,40 @@
 
 void DecodeMRate(void) {
   uint8_t mode = Decode8(); if (device.user.decoder.error) return;
-  if ((mode && 0x18) == 0){
+  if ((mode & 0x1f) == 1){
     DecodeCRC(); if (device.user.decoder.error) return;
     
-    device.user.response.code |= mode & 0x07;
+    sprintf(device.service.buffer, "MRate %02x\r\n", mode); WriteConcole(); //Development message
+    
+    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;
+    }
+    
+    if (mode & 0x80) {
+      //Reset device counters here
+      device.counters.dither.state.angle = 0;
+      device.counters.meander.state.angle[0] = 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
+    }
+  } 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;
@@ -554,7 +596,7 @@
   } else {
     DecodeFail();
   }
-}
+}*/
 
 void DecodeMStymul(void) {
   uint8_t param = Decode8(); if (device.user.decoder.error) return;
@@ -563,6 +605,8 @@
     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;
     device.user.response.rate = 38400;
     
@@ -615,23 +659,27 @@
   while (1); //Wait watch dog reset
 }
 
-void DecodeMControlRead(void) {
+void DecodeMCtlR(void) {
   uint8_t param = Decode8(); if (device.user.decoder.error) return;
   DecodeCRC(); if (device.user.decoder.error) return;
-    
-  if (param & 60 == 0)
+  
+  sprintf(device.service.buffer, "MCtlR %02x\r\n", param); WriteConcole(); //Development message
+  
+  if (param & 0x60 == 0)
     device.user.response.rate = 38400;
   else
     device.user.response.rate = 115200;
-    
+  
   device.user.response.code |= param & 0x10;
 }
 
-void DecodeMControlWrite(void) {
+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 & 60 == 0)
+  if (param & 0x60 == 0)
     device.user.response.rate = 38400;
   else
     device.user.response.rate = 115200;
@@ -721,7 +769,20 @@
 }
 
 void DecodeMCntR(void) {
-  //TODO
+  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)
+    device.user.response.rate = 38400;
+  else
+    device.user.response.rate = 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
+  }
 }
 
 void DecodeMFlgR(void) {
@@ -751,12 +812,921 @@
   uint8_t index = Decode8(); if (device.user.decoder.error) return;
   DecodeCRC(); if (device.user.decoder.error) return;
   
-  uint16_t param16;
+  sprintf(device.service.buffer, "MParamR %02x\r\n", index); WriteConcole(); //Development message
+  
   switch (index){
     case 0:
-      param16 = device.user.address;
+      //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.state.reference
+      device.user.response.message = 0; //TODO: Expected ADC code, currently [V]
+    break;
+    
+    case 2:
+      //HF_scl s16 HFO gain factor
+      //int32_t device.isacs.regulator.state.scale
+      device.user.response.message = (device.isacs.regulator.state.scale >> 16); //TODO: Expected integer code, currently in 16.16
+    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.state.max
+      device.user.response.message = 0; //TODO: Expected DAC code, currently [V] 16.16
+    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.state.min
+      device.user.response.message = 0; //TODO: Expected DAC code, currently [V] 16.16
+    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 = 0;
+    break;
+    
+    case 8:
+      //WP_scl s16 PLCS gain factor (1.15) 5..20
+      //int32_t device.plcs.regulator.scale
+      device.user.response.message = 0;
+    break;
+    
+    case 9:
+      //WP_mdy s16 PLCS reset delay in 10kHz cycles
+      //device.plcs.reset.state.?
+      device.user.response.message = 0;
+    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.user.response.message = 0;
+    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.user.response.message = 0;
+    break;
+    
+    case 12:
+      //VB_phs s16 the phase delay parameter of the dither drive PLL
+      //?
+      device.user.response.message = 0;
+    break;
+      
+    case 13:
+      //VB_scl s16 the gain factor (1.15) of the dither drive PLL
+      //device.dither.frequency.state.scale
+      device.user.response.message = 0;
+    break;
+      
+    case 14:
+      //VB_N vbd ttf:dither drive oscillation central frequency divider 7680000/F; value:dither drive central oscillation frequency
+      //device.dither.frequency.state.frequency
+      device.user.response.message = 0;
+    break;
+      
+    case 15:
+      //VB_Nmin vbd ttf:minimum dither drive oscillation frequency divider 7680000/F; value:maximum dither drive oscillation frequency
+      //device.dither.frequency.state.max
+      device.user.response.message = 0;
+    break;
+      
+    case 16:
+      //VB_Nmax vbd ttf:maximum dither drive oscillation frequency divider 7680000/F; value:minimum dither drive oscillation frequency
+      //device.dither.frequency.state.min
+      device.user.response.message = 0;
+    break;
+      
+    case 17:
+      //VB_Fdf s32 double output frequency (Hi)
+      //device.dither.amplitude.state.frequency
+      device.user.response.message = 0;
+    break;
+      
+    case 18:
+      //VB_Fdf s32 double output frequency (Lo)
+      //device.dither.amplitude.state.frequency
+      device.user.response.message = 0;
+    break;
+      
+    case 19:
+      //VB_Fsc s16 the gain factor of the frequency regulator
+      //device.dither.amplitude.state.frequency.scale
+      device.user.response.message = 0;
+    break;
+      
+    case 20:
+      //VB_Tmin tau minimum pulse width of the dither drive; value=ttf/15360000 in seconds
+      //device.dither.amplitude.state.min
+      device.user.response.message = 0;
+    break;
+      
+    case 21:
+      //VB_Tmax tau maximum pulse width of the dither drive; value=ttf/15360000 in seconds
+      //device.dither.amplitude.state.max
+      device.user.response.message = 0;
+    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.dither.pulse.state.width
+      device.user.response.message = 0;
+    break;
+      
+    case 23:
+      //VBN_Tzd s16 adjusted noise period
+      //int32_t device.dither.noise.state.period
+      device.user.response.message = 0;
+    break;
+      
+    case 24:
+      //VBN_Ran s16 range of the random component of noise
+      //int32_t device.dither.noise.state.range
+      device.user.response.message = 0;
+    break;
+      
+    case 25:
+      //VBN_k s16 adjusted noise constant
+      //int32_t device.dither.noise.state.amplitude
+      device.user.response.message = 0;
+    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:
+      //Tmp_bias0[0] s16 Tmp_bias[6]: an array of shifts of the 0..5 temperature sensors
+      //?
+      device.user.response.message = 0;
+    break;
+      
+    case 44:
+      //Tmp_bias0[1] s16
+      //?
+      device.user.response.message = 0;
+    break;
+      
+    case 45:
+      //Tmp_bias0[2] s16
+      //?
+      device.user.response.message = 0;
+    break;
+      
+    case 46:
+      //Tmp_bias0[3] s16
+      //?
+      device.user.response.message = 0;
+    break;
+      
+    case 47:
+      //Tmp_bias0[4] s16
+      //?
+      device.user.response.message = 0;
+    break;
+      
+    case 48:
+      //Tmp_bias0[5] s16
+      //?
+      device.user.response.message = 0;
+    break;
+      
+    case 49:
+      //Tmp_scal0[0] s16 Tmp_scal[6]: an array of the scale coefficients of the 0..5 temperature sensors
+      //?
+      device.user.response.message = 0;
+    break;
+      
+    case 50:
+      //Tmp_scal0[1] s16
+      //?
+      device.user.response.message = 0;
+    break;
+      
+    case 51:
+      //Tmp_scal0[2] s16
+      //?
+      device.user.response.message = 0;
+    break;
+      
+    case 52:
+      //Tmp_scal0[3] s16
+      //?
+      device.user.response.message = 0;
+    break;
+      
+    case 53:
+      //Tmp_scal0[4] s16
+      //?
+      device.user.response.message = 0;
+    break;
+      
+    case 54:
+      //Tmp_scal0[5] s16
+      //?
+      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.levels.upper
+      device.user.response.message = 0;
+    break;
+      
+    case 56:
+      //KSin s16 Gain_Ph_A: initial gain factor of the A channel of photodetector
+      //uint32_t device.isacs.potentiometers.state.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.state.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.levels.lower
+      device.user.response.message = 0;
+    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 
+      //?
+      device.user.response.message = 0;
+    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:
@@ -826,9 +1796,9 @@
     case 122:
     case 124:
     case 125:
-      /*reserved*/
+      //reserved
     break;
-    
+    */
     default: DecodeFail();
   }
 }