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