BOOL WEIGHT_Process(TICK timer, BYTE * argument)

BOOL WEIGHT_Process(TICK timer, BYTE * argument)
{
 DWORD	Data;
 static TICK tick = 0;
 static BYTE cyclic = 0;
 static BYTE flag_overflow = 0;
 static BYTE flag_underflow = 1;
 static LONG_VAL	lWeight;	
 static long	lTempWeight, lTempWeight2;
 WORD_VAL wvDCID; 
 BYTE	i, j, flag, bWeight[4];
 static BYTE measure = 0;
 long addr;


 if((TickGetDiff(TickGet(), tick) >= timer) && AppFlag.bits.temp && !ModemGsm.Signal.Control.Process) tick = TickGet();  else return TRUE;  if((argument[0] && argument[1] && !argument[2]) || (argument[0] && argument[1])){   DelayMs(2000);   if(cyclic == 0){ #if defined(__SPI_AD77xx__)    if(SPI_AD77xx_ReadData(SPI_AD77xx_PORT_1, &Data)){ #else    if(HX711_ReadData(SPI_AD77xx_PORT_1, &Data)){ #endif #if defined SYSTEM_DEBUG           sprintf(bTemp, "\r\nprocess segments A = %ld \r\n", Data);     UART_PutData(PRINT_TEXT, bTemp, strlen(bTemp)); #endif #if defined OCWB_GW     if(Data & 0x800000) flag = 1;     else flag = 0;     Data = (DWORD)((long)(Data&0xff7fffff) + Weight[0].CalibZero);     if(flag && !(Data & 0x800000)) Data = 0;     else if(!flag && (Data & 0x800000)) Data = 0;     Data = Data&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) Data * 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 - 40L) || lTempWeight > (lWeight.Val + 40L)){      lTempWeight = lWeight.Val;      return TRUE;     }     Weight[0].Value = lWeight.Val; // if(Weight[0].Value > Weight[0].Max) Weight[0].Value = Weight[0].Max;     measure |= 0x01;     if(WEIGHT_NumberActive == 2) cyclic = 1;    }   } #if defined(WEIGHT2_ENABLE)   if(cyclic == 1 && (WEIGHT_NumberActive == 2 || WEIGHT_NumberActive == 3)){ #if defined(__SPI_AD77xx__)    if(SPI_AD77xx_ReadData(SPI_AD77xx_PORT_2, &Data)){ #else    if(HX711_ReadData(SPI_AD77xx_PORT_2, &Data)){ #endif #if defined SYSTEM_DEBUG           sprintf(bTemp, "\r\nprocess segments B = %ld \r\n", Data);     UART_PutData(PRINT_TEXT, bTemp, strlen(bTemp)); #endif #if defined OCWB_GW     if(Data & 0x800000) flag = 1;     else flag = 0;     Data = (DWORD)((long)(Data&0xff7fffff) + Weight[1].CalibZero);     if(flag && !(Data & 0x800000)) Data = 0;     else if(!flag && (Data & 0x800000)) Data = 0;     Data = Data&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) Data * 1000.0) / Weight[1].Calib) - Weight[1].Tare + lTempWeight2 ; //1g     if(lTempWeight < (lWeight.Val - 40L) || lTempWeight > (lWeight.Val + 40L)){      lTempWeight = lWeight.Val;      return TRUE;     }     Weight[1].Value = lWeight.Val; // if(Weight[1].Value > Weight[1].Max) Weight[1].Value = Weight[1].Max;     measure |= 0x01;     if(WEIGHT_NumberActive == 3) cyclic = 2;     else cyclic = 0;    }   } #endif #if defined(WEIGHT3_ENABLE)   if(cyclic == 2 && WEIGHT_NumberActive == 3){ #if defined(__SPI_AD77xx__)    if(SPI_AD77xx_ReadData(SPI_AD77xx_PORT_3, &Data)){ #else    if(HX711_ReadData(SPI_AD77xx_PORT_1, &Data)){ #endif     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) Data * 1000.0) / Weight[2].Calib) - Weight[2].Tare + lTempWeight2 ; //1g     if(lTempWeight < (lWeight.Val - 40L) || lTempWeight > (lWeight.Val + 40L)){      lTempWeight = lWeight.Val;      return TRUE;     }     Weight[2].Value = lWeight.Val;     if(Weight[2].Value > Weight[2].Max) Weight[2].Value = Weight[2].Max;     measure |= 0x01;     cyclic = 0;    }   } #endif  }  if(argument[0] && argument[1]){   if(measure == 0x01) WEIGHT_Flag = TRUE;   if( WEIGHT_Flag ){    for(i=0; i<WEIGHT_NumberActive; i++){     if(i == 0){      wvDCID.byte.HB = DCID[SPI_AD77xx_ELEMENT_1][0];      wvDCID.byte.LB = DCID[SPI_AD77xx_ELEMENT_1][1];     } #if defined(WEIGHT2_ENABLE)     else if(i == 1){      wvDCID.byte.HB = DCID[SPI_AD77xx_ELEMENT_2][0];      wvDCID.byte.LB = DCID[SPI_AD77xx_ELEMENT_2][1];     } #endif #if defined(WEIGHT3_ENABLE)     else if(i == 2){      wvDCID.byte.HB = DCID[SPI_AD77xx_ELEMENT_3][0];      wvDCID.byte.LB = DCID[SPI_AD77xx_ELEMENT_3][1];     } #endif     lWeight.Val = Weight[i].Value;     bWeight[0] = lWeight.byte.MB;     bWeight[1] = lWeight.byte.UB;     bWeight[2] = lWeight.byte.HB;     bWeight[3] = lWeight.byte.LB;     for(j=0; j < 2; j++){      if(Weight[i].EventState[j] == WEIGHT_NO_INIT){       if(Weight[i].Value > Weight[i].RangeMax[j]) Weight[i].EventState[j] = WEIGHT_OVER;       else Weight[i].EventState[j] = WEIGHT_UNDER;      }      else if(Weight[i].EventState[j] == WEIGHT_UNDER){       if(Weight[i].Value > Weight[i].RangeMax[j]){        Weight[i].EventState[j] = WEIGHT_OVER;        API_PutEvent(wvDCID.Val, AE_WEIGHT_OVER, bWeight, 4);       }      }      else if(Weight[i].EventState[j] == WEIGHT_OVER){       if(Weight[i].Value < Weight[i].RangeMin[j]){        Weight[i].EventState[j] = WEIGHT_UNDER;        API_PutEvent(wvDCID.Val, AE_WEIGHT_UNDER, bWeight, 4);       }      }     }    }    AppFlag.bits.event_weight_ok = TRUE;   }  }  return TRUE; }