Difference between revisions of "Discovery Service"
From Nutwiki
(Links added) |
m (1 revision imported) |
(No difference)
| |
Latest revision as of 16:02, 27 October 2016
Test Environments
| Hardware Comments | Nut/OS 4.6.4 |
Nut/OS 4.7.4 |
Nut/OS 4.8.0 | |
| Ethernut 1.3 H | OK Binaries |
OK Binaries |
OK Binaries | |
| Ethernut 2.1 B | OK Binaries |
OK Binaries |
OK Binaries | |
| Ethernut 3.0 E | Compiler Error |
OK Binaries |
OK Binaries | |
| EIR 1.0 C | Set jumper JP1 to DEBUG mode. |
Compiler Error |
OK Binaries |
OK Binaries |
| Compiler: ARM-GCC 4.2.2 ; AVR-GCC 4.3.0 | ||||
Source Code
The code consists of two routines, the main routine and a discovery handler.
<source lang="c">
- include <dev/board.h>
- include <sys/timer.h>
- include <stdio.h>
- include <io.h>
- include <netinet/in.h>
- include <arpa/inet.h>
- include <pro/dhcp.h>
- include <pro/discover.h>
static NutDiscoveryCallback default_handler; static int MyHandler(uint32_t ip, uint16_t port, DISCOVERY_TELE * dist, int len);
int main(void) {
u_long baud = 115200;
NutRegisterDevice(&DEV_DEBUG, 0, 0);
freopen(DEV_DEBUG_NAME, "w", stdout);
_ioctl(_fileno(stdout), UART_SETSPEED, &baud);
puts("Discovery Service Sample");
if (NutRegisterDevice(&DEV_ETHER, 0, 0)) {
puts("Registering " DEV_ETHER_NAME " failed.");
}
else if (NutDhcpIfConfig(DEV_ETHER_NAME, NULL, 0)) {
uint8_t initial_mac[6] = { 0x00, 0x06, 0x98, 0x00, 0x00, 0x00 };
if (NutDhcpIfConfig(DEV_ETHER_NAME, initial_mac, 0)) {
u_long initial_ip_addr = inet_addr("192.0.0.192");
u_long initial_ip_mask = inet_addr("255.255.255.0");
NutNetIfConfig(DEV_ETHER_NAME, initial_mac, initial_ip_addr, initial_ip_mask);
}
}
if (NutRegisterDiscovery(INADDR_BROADCAST, 0, DISF_INITAL_ANN)) {
printf("Discover Service failed");
} else {
default_handler = NutRegisterDiscoveryCallback(MyHandler);
}
for (;;) {
NutSleep(1000);
}
return 0;
} </source>
<source lang="c"> static int MyHandler(uint32_t ip, uint16_t port, DISCOVERY_TELE * dist, int len) {
char * tt;
switch (dist->dist_type) {
case DIST_REQUEST:
tt = "request";
break;
case DIST_ANNOUNCE:
tt = "announce";
break;
case DIST_APPLY:
tt = "apply";
break;
default:
tt = "telegram";
break;
}
printf("Discovery %s from %s\n", tt, inet_ntoa(ip));
return (*default_handler)(ip, port, dist, len);
} </source>
Output
File:Discoverer.png
Discoverer
On serial output you will see something like:
Discovery Service Sample Discovery request from 192.168.192.246
The Nut/OS Discoverer will display your (one or more) ethernut board in a table. By double clicking on the values, you can edit them and update your board.
See also
- Network Configuration Overview
- Network Configuration Using Hard Coded Configuration, the most basic way to get you up and running.
- Network Configuration Using Stored Configuration
- Network Configuration Using a Configuration Editor, which may serve as a template for your advanced applications.
- More Nut/OS ExamplesTemplate:Languages