uint8_t validateCrc(bufferStruct buffer){ uint16_t crc = (buffer.buffer[buffer.bufferLength-1])|(buffer.buffer[buffer.bufferLength-2]<<8); uint8_t ack = checkCrc(buffer.bufferLength-2, buffer.buffer, crc); if(ack){ return 1; } return 0; }
/********************************************************************************************************* ** Function name: Recv ** Descriptions: get data, return length of data *********************************************************************************************************/ unsigned char LightCom::Recv(unsigned char *rDta) { int count = rawLen; int count_data = 0; unsigned char revData[20]; count_data = (count)/9; // here cmpOneZero = COMONE; for(int i = 0; i<count_data; i++) { unsigned char tmp = 0; for(int j = 1; j<25; j++) { if(REVOK == checkCrc(&rawBuf[9*i], cmpOneZero, &tmp)) { #if __DEBUG __PRINTLN("CRC OK"); __PRINT("tmp = "); __PRINTLN(tmp); #endif revData[i+D_DATA] = tmp; break; } else { if(j%2 == 0) { cmpOneZero += j; } else { cmpOneZero -= j; } #if __DEBUG __PRINTLN("**********HERE***********"); __PRINT("cmpOneZero = "); __PRINTLN(cmpOneZero); __PRINTLN("**********HERE***********"); #endif } } } revData[D_DATALEN] = count_data; for(int i = 0; i<revData[D_DATALEN]; i++) { rDta[i] = revData[D_DATA+i]; } #if __DEBUG __PRINT("\r\n*************************************************************\r\n"); __PRINT("data_len = "); __PRINTLN(revData[D_DATALEN]); for(int i = 0; i<revData[D_DATALEN]; i++) { __PRINT(revData[D_DATA+i]);__PRINT("\t"); } __PRINT("\r\n*************************************************************\r\n"); #endif clear(); // Receive the next value return revData[D_DATALEN]; }