mbedNet example
Page last updated 12 Jun 2011, by
0
replies
.
#include "mbed.h" #include "mbedNet.h" #include "Sockets.h" #include "mbedNetIF.h" #include "ARP.h" #include "ICMPv4.h" #include "UDPv4.h" #include "TCPv4.h" #include "Debug.h" #define NET_TICKER_PERIOD 1 Ethernet_Addr_t myMAC = {0x00, 0x10, 0x33, 0x2e, 0x18, 0x7f}; IPv4_Addr_t ip = {10, 0, 1, 55}, netmask = {255, 255, 255, 0}, gateway = {10, 0, 1, 2}, broadcast = {10, 0, 1, 255}; NetIF_t *mbedNetIF; Ticker netTicker; Serial pc(USBTX, USBRX); /* Ticker to process net time-related stuff (like ARP cache so far) */ void NetTicker(void) { NetIF_ProcessTimers(NET_TICKER_PERIOD); } int main() { int32_t byteCount, remoteLen; static uint8_t buffer[128]; Socket_t socket; Socket_AddrIn_t localAddrIn, remoteAddrIn; char c; pc.baud(115200); printf("%cStarting!\r\n", 12); Debug_SetMasks(DEBUG_MODULE_NETIF, DEBUG_LEVEL_ALL & ~(DEBUG_LEVEL_VERBOSE0 | DEBUG_LEVEL_VERBOSE1 | DEBUG_LEVEL_VERBOSE2)); mbedNetIF = NetIF_RegisterInterface(&ip, &netmask, &gateway, &mbedNetIF_Driver, (void *)&myMAC); ethernet.RegisterProtocol(&arp); ethernet.RegisterProtocol(&ipv4); ipv4.RegisterProtocol(&icmpv4); ipv4.RegisterProtocol(&udpv4); udpv4.RegisterAPI(&sockets); ARP_AddStaticEntry(mbedNetIF, broadcast, ðernet_Addr_Broadcast); netTicker.attach(&NetTicker, NET_TICKER_PERIOD); NetIF_Up(mbedNetIF); socket = Sockets_Open(AF_INET, SOCK_DGRAM, 0); localAddrIn.family = AF_INET; localAddrIn.len = sizeof(Socket_AddrIn_t); localAddrIn.port = htons(12345); localAddrIn.address = ipv4_Addr_Any; Sockets_Bind(socket, (Socket_Addr_t *)&localAddrIn, sizeof(Socket_AddrIn_t)); while(1) { remoteLen = sizeof(Socket_AddrIn_t); byteCount = Sockets_RecvFrom(socket, buffer, 128, 0, (Socket_Addr_t *)&remoteAddrIn, &remoteLen); if (byteCount > 0) { buffer[byteCount - 1] = '\0'; printf("got %d bytes ('%s') from %d:%d.%d.%d:%d\r\n", byteCount, buffer, remoteAddrIn.address.IP0, remoteAddrIn.address.IP1, remoteAddrIn.address.IP2, remoteAddrIn.address.IP3, ntohs(remoteAddrIn.port) ); } if (pc.readable()) { c = pc.getc(); switch(c) { case 'h': printf("commands:\r\n"); printf("d: display ARP cache table\r\n"); printf("a: send ARP request for %d.%d.%d.%d\r\n", gateway.IP0, gateway.IP1, gateway.IP2, gateway.IP3); printf("f: flush ARP table\r\n"); break; case 'd': ARP_DisplayCache(); break; case 'f': ARP_FlushCache(False); break; case 'a': ARP_ResolveIPv4Address(mbedNetIF, gateway, NULL); break; } } } }
Please log in to post comments.