Esempio n. 1
0
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;
}
Esempio n. 2
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];
}