logtime.c

Go to the documentation of this file.
00001 
00046 #include <stdio.h>
00047 #include <io.h>
00048 
00049 #include <arpa/inet.h>
00050 #include <net/route.h>
00051 #include <pro/dhcp.h>
00052 #include <pro/sntp.h>
00053 
00054 #include <sys/version.h>
00055 #include <sys/confnet.h>
00056 #include <sys/timer.h>
00057 #include <sys/heap.h>
00058 #include <sys/syslog.h>
00059 
00060 #include <dev/board.h>
00061 
00067 static char *version = "1.0.1";
00068 
00069 /*
00070  * User configuration.
00071  */
00072 
00075 #define MYMAC   0x00, 0x06, 0x98, 0x00, 0x00, 0x00
00076 
00079 #define MYIP    "192.168.192.100"
00080 
00083 #define MYMASK  "255.255.255.0"
00084 
00089 #define MYGATE  "192.168.192.1"
00090 
00092 #define MYLOGD  "192.168.192.222"
00093 
00095 #define MYTIMED "130.149.17.21"
00096 
00098 #define MYUART  "uart0"
00099 
00101 #define MYBAUD  115200
00102 
00104 #define MYDEV   DEV_UART
00105 
00107 #define MYTZ    -1
00108 
00109 
00110 #ifdef __IMAGECRAFT__
00111 #define COMPILERNAME "ICCAVR"
00112 #else
00113 #define COMPILERNAME "GCC"
00114 #endif
00115 
00116 /* Result codes. */
00117 #define UART_OK     0x0001
00118 #define STDOUT_OK   0x0002
00119 #define STDERR_OK   0x0004
00120 #define BAUDRATE_OK 0x0008
00121 #define LANDEV_OK   0x0010
00122 #define NETIF_OK    0x0020
00123 #define NETROUTE_OK 0x0040
00124 #define TIMED_OK    0x0080
00125 
00126 /*
00127  * Application entry.
00128  */
00129 int main(void)
00130 {
00131     u_long baud = MYBAUD;
00132     u_char mac[6] = { MYMAC };
00133     u_long timeserver = inet_addr(MYTIMED);
00134     int rc = 0;
00135     time_t now;
00136 
00137     /*
00138      * Register UART devices, assign stdout and stderr to this device
00139      * and set the baudrate.
00140      */
00141     if(NutRegisterDevice(&MYDEV, 0, 0) == 0) {
00142         rc |= UART_OK;
00143         if(freopen(MYUART, "w", stdout)) {
00144             rc |= STDOUT_OK;
00145             if(_ioctl(_fileno(stdout), UART_SETSPEED, &baud) == 0) {
00146                 rc |= BAUDRATE_OK;
00147             }
00148         }
00149         if(freopen(MYUART, "w", stderr)) {
00150             rc |= STDERR_OK;
00151         }
00152     }
00153 
00154     /*
00155      * Print banner.
00156      */
00157     if(rc & STDOUT_OK) {
00158         printf("\n\nTimeLog %s\nNut/OS %s\n", version, NutVersionString());
00159         puts("Compiled by " COMPILERNAME);
00160         puts("Configure network");
00161     }
00162 
00163 #ifdef DEV_ETHER
00164     /*
00165      * Register LAN device and configure network interface.
00166      */
00167     if(NutRegisterDevice(&DEV_ETHER, 0x8300, 5) == 0) {
00168         rc |= LANDEV_OK;
00169         if (NutDhcpIfConfig("eth0", 0, 60000) == 0) {
00170             rc |= NETIF_OK;
00171         }
00172         else if (NutDhcpIfConfig("eth0", mac, 60000) == 0) {
00173             rc |= NETIF_OK;
00174         }
00175         else if(NutNetIfConfig("eth0", mac, inet_addr(MYIP), inet_addr(MYMASK)) == 0) {
00176             rc |= NETIF_OK;
00177 #ifdef MYGATE
00178             if(NutIpRouteAdd(0, 0, inet_addr(MYGATE), &DEV_ETHER) == 0) {
00179                 rc |= NETROUTE_OK;
00180             }
00181 #endif
00182         }
00183     }
00184 
00185     if(rc & NETIF_OK) {
00186         /*
00187          * Set timezone, query SNTP server and set system time.
00188          */
00189         if(rc & STDOUT_OK) {
00190             puts("Query time from " MYTIMED);
00191         }
00192         _timezone = MYTZ * 60L * 60L;
00193         if(NutSNTPGetTime(&timeserver, &now) == 0) {
00194             rc |= TIMED_OK;
00195             stime(&now);
00196         }
00197     }
00198 
00199     /*
00200      * Open syslog output and route messages to stderr and to
00201      * a remote server.
00202      */
00203     if(rc & STDOUT_OK) {
00204         puts("Initialize syslog");
00205     }
00206     openlog("logtime", (rc & STDERR_OK) ? LOG_PERROR : 0, LOG_USER);
00207     if(rc & NETIF_OK) {
00208         setlogserver(inet_addr(MYLOGD), 0);
00209     }
00210     syslog(LOG_INFO, "TimeLog %s started on Nut/OS %s", version, NutVersionString());
00211 
00212     /*
00213      * Print the result of our initialization.
00214      */
00215     if((rc & UART_OK) == 0) {
00216         syslog(LOG_ERR, "Registering UART device failed");
00217     }
00218     else if((rc & STDOUT_OK) == 0) {
00219         syslog(LOG_ERR, "Assigning stdout failed");
00220     }
00221     else if((rc & STDERR_OK) == 0) {
00222         syslog(LOG_ERR, "Assigning stderr failed");
00223     }
00224     else if((rc & BAUDRATE_OK) == 0) {
00225         syslog(LOG_ERR, "Setting baudrate failed");
00226     }
00227     if((rc & LANDEV_OK) == 0) {
00228         syslog(LOG_ERR, "Registering Ethernet device failed");
00229     }
00230     else if((rc & NETIF_OK) == 0) {
00231         syslog(LOG_ERR, "Configuring network interface failed");
00232     }
00233     else {
00234         syslog(LOG_INFO, "IP %s", inet_ntoa(confnet.cdn_ip_addr));
00235         syslog(LOG_INFO, "Gate %s", inet_ntoa(confnet.cdn_gateway));
00236         syslog(LOG_INFO, "Timed " MYTIMED);
00237         syslog(LOG_INFO, "Syslogd " MYLOGD);
00238     }
00239 
00240     /*
00241      * Endless loop.
00242      */
00243     for(;;) {
00244         syslog(LOG_DEBUG, "%d bytes free", NutHeapAvailable());
00245         NutSleep(60000);
00246     }
00247 #endif
00248     return 0;
00249 }

© 2000-2007 by egnite Software GmbH - visit http://www.ethernut.de/