- SV publisher/subscriber: improved error handling when configuration is wrong

pull/93/head
Michael Zillgith 7 years ago
parent 0c006f2892
commit 6a7266da93

@ -84,16 +84,9 @@ struct sSVPublisher {
}; };
static void static bool
preparePacketBuffer(SVPublisher self, CommParameters* parameters, const char* interfaceID) preparePacketBuffer(SVPublisher self, CommParameters* parameters, const char* interfaceId)
{ {
uint8_t srcAddr[6];
if (interfaceID != NULL)
Ethernet_getInterfaceMACAddress(interfaceID, srcAddr);
else
Ethernet_getInterfaceMACAddress(CONFIG_ETHERNET_INTERFACE_ID, srcAddr);
uint8_t defaultDstAddr[] = CONFIG_SV_DEFAULT_DST_ADDRESS; uint8_t defaultDstAddr[] = CONFIG_SV_DEFAULT_DST_ADDRESS;
uint8_t* dstAddr; uint8_t* dstAddr;
@ -101,6 +94,13 @@ preparePacketBuffer(SVPublisher self, CommParameters* parameters, const char* in
uint16_t vlanId; uint16_t vlanId;
uint16_t appId; uint16_t appId;
uint8_t srcAddr[6];
if (interfaceId != NULL)
Ethernet_getInterfaceMACAddress(interfaceId, srcAddr);
else
Ethernet_getInterfaceMACAddress(CONFIG_ETHERNET_INTERFACE_ID, srcAddr);
if (parameters == NULL) { if (parameters == NULL) {
dstAddr = defaultDstAddr; dstAddr = defaultDstAddr;
priority = CONFIG_SV_DEFAULT_PRIORITY; priority = CONFIG_SV_DEFAULT_PRIORITY;
@ -114,11 +114,19 @@ preparePacketBuffer(SVPublisher self, CommParameters* parameters, const char* in
appId = parameters->appId; appId = parameters->appId;
} }
if (interfaceID != NULL) if (interfaceId != NULL)
self->ethernetSocket = Ethernet_createSocket(interfaceID, dstAddr); self->ethernetSocket = Ethernet_createSocket(interfaceId, dstAddr);
else else
self->ethernetSocket = Ethernet_createSocket(CONFIG_ETHERNET_INTERFACE_ID, dstAddr); self->ethernetSocket = Ethernet_createSocket(CONFIG_ETHERNET_INTERFACE_ID, dstAddr);
if (self->ethernetSocket == NULL) {
if (DEBUG_SV_PUBLISHER)
printf("SV_PUBLISHER: Failed to allocate Ethernet interface\n");
return false;
}
self->buffer = (uint8_t*) GLOBAL_MALLOC(SV_MAX_MESSAGE_SIZE); self->buffer = (uint8_t*) GLOBAL_MALLOC(SV_MAX_MESSAGE_SIZE);
memcpy(self->buffer, dstAddr, 6); memcpy(self->buffer, dstAddr, 6);
@ -161,6 +169,8 @@ preparePacketBuffer(SVPublisher self, CommParameters* parameters, const char* in
self->buffer[bufPos++] = 0x00; self->buffer[bufPos++] = 0x00;
self->payloadStart = bufPos; self->payloadStart = bufPos;
return true;
} }
@ -287,9 +297,15 @@ SVPublisher_create(CommParameters* parameters, const char* interfaceId)
{ {
SVPublisher self = (SVPublisher) GLOBAL_CALLOC(1, sizeof(struct sSVPublisher)); SVPublisher self = (SVPublisher) GLOBAL_CALLOC(1, sizeof(struct sSVPublisher));
self->asduList = NULL; if (self) {
self->asduList = NULL;
preparePacketBuffer(self, parameters, interfaceId); if (preparePacketBuffer(self, parameters, interfaceId) == false) {
GLOBAL_FREEMEM(self);
self = NULL;
}
}
return self; return self;
} }

@ -160,15 +160,20 @@ svReceiverLoop(void* threadParameter)
self->running = true; self->running = true;
self->stopped = false; self->stopped = false;
SVReceiver_startThreadless(self); if (SVReceiver_startThreadless(self)) {
while (self->running) { while (self->running) {
if (SVReceiver_tick(self) == false) if (SVReceiver_tick(self) == false)
Thread_sleep(1); Thread_sleep(1);
} }
SVReceiver_stopThreadless(self); SVReceiver_stopThreadless(self);
}
else {
if (DEBUG_SV_SUBSCRIBER)
printf("SV_SUBSCRIBER: Failed to start SV receiver\n");
}
self->stopped = true; self->stopped = true;
} }
@ -229,9 +234,12 @@ SVReceiver_startThreadless(SVReceiver self)
else else
self->ethSocket = Ethernet_createSocket(self->interfaceId, NULL); self->ethSocket = Ethernet_createSocket(self->interfaceId, NULL);
Ethernet_setProtocolFilter(self->ethSocket, ETH_P_SV); if (self->ethSocket) {
self->running = true; Ethernet_setProtocolFilter(self->ethSocket, ETH_P_SV);
self->running = true;
}
return self->ethSocket; return self->ethSocket;
} }

Loading…
Cancel
Save