existing FW file check to avoid redundant transmit
+ refactro dupliacte code
This commit is contained in:
@@ -195,22 +195,30 @@ bool UsbDataPacket_head_check(const UsbDataPacket *p) {
|
||||
|
||||
#include "usbd_cdc_if.h"
|
||||
#include <pb_encode.h>
|
||||
static UsbDataPacket packet;
|
||||
void USBDataResonse(void * msg, const pb_msgdesc_t* fields, UsbPackageType typeid) {
|
||||
pb_ostream_t ostream = pb_ostream_from_buffer(packet.data,sizeof(packet.data));
|
||||
|
||||
|
||||
bool UsbDataPacketSendMessage(uint32_t type , UsbDataPacket * buffer ,const pb_msgdesc_t * fields ,const void* msg) {
|
||||
pb_ostream_t ostream = pb_ostream_from_buffer(buffer->data,sizeof(buffer->data));
|
||||
bool status = pb_encode(&ostream, fields ,msg);
|
||||
packet.head.length = ostream.bytes_written;
|
||||
packet.head.type = typeid;
|
||||
packet.head.check = UsbDataPacket_head_sum(&packet);
|
||||
buffer->head.length = ostream.bytes_written;
|
||||
buffer->head.type = type;
|
||||
buffer->head.check = UsbDataPacket_head_sum(buffer);
|
||||
|
||||
if(status) {
|
||||
while (CDC_Transmit_HS((uint8_t*)&packet, packet.head.length + sizeof(UsbDataPacketHead) ) == USBD_BUSY)
|
||||
while (CDC_Transmit_HS((uint8_t*)buffer, buffer->head.length + sizeof(UsbDataPacketHead) ) == USBD_BUSY)
|
||||
{
|
||||
osDelay(3);
|
||||
}
|
||||
} else {
|
||||
Error_Handler();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
static UsbDataPacket packet;
|
||||
void USBDataResonse(void * msg, const pb_msgdesc_t* fields, UsbPackageType typeid) {
|
||||
UsbDataPacketSendMessage(typeid, &packet, fields, msg);
|
||||
}
|
||||
|
||||
//__attribute__((weak)) void DataClbk_FirmwareStart(void *msg, uint32_t length) {}
|
||||
|
||||
Reference in New Issue
Block a user