Одна проблема решилась. Оказывается uip шлет udp сообщения, но адрес получателя и порт нулевые, поэтому ближайший роутер отбрасывает это сообщение и я в Wireshark'е на компе его не вижу. После подключения STM к компу на прямую, сообщения стали видны, но проблема с неправильным адресом получателя и портом осталась. Насколько я понял, происходит это из-за того что при отправке сообщения uip использует первую структуру(соединение)
Код
struct uip_udp_conn
, в которой как раз и есть все нули в поле адреса и порта. Пробовал присвоить указателю
Код
uip_udp_conn
адрес структуры, полученной при создании нового соединения, но тогда сообщения вообще не отправляются.
CODE
void udp_newdata(struct uip_udp_state *s)
{
struct uip_udp_conn *udp_connection;
struct uip_udpip_hdr *hdr;
uint8_t *pBuffer;
uint32_t BytesLeft=bMIN(UIP_CONF_BUFFER_SIZE,uip_datalen());
hdr = (struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN];
udp_connection= uip_udp_new(&hdr->srcipaddr, hdr->srcport);
if(udp_connection==NULL)
return;
memcpy(s->inputbuffer,uip_appdata,BytesLeft);
pBuffer=(uint8_t*)&s->inputbuffer;
if(memcmp(pBuffer,tcp_startnewmessage,sizeof(tcp_startnewmessage))==0)
{
uip_udp_conn = udp_connection; //<<<<<<< присваиваем новый указатель
ETH_SendUDPResponse();
}
uip_udp_remove(udp_connection);
}
P.S. uIP из моего проекта.
«У современных мобильных телефонов такая же вычислительная мощь, что и у компьютеров NASA в 60-е годы. И в то время этого хватало, чтобы запустить человека в космос, а сегодня — только чтобы запускать птиц в свиней.»