#include <stdio.h>
#include <io.h>
#include <arpa/inet.h>
#include <net/route.h>
#include <pro/dhcp.h>
#include <pro/sntp.h>
#include <sys/version.h>
#include <sys/confnet.h>
#include <sys/timer.h>
#include <sys/heap.h>
#include <sys/syslog.h>
#include <dev/board.h>
static char *version = "1.0.1";
#define MYMAC 0x00, 0x06, 0x98, 0x00, 0x00, 0x00
#define MYIP "192.168.192.100"
#define MYMASK "255.255.255.0"
#define MYGATE "192.168.192.1"
#define MYLOGD "192.168.192.222"
#define MYTIMED "130.149.17.21"
#define MYUART "uart0"
#define MYBAUD 115200
#define MYDEV DEV_UART
#define MYTZ -1
#ifdef __IMAGECRAFT__
#define COMPILERNAME "ICCAVR"
#else
#define COMPILERNAME "GCC"
#endif
#define UART_OK 0x0001
#define STDOUT_OK 0x0002
#define STDERR_OK 0x0004
#define BAUDRATE_OK 0x0008
#define LANDEV_OK 0x0010
#define NETIF_OK 0x0020
#define NETROUTE_OK 0x0040
#define TIMED_OK 0x0080
int main(void)
{
u_long baud = MYBAUD;
u_char mac[6] = { MYMAC };
u_long timeserver = inet_addr(MYTIMED);
int rc = 0;
time_t now;
if(NutRegisterDevice(&MYDEV, 0, 0) == 0) {
rc |= UART_OK;
if(freopen(MYUART, "w", stdout)) {
rc |= STDOUT_OK;
if(_ioctl(_fileno(stdout), UART_SETSPEED, &baud) == 0) {
rc |= BAUDRATE_OK;
}
}
if(freopen(MYUART, "w", stderr)) {
rc |= STDERR_OK;
}
}
if(rc & STDOUT_OK) {
printf("\n\nTimeLog %s\nNut/OS %s\n", version, NutVersionString());
puts("Compiled by " COMPILERNAME);
puts("Configure network");
}
if(NutRegisterDevice(&DEV_ETHER, 0x8300, 5) == 0) {
rc |= LANDEV_OK;
if (NutDhcpIfConfig("eth0", 0, 60000) == 0) {
rc |= NETIF_OK;
}
else if (NutDhcpIfConfig("eth0", mac, 60000) == 0) {
rc |= NETIF_OK;
}
else if(NutNetIfConfig("eth0", mac, inet_addr(MYIP), inet_addr(MYMASK)) == 0) {
rc |= NETIF_OK;
#ifdef MYGATE
if(NutIpRouteAdd(0, 0, inet_addr(MYGATE), &DEV_ETHER) == 0) {
rc |= NETROUTE_OK;
}
#endif
}
}
if(rc & NETIF_OK) {
if(rc & STDOUT_OK) {
puts("Query time from " MYTIMED);
}
_timezone = MYTZ * 60L * 60L;
if(NutSNTPGetTime(×erver, &now) == 0) {
rc |= TIMED_OK;
stime(&now);
}
}
if(rc & STDOUT_OK) {
puts("Initialize syslog");
}
openlog("logtime", (rc & STDERR_OK) ? LOG_PERROR : 0, LOG_USER);
if(rc & NETIF_OK) {
setlogserver(inet_addr(MYLOGD), 0);
}
syslog(LOG_INFO, "TimeLog %s started on Nut/OS %s", version, NutVersionString());
if((rc & UART_OK) == 0) {
syslog(LOG_ERR, "Registering UART device failed");
}
else if((rc & STDOUT_OK) == 0) {
syslog(LOG_ERR, "Assigning stdout failed");
}
else if((rc & STDERR_OK) == 0) {
syslog(LOG_ERR, "Assigning stderr failed");
}
else if((rc & BAUDRATE_OK) == 0) {
syslog(LOG_ERR, "Setting baudrate failed");
}
if((rc & LANDEV_OK) == 0) {
syslog(LOG_ERR, "Registering Ethernet device failed");
}
else if((rc & NETIF_OK) == 0) {
syslog(LOG_ERR, "Configuring network interface failed");
}
else {
syslog(LOG_INFO, "IP %s", inet_ntoa(confnet.cdn_ip_addr));
syslog(LOG_INFO, "Gate %s", inet_ntoa(confnet.cdn_gateway));
syslog(LOG_INFO, "Timed " MYTIMED);
syslog(LOG_INFO, "Syslogd " MYLOGD);
}
for(;;) {
syslog(LOG_DEBUG, "%d bytes free", NutHeapAvailable());
NutSleep(60000);
}
}