|
|
@ -11,7 +11,7 @@ using namespace zcr; |
|
|
|
|
|
|
|
#define OVER_TIME_MS 5
|
|
|
|
|
|
|
|
ZCanCmder::CFG *ZCanCmder::createCFG(uint8_t deviceId) { |
|
|
|
ZCanReceiver::CFG *ZCanReceiver::createCFG(uint8_t deviceId) { |
|
|
|
CFG *cfg = new CFG(); |
|
|
|
ZASSERT(cfg != NULL); |
|
|
|
cfg->deviceId = deviceId; |
|
|
@ -25,7 +25,7 @@ ZCanCmder::CFG *ZCanCmder::createCFG(uint8_t deviceId) { |
|
|
|
cfg->rxfifoNum = CAN_RX_FIFO0; |
|
|
|
return cfg; |
|
|
|
} |
|
|
|
void ZCanCmder::init(CFG *cfg) { |
|
|
|
void ZCanReceiver::initialize(CFG *cfg) { |
|
|
|
HAL_StatusTypeDef hal_status; |
|
|
|
m_config = cfg; |
|
|
|
m_lock.init(); |
|
|
@ -68,7 +68,7 @@ void ZCanCmder::init(CFG *cfg) { |
|
|
|
} |
|
|
|
// ZHALCORE::getInstance()->regPeriodJob([this](ZHALCORE::Context &context) { loop(); }, 0);
|
|
|
|
} |
|
|
|
HAL_StatusTypeDef ZCanCmder::initializeFilter() { |
|
|
|
HAL_StatusTypeDef ZCanReceiver::initializeFilter() { |
|
|
|
/**
|
|
|
|
* @brief ID区帧格式 |
|
|
|
* [ 27:0 ] |
|
|
@ -108,8 +108,8 @@ HAL_StatusTypeDef ZCanCmder::initializeFilter() { |
|
|
|
return HAL_Status; |
|
|
|
} |
|
|
|
|
|
|
|
void ZCanCmder::registerListener(IZCanReceiverListener *listener) { m_listenerList.push_back(listener); } |
|
|
|
void ZCanCmder::sendPacket(uint8_t *packet, size_t len) { |
|
|
|
void ZCanReceiver::registerListener(IZCanReceiverListener *listener) { m_listenerList.push_back(listener); } |
|
|
|
void ZCanReceiver::sendPacket(uint8_t *packet, size_t len) { |
|
|
|
/**
|
|
|
|
* @brief |
|
|
|
*/ |
|
|
@ -134,7 +134,7 @@ void ZCanCmder::sendPacket(uint8_t *packet, size_t len) { |
|
|
|
} |
|
|
|
} |
|
|
|
#if 0
|
|
|
|
void ZCanCmder::sendAck(zcr_cmd_header_t *cmdheader, uint8_t *data, size_t len) { |
|
|
|
void ZCanReceiver::sendAck(zcr_cmd_header_t *cmdheader, uint8_t *data, size_t len) { |
|
|
|
zlock_guard l(m_lock); |
|
|
|
zcr_cmd_header_t *txheader = (zcr_cmd_header_t *)txbuff; |
|
|
|
memcpy(txheader, cmdheader, sizeof(zcr_cmd_header_t)); |
|
|
@ -142,7 +142,7 @@ void ZCanCmder::sendAck(zcr_cmd_header_t *cmdheader, uint8_t *data, size_t len) |
|
|
|
memcpy(txheader->data, data, len); |
|
|
|
sendPacket(txbuff, sizeof(zcr_cmd_header_t) + len); |
|
|
|
} |
|
|
|
void ZCanCmder::sendErrorAck(zcr_cmd_header_t *cmdheader, uint16_t id, uint32_t errcode) { |
|
|
|
void ZCanReceiver::sendErrorAck(zcr_cmd_header_t *cmdheader, uint16_t id, uint32_t errcode) { |
|
|
|
zlock_guard l(m_lock); |
|
|
|
|
|
|
|
zcr_cmd_header_t *txheader = (zcr_cmd_header_t *)txbuff; |
|
|
@ -154,7 +154,7 @@ void ZCanCmder::sendErrorAck(zcr_cmd_header_t *cmdheader, uint16_t id, uint32_t |
|
|
|
sendPacket(txbuff, sizeof(zcr_cmd_header_t) + sizeof(zcanreceiver_error_ack_t)); |
|
|
|
} |
|
|
|
|
|
|
|
void ZCanCmder::sendExecStatusReport(zcr_cmd_header_t *rxcmdheader, uint8_t *data, size_t len) { |
|
|
|
void ZCanReceiver::sendExecStatusReport(zcr_cmd_header_t *rxcmdheader, uint8_t *data, size_t len) { |
|
|
|
zlock_guard l(m_lock); |
|
|
|
|
|
|
|
zcr_cmd_header_t *txheader = (zcr_cmd_header_t *)txbuff; |
|
|
@ -163,7 +163,7 @@ void ZCanCmder::sendExecStatusReport(zcr_cmd_header_t *rxcmdheader, uint8_t *dat |
|
|
|
memcpy(txheader->data, data, len); |
|
|
|
sendPacket(txbuff, sizeof(zcr_cmd_header_t) + len); |
|
|
|
} |
|
|
|
void ZCanCmder::sendStatusReport(zcr_cmd_header_t *rxcmdheader, uint8_t *data, size_t len) { |
|
|
|
void ZCanReceiver::sendStatusReport(zcr_cmd_header_t *rxcmdheader, uint8_t *data, size_t len) { |
|
|
|
zlock_guard l(m_lock); |
|
|
|
|
|
|
|
zcr_cmd_header_t *txheader = (zcr_cmd_header_t *)txbuff; |
|
|
@ -173,7 +173,7 @@ void ZCanCmder::sendStatusReport(zcr_cmd_header_t *rxcmdheader, uint8_t *data, s |
|
|
|
sendPacket(txbuff, sizeof(zcr_cmd_header_t) + len); |
|
|
|
} |
|
|
|
#endif
|
|
|
|
int32_t ZCanCmder::sendBufAck(zcr_cmd_header_t *rx_cmd_header, uint8_t *data, int32_t len) { |
|
|
|
int32_t ZCanReceiver::sendBufAck(zcr_cmd_header_t *rx_cmd_header, uint8_t *data, int32_t len) { |
|
|
|
zlock_guard l(m_lock); |
|
|
|
ZASSERT(sizeof(txbuff) > sizeof(zcr_cmd_header_t) + len); |
|
|
|
zcr_cmd_header_t *txheader = (zcr_cmd_header_t *)txbuff; |
|
|
@ -183,7 +183,7 @@ int32_t ZCanCmder::sendBufAck(zcr_cmd_header_t *rx_cmd_header, uint8_t *data, in |
|
|
|
sendPacket(txbuff, sizeof(zcr_cmd_header_t) + len); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t ZCanCmder::triggerEvent(zcr_cmd_header_t *cmd_header, uint8_t *data, int32_t len) { |
|
|
|
int32_t ZCanReceiver::triggerEvent(zcr_cmd_header_t *cmd_header, uint8_t *data, int32_t len) { |
|
|
|
zlock_guard l(m_lock); |
|
|
|
m_reportIndex++; |
|
|
|
ZASSERT(sizeof(txbuff) > sizeof(zcr_cmd_header_t) + len); |
|
|
@ -196,7 +196,7 @@ int32_t ZCanCmder::triggerEvent(zcr_cmd_header_t *cmd_header, uint8_t *data, int |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t ZCanCmder::sendAck(zcr_cmd_header_t *rx_cmd_header, int32_t *ackvar, int32_t nack) { |
|
|
|
int32_t ZCanReceiver::sendAck(zcr_cmd_header_t *rx_cmd_header, int32_t *ackvar, int32_t nack) { |
|
|
|
zlock_guard l(m_lock); |
|
|
|
zcr_cmd_header_t *txheader = (zcr_cmd_header_t *)txbuff; |
|
|
|
memcpy(txheader, rx_cmd_header, sizeof(zcr_cmd_header_t)); |
|
|
@ -210,7 +210,7 @@ int32_t ZCanCmder::sendAck(zcr_cmd_header_t *rx_cmd_header, int32_t *ackvar, int |
|
|
|
sendPacket(txbuff, sizeof(zcr_cmd_header_t) + sizeof(int32_t) * nack); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t ZCanCmder::sendErrorAck(zcr_cmd_header_t *rx_cmd_header, int32_t errorcode) { |
|
|
|
int32_t ZCanReceiver::sendErrorAck(zcr_cmd_header_t *rx_cmd_header, int32_t errorcode) { |
|
|
|
zlock_guard l(m_lock); |
|
|
|
zcr_cmd_header_t *txheader = (zcr_cmd_header_t *)txbuff; |
|
|
|
memcpy(txheader, rx_cmd_header, sizeof(zcr_cmd_header_t)); |
|
|
@ -223,7 +223,7 @@ int32_t ZCanCmder::sendErrorAck(zcr_cmd_header_t *rx_cmd_header, int32_t errorco |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
bool ZCanCmder::sendPacketSub(int npacket, int packetIndex, uint8_t *packet, size_t len, int overtimems) { |
|
|
|
bool ZCanReceiver::sendPacketSub(int npacket, int packetIndex, uint8_t *packet, size_t len, int overtimems) { |
|
|
|
zlock_guard l(m_lock); |
|
|
|
|
|
|
|
// ZLOGI(TAG, "sendPacketSub(%d:%d)", npacket, packetIndex);
|
|
|
@ -264,7 +264,7 @@ bool ZCanCmder::sendPacketSub(int npacket, int packetIndex, uint8_t *packet, siz |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
bool ZCanCmder::getRxMessage(CAN_RxHeaderTypeDef *pHeader, uint8_t aData[] /*8byte table*/) { |
|
|
|
bool ZCanReceiver::getRxMessage(CAN_RxHeaderTypeDef *pHeader, uint8_t aData[] /*8byte table*/) { |
|
|
|
/**
|
|
|
|
* @brief 读取当前FIFO中缓存了多少帧的数据 |
|
|
|
*/ |
|
|
@ -280,7 +280,7 @@ bool ZCanCmder::getRxMessage(CAN_RxHeaderTypeDef *pHeader, uint8_t aData[] /*8by |
|
|
|
} |
|
|
|
return false; |
|
|
|
} |
|
|
|
void ZCanCmder::STM32_HAL_onCAN_RxFifo0MsgPending(CAN_HandleTypeDef *canHandle) { |
|
|
|
void ZCanReceiver::STM32_HAL_onCAN_RxFifo0MsgPending(CAN_HandleTypeDef *canHandle) { |
|
|
|
/**
|
|
|
|
* @brief 中断上下文 |
|
|
|
*/ |
|
|
@ -338,13 +338,13 @@ void ZCanCmder::STM32_HAL_onCAN_RxFifo0MsgPending(CAN_HandleTypeDef *canHandle) |
|
|
|
|
|
|
|
// deactivateRxIT();
|
|
|
|
} |
|
|
|
void ZCanCmder::STM32_HAL_onCAN_Error(CAN_HandleTypeDef *canHandle) { |
|
|
|
void ZCanReceiver::STM32_HAL_onCAN_Error(CAN_HandleTypeDef *canHandle) { |
|
|
|
if (canHandle != m_config->canHandle) { |
|
|
|
return; |
|
|
|
} |
|
|
|
ZLOGE(TAG, "onCAN_Error\r\n"); |
|
|
|
} |
|
|
|
void ZCanCmder::loop() { |
|
|
|
void ZCanReceiver::loop() { |
|
|
|
CanPacketRxBuffer *rxbuf = &m_canPacketRxBuffer[0]; |
|
|
|
if (rxbuf->dataIsReady) { |
|
|
|
int dataoff = 0; |
|
|
@ -361,7 +361,7 @@ void ZCanCmder::loop() { |
|
|
|
rxbuf->dataIsReady = false; |
|
|
|
} |
|
|
|
} |
|
|
|
HAL_StatusTypeDef ZCanCmder::activateRxIT() { |
|
|
|
HAL_StatusTypeDef ZCanReceiver::activateRxIT() { |
|
|
|
HAL_StatusTypeDef hal_status = HAL_ERROR; |
|
|
|
if (m_config->rxfifoNum == CAN_RX_FIFO0) { |
|
|
|
hal_status = HAL_CAN_ActivateNotification(m_config->canHandle, CAN_IT_RX_FIFO0_MSG_PENDING); |
|
|
@ -373,7 +373,7 @@ HAL_StatusTypeDef ZCanCmder::activateRxIT() { |
|
|
|
} |
|
|
|
return hal_status; |
|
|
|
} |
|
|
|
HAL_StatusTypeDef ZCanCmder::deactivateRxIT() { |
|
|
|
HAL_StatusTypeDef ZCanReceiver::deactivateRxIT() { |
|
|
|
HAL_StatusTypeDef hal_status = HAL_ERROR; |
|
|
|
if (m_config->rxfifoNum == CAN_RX_FIFO0) { |
|
|
|
hal_status = HAL_CAN_DeactivateNotification(m_config->canHandle, CAN_IT_RX_FIFO0_MSG_PENDING); |
|
|
|