Example #1
0
/* Initiliaze local parameters */
 int initLocalParams() {
    struct ifreq ifr;
    char buffer[MAXLINESIZE];
    local_info = (struct peerList *)malloc(sizeof(struct peerList));
    lsPacket = (struct linkStatePacket *)malloc(sizeof(struct linkStatePacket));
    lsPacket->header = (struct packetHeader *)malloc(sizeof(struct packetHeader));

  /* Template for local linkStatePacket */
    sock_fd = socket(AF_INET, SOCK_STREAM, 0);
    ifr.ifr_addr.sa_family = AF_INET;

  /* Obtain local IP address of eth0 */
    strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
    if (ioctl(sock_fd, SIOCGIFADDR, &ifr) < 0) {
        perror("ioctl(SIOCGIADDR)");
        return EXIT_FAILURE;
    }
    inet_aton((char *)inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr), &local_info->listenIP);

    sprintf(buffer, "/sys/class/net/%s/address", dev);
    FILE *f = fopen(buffer, "r");
    fread(buffer, 1, MAXLINESIZE, f);
    readMAC(buffer, local_info);
    fclose(f);

    lsPacket->header->type = htons(PACKET_LINKSTATE);
    lsPacket->source = local_info;

    return 0;
 }
int main()
{

	//setup internal clock for 80MHz/40MIPS
	//7.37/2=3.685*43=158.455/2=79.2275
	CLKDIVbits.PLLPRE=0; // PLLPRE (N2) 0=/2 
	PLLFBD=41; //pll multiplier (M) = +2
	CLKDIVbits.PLLPOST=0;// PLLPOST (N1) 0=/2
    while(!OSCCONbits.LOCK);//wait for PLL ready

	SRbits.IPL = 0;	// All interupt levels enabled
		
  dbg_setup_uart();
  printf("DP Web Platform - %s started.\n", version);
  resetCheck();
  randomSeed();
  
  rtimer_init();  
  printf("main: leds init\n");  
  leds_init();
  printf("main: process init\n");
  process_init();
  printf("main: etimer init\n");
  process_start(&etimer_process, NULL);
  printf("main: clock init\n");
  clock_init();

  // Note, readMAC() uses eeprom routines, which require clock_init() to setup clock hardware
  readMAC();  
  printf("main: eth start\n");
  process_start(&enc28j60_process, NULL);
   
  printf("main: tcpip start\n");
  process_start(&tcpip_process, NULL);		// invokes uip_init();
  
  process_start(&announce_process, NULL);
  process_start(&dhcp_process, NULL);
  process_start(&resolv_process, NULL);
  process_start(&ntp_process, NULL);
  
  printf("main: autostart\n");
  autostart_start(autostart_processes);
  
  printf("main: all processes running\n");
  
  while(1) {
    do {
    } while(process_run() > 0);
    idle_count++;
	
    /* Idle! */
  }
  return 0;
}