uint8_t receiveSingleFrame() { uint8_t ret = LW232_OK; uint8_t idx = 0; if (CAN_OK == readMsgBufID(&lw232_CanId, &lw232_PacketLen, lw232_Buffer)) { if (lw232_CanId > 0x1FFFFFFF) { ret = LW232_ERR; // address if totally wrong } else if (checkPassFilter(lw232_CanId)) {// do we want to skip some addresses? if (isExtendedFrame()) { printChar(LW232_TR29); printFullByte(HIGH_BYTE(HIGH_WORD(lw232_CanId))); printFullByte(LOW_BYTE(HIGH_WORD(lw232_CanId))); printFullByte(HIGH_BYTE(LOW_WORD(lw232_CanId))); printFullByte(LOW_BYTE(LOW_WORD(lw232_CanId))); } else { printChar(LW232_TR11); printNibble(HIGH_BYTE(LOW_WORD(lw232_CanId))); printFullByte(LOW_BYTE(LOW_WORD(lw232_CanId))); } //write data len printNibble(lw232_PacketLen); //write data for (idx = 0; idx < lw232_PacketLen; idx++) { printFullByte(lw232_Buffer[idx]); } //write timestamp if needed if (lw232_TimeStamp != LW232_TIMESTAMP_OFF) { uint32_t time = 0; //millis(); if (lw232_TimeStamp == LW232_TIMESTAMP_ON_NORMAL) { // standard LAWICEL protocol. two bytes. time %= 60000; } else { // non standard protocol - 4 bytes timestamp printFullByte(HIGH_BYTE(HIGH_WORD(time))); printFullByte(LOW_BYTE(HIGH_WORD(time))); } printFullByte(HIGH_BYTE(LOW_WORD(time))); printFullByte(LOW_BYTE(LOW_WORD(time))); } } } else { ret = LW232_ERR; } return ret; }
INT8U Can232::receiveSingleFrame() { INT8U ret = LW232_OK; INT8U idx = 0; if (CAN_OK == readMsgBufID(&lw232CanId, &lw232PacketLen, lw232Buffer)) { if (lw232CanId > 0x1FFFFFFF) { ret = LW232_ERR; // address if totally wrong } else if (checkPassFilter(lw232CanId)) {// do we want to skip some addresses? if (isExtendedFrame()) { Serial.print(LW232_TR29); HexHelper::printFullByte(HIGH_BYTE(HIGH_WORD(lw232CanId))); HexHelper::printFullByte(LOW_BYTE(HIGH_WORD(lw232CanId))); HexHelper::printFullByte(HIGH_BYTE(LOW_WORD(lw232CanId))); HexHelper::printFullByte(LOW_BYTE(LOW_WORD(lw232CanId))); } else { Serial.print(LW232_TR11); HexHelper::printNibble(HIGH_BYTE(LOW_WORD(lw232CanId))); HexHelper::printFullByte(LOW_BYTE(LOW_WORD(lw232CanId))); } //write data len HexHelper::printNibble(lw232PacketLen); //write data for (idx = 0; idx < lw232PacketLen; idx++) { HexHelper::printFullByte(lw232Buffer[idx]); } //write timestamp if needed if (lw232TimeStamp != LW232_TIMESTAMP_OFF) { INT32U time = millis(); if (lw232TimeStamp == LW232_TIMESTAMP_ON_NORMAL) { // standard LAWICEL protocol. two bytes. time %= 60000; } else { // non standard protocol - 4 bytes timestamp HexHelper::printFullByte(HIGH_BYTE(HIGH_WORD(time))); HexHelper::printFullByte(LOW_BYTE(HIGH_WORD(time))); } HexHelper::printFullByte(HIGH_BYTE(LOW_WORD(time))); HexHelper::printFullByte(LOW_BYTE(LOW_WORD(time))); } } } else { ret = LW232_ERR; } return ret; }