BOOL WEIGHT_ReadWeight(WORD _Port, long * _Weight)

BOOL WEIGHT_ReadWeight(WORD _Port, long * _Weight)
{
 BYTE i, j, flag;
 DWORD temp1, temp2;
 DWORD_VAL	dwvValue;
 static LONG_VAL	lWeight;	
 static long	lTempWeight, lTempWeight2;
 DWORD	dwTempBuff[6];

#if !defined(OCWB_GW)  if(!SPI_AD77xx_EndConversion()) return FALSE; #endif  if(_Port == SPI_AD77xx_PORT_1) lTempWeight = Weight[0].Value; #if defined(SPI_AD77xx_PORT_2)  else if(_Port == SPI_AD77xx_PORT_2 && (WEIGHT_NumberActive == 2 || WEIGHT_NumberActive == 3)) lTempWeight = Weight[1].Value; #endif #if defined(SPI_AD77xx_PORT_3)  else if(_Port == SPI_AD77xx_PORT_3 && WEIGHT_NumberActive == 3) lTempWeight = Weight[2].Value; #endif  else return FALSE;  j = 100;  while(j++){ #if !defined(OCWB_GW)      for(i=0; i<10; i++){ //nova konverzia    if(SPI_AD77xx_ReadData(_Port, &dwvValue.Val)) break;    DelayMs(100);   }   if(i == 10) return FALSE; #else   for(i=0; i<6; i++){    if(HX711_ReadData(_Port, &dwvValue.Val)){     dwTempBuff[i] = dwvValue.Val;     DelayMs(5);    }    else return FALSE;   }   dwvValue.Val = (dwTempBuff[0] + dwTempBuff[1] + dwTempBuff[2] + dwTempBuff[3] + dwTempBuff[4] + dwTempBuff[5])/6; #endif   if(_Port == SPI_AD77xx_PORT_1){ #if defined OCWB_GW    if(j == 101) temp1 = dwvValue.Val;    else if(j == 102) temp2 = dwvValue.Val;    if(dwvValue.Val & 0x800000) flag = 1;    else flag = 0;    dwvValue.Val = (DWORD)((long)(dwvValue.Val&0xff7fffff) + Weight[0].CalibZero);    if(flag && !(dwvValue.Val & 0x800000)) dwvValue.Val = 0;    else if(!flag && (dwvValue.Val & 0x800000)) dwvValue.Val = 0;    dwvValue.Val = dwvValue.Val&0xff7fffff; #endif    if(CtmuTemperature[2].Error) lWeight.Val = Weight[0].CalibTemp;    else lWeight.Val = CtmuTemperature[2].Value;    lTempWeight2 = (long)round((double)((Weight[0].CalibTemp - lWeight.Val)/100.0 * Weight[0].TempConst));       lWeight.Val = (long) (((double) dwvValue.Val * 1000.0) / (double)Weight[0].Calib) + lTempWeight2 ; //1g    if((lWeight.Val - 10) < lTempWeight2) lWeight.Val = 0;     lWeight.Val = lWeight.Val - Weight[0].Tare;    if(lTempWeight < (lWeight.Val - 30L) || lTempWeight > (lWeight.Val + 30L)){     lTempWeight = lWeight.Val;     continue;    }    Weight[0].Value = lWeight.Val;    WEIGHT_Flag = TRUE; // if(Weight[0].Value > Weight[0].Max) Weight[0].Value = Weight[0].Max;    *_Weight = Weight[0].Value;    break;   }  #if defined(SPI_AD77xx_PORT_2)   else if(_Port == SPI_AD77xx_PORT_2){ #if defined OCWB_GW    if(dwvValue.Val & 0x800000) flag = 1;    else flag = 0;    dwvValue.Val = (DWORD)((long)(dwvValue.Val&0xff7fffff) + Weight[1].CalibZero);    if(flag && !(dwvValue.Val & 0x800000)) dwvValue.Val = 0;    else if(!flag && (dwvValue.Val & 0x800000)) dwvValue.Val = 0;    dwvValue.Val = dwvValue.Val&0xff7fffff; #endif    if(CtmuTemperature[2].Error) lWeight.Val = Weight[1].CalibTemp;    else lWeight.Val = CtmuTemperature[2].Value;    lTempWeight2 = (long)round((double)((Weight[1].CalibTemp - lWeight.Val)/100.0 * Weight[1].TempConst));       lWeight.Val = (long) (((float) dwvValue.Val * 1000.0) / Weight[1].Calib) - Weight[1].Tare + lTempWeight2 ; //1g    if(lTempWeight < (lWeight.Val - 30L) || lTempWeight > (lWeight.Val + 30L)){     lTempWeight = lWeight.Val;     continue;    }    Weight[1].Value = lWeight.Val;    WEIGHT_Flag = TRUE; // if(Weight[1].Value > Weight[1].Max) Weight[1].Value = Weight[1].Max;    *_Weight = Weight[1].Value;    break;   }  #endif  #if defined(SPI_AD77xx_PORT_3)   else if(_Port == SPI_AD77xx_PORT_3){    if(CtmuTemperature[2].Error) lWeight.Val = Weight[2].CalibTemp;    else lWeight.Val = CtmuTemperature[2].Value;    lTempWeight2 = (long)round((double)((Weight[2].CalibTemp - lWeight.Val)/100.0 * Weight[2].TempConst));       lWeight.Val = (long) (((float) dwvValue.Val * 1000.0) / Weight[2].Calib) - Weight[2].Tare + lTempWeight2 ; //1g    if(lTempWeight < (lWeight.Val - 30L) || lTempWeight > (lWeight.Val + 30L)){     lTempWeight = lWeight.Val;     continue;    }    Weight[2].Value = lWeight.Val;    WEIGHT_Flag = TRUE;    if(Weight[2].Value > Weight[2].Max) Weight[2].Value = Weight[2].Max;    *_Weight = Weight[2].Value;    break;   }  #endif  }  if(j == 0) return FALSE; #if defined SYSTEM_DEBUG        sprintf(bTemp, "\r\nsegments = %ld %ld\r\n", temp1, temp2);   UART_PutData(PRINT_TEXT, bTemp, strlen(bTemp)); #endif  return TRUE; }