Browse Source

update

master
zhaohe 2 years ago
parent
commit
2f53851e65
  1. 63
      components/zcanreceiver/zcanreceiver.cpp
  2. 1
      components/zcanreceiver/zcanreceiver.hpp
  3. 2
      hal/zhal_core.hpp

63
components/zcanreceiver/zcanreceiver.cpp

@ -107,7 +107,66 @@ HAL_StatusTypeDef ZCanReceiver::initializeFilter() {
}
void ZCanReceiver::registerListener(ZCanRceiverListener *listener) { m_listenerList.push_back(listener); }
void ZCanReceiver::sendPacket(uint8_t *packet, size_t len) {}
void ZCanReceiver::sendPacket(uint8_t *packet, size_t len) {
/**
* @brief
*/
int npacket = len / 8 + (len % 8 == 0 ? 0 : 1);
if (npacket > 255) {
ZLOGE(TAG, "sendPacket fail, len:%d", len);
return;
}
int finalpacketlen = len % 8 == 0 ? 8 : len % 8;
for (uint8_t i = 0; i < npacket; i++) {
bool suc = false;
if (i == npacket - 1) {
suc = sendPacketSub(npacket, i, packet + i * 8, finalpacketlen, OVER_TIME_MS);
} else {
suc = sendPacketSub(npacket, i, packet + i * 8, 8, OVER_TIME_MS);
}
if (!suc) {
ZLOGE(TAG, "sendPacket fail, packet(%d:%d)", npacket, i);
return;
}
}
}
bool ZCanReceiver::sendPacketSub(int npacket, int packetIndex, uint8_t *packet, size_t len, int overtimems) {
CAN_TxHeaderTypeDef pHeader;
uint8_t aData[8] /*8byte table*/;
uint32_t txMailBox = 0;
uint32_t enterticket = chip_get_ticket();
memset(&pHeader, 0, sizeof(pHeader));
memset(aData, 0, sizeof(aData));
pHeader.StdId = 0x00;
pHeader.ExtId = (m_config->deviceId << 16) | (npacket << 8) | packetIndex;
pHeader.IDE = CAN_ID_EXT;
pHeader.RTR = CAN_RTR_DATA;
pHeader.DLC = len;
pHeader.TransmitGlobalTime = DISABLE;
memcpy(aData, packet, len);
m_lastTransmitStatus = HAL_CAN_AddTxMessage(m_config->canHandle, &pHeader, aData, &txMailBox);
if (m_lastTransmitStatus != HAL_OK) {
ZLOGE(TAG, "HAL_CAN_AddTxMessage fail");
return false;
}
while (HAL_CAN_IsTxMessagePending(m_config->canHandle, txMailBox)) {
if (haspassedms(enterticket) > (uint32_t)overtimems) {
m_lastTransmitStatus = HAL_TIMEOUT;
HAL_CAN_AbortTxRequest(m_config->canHandle, txMailBox);
return false;
}
// m_os->sleepMS(1);
}
return true;
}
bool ZCanReceiver::getRxMessage(CAN_RxHeaderTypeDef *pHeader, uint8_t aData[] /*8byte table*/) {
/**
* @brief FIFO中缓存了多少帧的数据
@ -170,7 +229,7 @@ void ZCanReceiver::STM32_HAL_onCAN_RxFifo0MsgPending(CAN_HandleTypeDef *canHandl
memcpy(rxbuf->m_canPacket[rxbuf->m_canPacketNum].aData, aData, 8);
rxbuf->m_canPacketNum++;
}
if (nframe == frameId) {
if (nframe == frameId+1) {
rxbuf->dataIsReady = true;
}
}

1
components/zcanreceiver/zcanreceiver.hpp

@ -74,6 +74,7 @@ class ZCanReceiver : public ZCanIRQListener {
void registerListener(ZCanRceiverListener *listener);
void sendPacket(uint8_t *packet, size_t len);
bool sendPacketSub(int npacket, int packetIndex, uint8_t *packet, size_t len, int overtimems);
public:
virtual void STM32_HAL_onCAN_RxFifo0MsgPending(CAN_HandleTypeDef *can);

2
hal/zhal_core.hpp

@ -53,6 +53,6 @@ class ZHALCORE {
void loop();
};
#define ZHAL_CORE_REG(period_ms, job) ZHALCORE::getInstance()->regPeriodJob([this](ZHALCORE::Context& context) { job }, period_ms);
#define ZHAL_CORE_REG(period_ms, job) ZHALCORE::getInstance()->regPeriodJob([&](ZHALCORE::Context& context) { job }, period_ms);
} // namespace iflytop
Loading…
Cancel
Save