|  |  | @ -288,32 +288,30 @@ class Inverter { | 
			
		
	
		
			
				
					|  |  |  |                 uint8_t  end = ptr + rec->assign[pos].num; | 
			
		
	
		
			
				
					|  |  |  |                 uint16_t div = rec->assign[pos].div; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                 if(NULL != rec) { | 
			
		
	
		
			
				
					|  |  |  |                     if(CMD_CALC != div) { | 
			
		
	
		
			
				
					|  |  |  |                         uint32_t val = 0; | 
			
		
	
		
			
				
					|  |  |  |                         do { | 
			
		
	
		
			
				
					|  |  |  |                             val <<= 8; | 
			
		
	
		
			
				
					|  |  |  |                             val |= buf[ptr]; | 
			
		
	
		
			
				
					|  |  |  |                         } while(++ptr != end); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                         if ((FLD_T == rec->assign[pos].fieldId) || (FLD_Q == rec->assign[pos].fieldId) || (FLD_PF == rec->assign[pos].fieldId)) { | 
			
		
	
		
			
				
					|  |  |  |                             // temperature, Qvar, and power factor are a signed values
 | 
			
		
	
		
			
				
					|  |  |  |                             rec->record[pos] = ((REC_TYP)((int16_t)val)) / (REC_TYP)(div); | 
			
		
	
		
			
				
					|  |  |  |                         } else if (FLD_YT == rec->assign[pos].fieldId) { | 
			
		
	
		
			
				
					|  |  |  |                             rec->record[pos] = ((REC_TYP)(val) / (REC_TYP)(div)) + ((REC_TYP)config->yieldCor[rec->assign[pos].ch-1]); | 
			
		
	
		
			
				
					|  |  |  |                         } else if (FLD_YD == rec->assign[pos].fieldId) { | 
			
		
	
		
			
				
					|  |  |  |                             float actYD = (REC_TYP)(val) / (REC_TYP)(div); | 
			
		
	
		
			
				
					|  |  |  |                             uint8_t idx = rec->assign[pos].ch - 1; | 
			
		
	
		
			
				
					|  |  |  |                             if (mLastYD[idx] > actYD) | 
			
		
	
		
			
				
					|  |  |  |                                 mOffYD[idx] += mLastYD[idx]; | 
			
		
	
		
			
				
					|  |  |  |                             mLastYD[idx] = actYD; | 
			
		
	
		
			
				
					|  |  |  |                             rec->record[pos] = mOffYD[idx] + actYD; | 
			
		
	
		
			
				
					|  |  |  |                         } else { | 
			
		
	
		
			
				
					|  |  |  |                             if ((REC_TYP)(div) > 1) | 
			
		
	
		
			
				
					|  |  |  |                                 rec->record[pos] = (REC_TYP)(val) / (REC_TYP)(div); | 
			
		
	
		
			
				
					|  |  |  |                             else | 
			
		
	
		
			
				
					|  |  |  |                                 rec->record[pos] = (REC_TYP)(val); | 
			
		
	
		
			
				
					|  |  |  |                         } | 
			
		
	
		
			
				
					|  |  |  |                 if(CMD_CALC != div) { | 
			
		
	
		
			
				
					|  |  |  |                     uint32_t val = 0; | 
			
		
	
		
			
				
					|  |  |  |                     do { | 
			
		
	
		
			
				
					|  |  |  |                         val <<= 8; | 
			
		
	
		
			
				
					|  |  |  |                         val |= buf[ptr]; | 
			
		
	
		
			
				
					|  |  |  |                     } while(++ptr != end); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                     if ((FLD_T == rec->assign[pos].fieldId) || (FLD_Q == rec->assign[pos].fieldId) || (FLD_PF == rec->assign[pos].fieldId)) { | 
			
		
	
		
			
				
					|  |  |  |                         // temperature, Qvar, and power factor are a signed values
 | 
			
		
	
		
			
				
					|  |  |  |                         rec->record[pos] = ((REC_TYP)((int16_t)val)) / (REC_TYP)(div); | 
			
		
	
		
			
				
					|  |  |  |                     } else if (FLD_YT == rec->assign[pos].fieldId) { | 
			
		
	
		
			
				
					|  |  |  |                         rec->record[pos] = ((REC_TYP)(val) / (REC_TYP)(div)) + ((REC_TYP)config->yieldCor[rec->assign[pos].ch-1]); | 
			
		
	
		
			
				
					|  |  |  |                     } else if (FLD_YD == rec->assign[pos].fieldId) { | 
			
		
	
		
			
				
					|  |  |  |                         float actYD = (REC_TYP)(val) / (REC_TYP)(div); | 
			
		
	
		
			
				
					|  |  |  |                         uint8_t idx = rec->assign[pos].ch - 1; | 
			
		
	
		
			
				
					|  |  |  |                         if (mLastYD[idx] > actYD) | 
			
		
	
		
			
				
					|  |  |  |                             mOffYD[idx] += mLastYD[idx]; | 
			
		
	
		
			
				
					|  |  |  |                         mLastYD[idx] = actYD; | 
			
		
	
		
			
				
					|  |  |  |                         rec->record[pos] = mOffYD[idx] + actYD; | 
			
		
	
		
			
				
					|  |  |  |                     } else { | 
			
		
	
		
			
				
					|  |  |  |                         if ((REC_TYP)(div) > 1) | 
			
		
	
		
			
				
					|  |  |  |                             rec->record[pos] = (REC_TYP)(val) / (REC_TYP)(div); | 
			
		
	
		
			
				
					|  |  |  |                         else | 
			
		
	
		
			
				
					|  |  |  |                             rec->record[pos] = (REC_TYP)(val); | 
			
		
	
		
			
				
					|  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | 
 |