Fix esc_eoe Wconversion warnings

- make "size" variables not reflecting hardware or protocol
  uint32_t.

- add excplcit typecaste for uint8_t and uint16_t that need it
  due to integer promotion

- split assignment using macros and bitwise operations to avoid
  implicit conversion and need of explicit conversion.
pull/149/head
Andreas Karlsson 2023-03-16 16:58:14 +01:00
parent f63bca476d
commit 45d390a014
1 changed files with 42 additions and 39 deletions

View File

@ -20,12 +20,12 @@
#define EOE_HTONL(x) (x) #define EOE_HTONL(x) (x)
#define EOE_NTOHL(x) (x) #define EOE_NTOHL(x) (x)
#else #else
#define EOE_HTONS(x) ((((x) & 0x00ffUL) << 8) | (((x) & 0xff00UL) >> 8)) #define EOE_HTONS(x) ((((x) & 0x00ffU) << 8) | (((x) & 0xff00U) >> 8))
#define EOE_NTOHS(x) EOE_HTONS(x) #define EOE_NTOHS(x) EOE_HTONS(x)
#define EOE_HTONL(x) ((((x) & 0x000000ffUL) << 24) | \ #define EOE_HTONL(x) ((((x) & 0x000000ffU) << 24) | \
(((x) & 0x0000ff00UL) << 8) | \ (((x) & 0x0000ff00U) << 8) | \
(((x) & 0x00ff0000UL) >> 8) | \ (((x) & 0x00ff0000U) >> 8) | \
(((x) & 0xff000000UL) >> 24)) (((x) & 0xff000000U) >> 24))
#define EOE_NTOHL(x) EOE_HTONL(x) #define EOE_NTOHL(x) EOE_HTONL(x)
#endif /* #if defined(EC_BIG_ENDIAN) */ #endif /* #if defined(EC_BIG_ENDIAN) */
@ -135,18 +135,18 @@ typedef struct
/** Current RX fragment number */ /** Current RX fragment number */
uint8_t rxfragmentno; uint8_t rxfragmentno;
/** Complete RX frame size of current frame */ /** Complete RX frame size of current frame */
uint16_t rxframesize; uint32_t rxframesize;
/** Current RX data offset in frame */ /** Current RX data offset in frame */
uint16_t rxframeoffset; uint32_t rxframeoffset;
/** Current RX frame number */ /** Current RX frame number */
uint16_t rxframeno; uint16_t rxframeno;
/** Current TX fragment number */ /** Current TX fragment number */
uint8_t txfragmentno; uint8_t txfragmentno;
/** Complete TX frame size of current frame */ /** Complete TX frame size of current frame */
uint16_t txframesize; uint32_t txframesize;
/** Current TX data offset in frame */ /** Current TX data offset in frame */
uint16_t txframeoffset; uint32_t txframeoffset;
} _EOEvar; } _EOEvar;
/** EoE IP request structure */ /** EoE IP request structure */
@ -506,7 +506,7 @@ static void EOE_get_ip (void)
uint16_t frameinfo1; uint16_t frameinfo1;
uint8_t port; uint8_t port;
uint8_t flags; uint8_t flags;
uint8_t data_offset; uint32_t data_offset;
int port_ix; int port_ix;
req_eoembx = (_EOE *) &MBX[0]; req_eoembx = (_EOE *) &MBX[0];
@ -518,10 +518,11 @@ static void EOE_get_ip (void)
if(port > EOE_NUMBER_OF_PORTS) if(port > EOE_NUMBER_OF_PORTS)
{ {
DPRINT("Invalid port\n"); DPRINT("Invalid port\n");
frameinfo1 = EOE_HDR_FRAME_PORT_SET(port);
frameinfo1 |= EOE_INIT_RESP;
frameinfo1 |= EOE_HDR_LAST_FRAGMENT;
/* Return error response on given port */ /* Return error response on given port */
EOE_no_data_response((EOE_HDR_FRAME_PORT_SET(port) | EOE_no_data_response(frameinfo1,
EOE_INIT_RESP |
EOE_HDR_LAST_FRAGMENT),
EOE_RESULT_UNSPECIFIED_ERROR); EOE_RESULT_UNSPECIFIED_ERROR);
return; return;
} }
@ -539,10 +540,10 @@ static void EOE_get_ip (void)
eoembx = (_EOE *) &MBX[mbxhandle * ESC_MBXSIZE]; eoembx = (_EOE *) &MBX[mbxhandle * ESC_MBXSIZE];
eoembx->mbxheader.mbxtype = MBXEOE; eoembx->mbxheader.mbxtype = MBXEOE;
MBXcontrol[mbxhandle].state = MBXstate_outreq; MBXcontrol[mbxhandle].state = MBXstate_outreq;
eoembx->eoeheader.frameinfo1 = frameinfo1 = EOE_HDR_FRAME_PORT_SET(port);
htoes(EOE_HDR_FRAME_TYPE_SET(EOE_GET_IP_PARAM_RESP) | frameinfo1 |= EOE_HDR_FRAME_TYPE_SET(EOE_GET_IP_PARAM_RESP);
EOE_HDR_FRAME_PORT_SET(port) | frameinfo1 |= EOE_HDR_LAST_FRAGMENT;
EOE_HDR_LAST_FRAGMENT); eoembx->eoeheader.frameinfo1 = htoes(frameinfo1);
eoembx->eoeheader.frameinfo2 = 0; eoembx->eoeheader.frameinfo2 = 0;
/* include mac in get ip request */ /* include mac in get ip request */
@ -618,11 +619,10 @@ static void EOE_get_ip (void)
static void EOE_set_ip (void) static void EOE_set_ip (void)
{ {
_EOE *eoembx; _EOE *eoembx;
uint16_t eoedatasize; uint32_t eoedatasize, data_offset;
uint16_t frameinfo1; uint16_t frameinfo1;
uint8_t port; uint8_t port;
uint8_t flags; uint8_t flags;
uint8_t data_offset;
uint16_t result; uint16_t result;
int port_ix; int port_ix;
@ -637,10 +637,10 @@ static void EOE_set_ip (void)
{ {
DPRINT("Invalid port\n"); DPRINT("Invalid port\n");
/* Return error response on given port */ /* Return error response on given port */
EOE_no_data_response((EOE_HDR_FRAME_PORT_SET(port) | frameinfo1 = EOE_HDR_FRAME_PORT_SET(port);
EOE_INIT_RESP | frameinfo1 |= EOE_INIT_RESP;
EOE_HDR_LAST_FRAGMENT), frameinfo1 |= EOE_HDR_LAST_FRAGMENT;
EOE_RESULT_UNSPECIFIED_ERROR); EOE_no_data_response(frameinfo1, EOE_RESULT_UNSPECIFIED_ERROR);
return; return;
} }
@ -694,7 +694,7 @@ static void EOE_set_ip (void)
/* dns name included in set ip request? */ /* dns name included in set ip request? */
if(flags & EOE_PARAM_DNS_NAME_INCLUDE) if(flags & EOE_PARAM_DNS_NAME_INCLUDE)
{ {
uint16_t dns_len = MIN((eoedatasize - data_offset), EOE_DNS_NAME_LENGTH); uint32_t dns_len = MIN((eoedatasize - data_offset), EOE_DNS_NAME_LENGTH);
memcpy(nic_ports[port_ix].dns_name, memcpy(nic_ports[port_ix].dns_name,
&eoembx->data[data_offset], &eoembx->data[data_offset],
dns_len); dns_len);
@ -712,17 +712,17 @@ static void EOE_set_ip (void)
* you typically set the IP for the TCP/IP stack */ * you typically set the IP for the TCP/IP stack */
if(eoe_cfg->store_ethernet_settings != NULL) if(eoe_cfg->store_ethernet_settings != NULL)
{ {
result = eoe_cfg->store_ethernet_settings(); result = (uint16_t)eoe_cfg->store_ethernet_settings();
} }
else else
{ {
result = EOE_RESULT_NO_IP_SUPPORT; result = EOE_RESULT_NO_IP_SUPPORT;
} }
} }
EOE_no_data_response((EOE_HDR_FRAME_PORT_SET(port) | frameinfo1 = EOE_HDR_FRAME_PORT_SET(port);
EOE_INIT_RESP | frameinfo1 |= EOE_INIT_RESP;
EOE_HDR_LAST_FRAGMENT), frameinfo1 |= EOE_HDR_LAST_FRAGMENT;
result); EOE_no_data_response(frameinfo1, result);
} }
/** EoE receive fragment handler. /** EoE receive fragment handler.
@ -731,7 +731,7 @@ static void EOE_receive_fragment (void)
{ {
_EOE *eoembx; _EOE *eoembx;
eoembx = (_EOE *) &MBX[0]; eoembx = (_EOE *) &MBX[0];
uint16_t eoedatasize = etohs(eoembx->mbxheader.length) - ESC_EOEHSIZE; uint32_t eoedatasize = etohs(eoembx->mbxheader.length) - ESC_EOEHSIZE;
uint16_t frameinfo1 = etohs(eoembx->eoeheader.frameinfo1); uint16_t frameinfo1 = etohs(eoembx->eoeheader.frameinfo1);
uint16_t frameinfo2 = etohs(eoembx->eoeheader.frameinfo2); uint16_t frameinfo2 = etohs(eoembx->eoeheader.frameinfo2);
@ -812,7 +812,7 @@ static void EOE_receive_fragment (void)
/* Remove time stamp, TODO support for time stamp? */ /* Remove time stamp, TODO support for time stamp? */
if(EOE_HDR_TIME_APPEND_GET(frameinfo1)) if(EOE_HDR_TIME_APPEND_GET(frameinfo1))
{ {
EOEvar.rxframeoffset -= 4; EOEvar.rxframeoffset -= 4U;
} }
EOEvar.rxebuf.len = EOEvar.rxframeoffset; EOEvar.rxebuf.len = EOEvar.rxframeoffset;
eoe_cfg->handle_recv_buffer(EOE_HDR_FRAME_PORT_GET(frameinfo1), eoe_cfg->handle_recv_buffer(EOE_HDR_FRAME_PORT_GET(frameinfo1),
@ -830,7 +830,7 @@ static void EOE_send_fragment ()
_EOE *eoembx; _EOE *eoembx;
uint8_t mbxhandle; uint8_t mbxhandle;
int len; int len;
int len_to_send; uint32_t len_to_send;
uint16_t frameinfo1; uint16_t frameinfo1;
uint16_t frameinfo2; uint16_t frameinfo2;
static uint8_t frameno = 0; static uint8_t frameno = 0;
@ -842,7 +842,7 @@ static void EOE_send_fragment ()
len = eoe_cfg->fetch_send_buffer(0, &EOEvar.txebuf); len = eoe_cfg->fetch_send_buffer(0, &EOEvar.txebuf);
if(len > 0) if(len > 0)
{ {
EOEvar.txframesize = len; EOEvar.txframesize = (uint32_t)len;
} }
else else
{ {
@ -854,7 +854,7 @@ static void EOE_send_fragment ()
mbxhandle = ESC_claimbuffer (); mbxhandle = ESC_claimbuffer ();
if (mbxhandle) if (mbxhandle)
{ {
len_to_send = EOEvar.txframesize - EOEvar.txframeoffset; len_to_send = (EOEvar.txframesize - EOEvar.txframeoffset);
if((len_to_send + ESC_EOEHSIZE + ESC_MBXHSIZE) > ESC_MBXSIZE) if((len_to_send + ESC_EOEHSIZE + ESC_MBXHSIZE) > ESC_MBXSIZE)
{ {
/* Adjust to len in whole 32 octet blocks to fit specification*/ /* Adjust to len in whole 32 octet blocks to fit specification*/
@ -872,23 +872,26 @@ static void EOE_send_fragment ()
frameinfo1 = 0; frameinfo1 = 0;
} }
uint16_t tempframe2;
/* Set fragment number */ /* Set fragment number */
frameinfo2 = EOE_HDR_FRAG_NO_SET(EOEvar.txfragmentno); frameinfo2 = EOE_HDR_FRAG_NO_SET(EOEvar.txfragmentno);
/* Set complete size for fragment 0 or offset for in frame fragments */ /* Set complete size for fragment 0 or offset for in frame fragments */
if(EOEvar.txfragmentno > 0) if(EOEvar.txfragmentno > 0)
{ {
frameinfo2 |= (EOE_HDR_FRAME_OFFSET_SET((EOEvar.txframeoffset >> 5))); tempframe2 = EOE_HDR_FRAME_OFFSET_SET((EOEvar.txframeoffset >> 5));
frameinfo2 |= tempframe2;
} }
else else
{ {
frameinfo2 |= tempframe2 = EOE_HDR_FRAME_OFFSET_SET(((EOEvar.txframesize + 31) >> 5));
(EOE_HDR_FRAME_OFFSET_SET(((EOEvar.txframesize + 31) >> 5))); frameinfo2 |= tempframe2;
frameno++; frameno++;
} }
/* Set frame number */ /* Set frame number */
frameinfo2 = frameinfo2 | EOE_HDR_FRAME_NO_SET(frameno); tempframe2 = (uint16_t)EOE_HDR_FRAME_NO_SET(frameno);
frameinfo2 |= tempframe2;
eoembx = (_EOE *) &MBX[mbxhandle * ESC_MBXSIZE]; eoembx = (_EOE *) &MBX[mbxhandle * ESC_MBXSIZE];
eoembx->mbxheader.length = htoes (len_to_send + ESC_EOEHSIZE); eoembx->mbxheader.length = htoes (len_to_send + ESC_EOEHSIZE);
@ -910,7 +913,7 @@ static void EOE_send_fragment ()
else else
{ {
EOEvar.txframeoffset += len_to_send; EOEvar.txframeoffset += len_to_send;
EOEvar.txfragmentno += 1; EOEvar.txfragmentno++;
} }
if(eoe_cfg->fragment_sent_event != NULL) if(eoe_cfg->fragment_sent_event != NULL)
{ {