Herkese merhaba,
linkteki kodları projemde kullanıyorum https://github.com/xukai871105/uip_freemodbus_tcp burada belirli bir yere kadar geldim. Ağ üzerindeki paketleri tarıyorum IP paketi geldiği zaman aşağıdaki kod bloğuna geliyorum ancak burada şöyle bir sorunum var uip_input fonksiyonu sonucu uip_len 0 dönüyor dolayısı ile IP paketi okuduktan sonra bir şey yapamıyorum.
uip_input aslında şu şekilde define edilmiş:
#define uip_input() uip_process(UIP_DATA)
UIP_DATA =1
Ve buradaki uip_process fonksiyonu ise şurada bulunuyor. https://github.com/xukai871105/uip_freemodbus_tcp/blob/ec4c025be32b5eb2beb229bd675bed5ab77617be/uIP-1.0/uip/uip.c
Bir modbus isteği olmadan çalıştırıyorum programı o yüzden mi return 0 dönüyor anlam veremedim.
Yardımcı olursanız sevinirim.
if (uip_len > 0)
{
// des_enc28_packetSend(ARP_req, 42);
// serialprint("Buf = %d \n", BUF);
// uint16_t a = BUF->type;
// serialprint("type 0x%04x\n", a);
// serialprint("htons %d \n", htons(UIP_ETHTYPE_IP));
// uip_arp_arpin();
Delay(100);
// Delay(3);
serialprint("Buf = %d \n", BUF);
uint16_t a = BUF->type;
serialprint("type 0x%04x\n", a);
serialprint("htons %d \n", htons(UIP_ETHTYPE_IP));
if (BUF->type == htons(UIP_ETHTYPE_IP))
{
GPIO_SetBits(GPIOE, GPIO_Pin_9);
serialprint("IPPP PACKET !!!\n");
Delay(500);
uip_arp_ipin();
uip_input();
serialprint("tap_dev= %d\n", uip_len);
Delay(300);
if (uip_len > 0)
{
uip_arp_out();
tapdev_send();
}
}
else if (BUF->type == htons(UIP_ETHTYPE_ARP))
{
GPIO_SetBits(GPIOE, GPIO_Pin_9);
serialprint("ARPP PACKET !!!");
Delay(500);
uip_arp_arpin();
if (uip_len > 0)
{
tapdev_send();
}
}
}