/* * @sn int ReceiveData(char * data,int * data_len) * @brief receive data and peel off the ransmition protocol * @param data : store the received data * @param data_len : store the length of the data * @return @li FAIL * @li SUCC * @sa */ int ReceiveData(char * data, int * data_len) { int dataLen = 0, received_len = 0; char buffer[PACK_BUF_LEN]; memset(buffer, 0, sizeof(buffer)); //read STX if(portread(AUX1, 1, buffer, TLVP_TIMEOUT) != 1) { return FAIL; } if(buffer[0] != TLVP_STX) { return FAIL; } received_len += 1; //read DATA_LEN if((portread(AUX1, 2, &buffer[received_len], TLVP_TIMEOUT) != 2)) { return FAIL; } dataLen = 100*BcdToByte(buffer[1]) + BcdToByte(buffer[2]); if((dataLen < 0) || (dataLen > (PACK_BUF_LEN - 5))) { return FAIL; } received_len += 2; //read DATA if(portread(AUX1, dataLen, &buffer[received_len], TLVP_TIMEOUT) != dataLen) { return FAIL; } received_len += dataLen; //read ETX if(portread(AUX1, 1, &buffer[received_len], TLVP_TIMEOUT) != 1) { return FAIL; } if(buffer[received_len] != TLVP_ETX) { return FAIL; } received_len += 1; //read LRC if(portread(AUX1, 1, &buffer[received_len], TLVP_TIMEOUT) != 1) { return FAIL; } if(buffer[received_len] != LRC(buffer, received_len))//check LRC { return FAIL; } received_len += 1; memcpy(data, &buffer[3], dataLen); *data_len = dataLen; return SUCC; }
/** 0x12 0x34 ==> "31323334" ***/ int BcdToAsciiHex(char *cpSrc, int iInLen, char *cpDest, int *ipOutLen) { int iLen = 0; char *cpBuf = (char*)malloc(iInLen*3); memset( cpBuf, 0, iInLen*3); BcdToByte( cpSrc, iInLen, cpBuf, &iLen); ByteToAsciiHex( cpBuf, iLen, cpDest, ipOutLen ); free( cpBuf ); return 0; }