示例#1
0
int main(void) {
  //  uint8_t i;
  uint8_t mcustate;

  // turn boost off
  TCCR0B = 0;
  BOOST_DDR |= _BV(BOOST);
  BOOST_PORT &= ~_BV(BOOST); // pull boost fet low

  // check if we were reset
  mcustate = MCUSR;
  MCUSR = 0;

  wdt_disable();
  // now turn it back on... 2 second time out
  //WDTCSR |= _BV(WDP0) | _BV(WDP1) | _BV(WDP2);
  //WDTCSR = _BV(WDE);
  wdt_enable(WDTO_2S);
  kickthedog();

  // we lost power at some point so lets alert the user
  // that the time may be wrong (the clock still works)
  timeunknown = 1;

  // have we read the time & date from eeprom?
  restored = 0;

  // setup uart
  uart_init(BRRL_192);
  //DEBUGP("VFD Clock");
  DEBUGP("!");

  //DEBUGP("turning on anacomp");
  // set up analog comparator
  ACSR = _BV(ACBG) | _BV(ACIE); // use bandgap, intr. on toggle!
  // settle!
  if (ACSR & _BV(ACO)) {
    // hmm we should not interrupt here
    ACSR |= _BV(ACI);

    // even in low power mode, we run the clock 
    DEBUGP("clock init");
    clock_init();  

  } else {
    // we aren't in low power mode so init stuff

    // init io's
    initbuttons();
    
    VFDSWITCH_PORT &= ~_BV(VFDSWITCH);
    
    DEBUGP("turning on buttons");
    // set up button interrupts
    DEBUGP("turning on alarmsw");
    // set off an interrupt if alarm is set or unset
    EICRA = _BV(ISC00);
    EIMSK = _BV(INT0);
  
    displaymode = SHOW_TIME;
    DEBUGP("vfd init");
    vfd_init();
   
    dimmer_init();
 
    DEBUGP("boost init");
    brightness_level = eeprom_read_byte((uint8_t *)EE_BRIGHT);
    boost_init(brightness_level);
    sei();

    region = eeprom_read_byte((uint8_t *)EE_REGION);
    
    DEBUGP("speaker init");
    speaker_init();

    beep(4000, 1);

    DEBUGP("clock init");
    clock_init();  

    DEBUGP("alarm init");
    setalarmstate();
  }
  DEBUGP("done");
  while (1) {
    //_delay_ms(100);
    kickthedog();
    //uart_putc_hex(ACSR);
    if (ACSR & _BV(ACO)) {
      // DEBUGP("SLEEPYTIME");
      gotosleep();
      continue;
    }
    //DEBUGP(".");
    if (just_pressed & 0x1) {
      just_pressed = 0;
      switch(displaymode) {
      case (SHOW_TIME):
	displaymode = SET_ALARM;
	display_str("set alarm");
	set_alarm();
	break;
      case (SET_ALARM):
	displaymode = SET_TIME;
	display_str("set time");
	set_time();
	timeunknown = 0;
	break;
      case (SET_TIME):
	displaymode = SET_DATE;
	display_str("set date");
	set_date();
	break;
      case (SET_DATE):
	displaymode = SET_BRIGHTNESS;
	display_str("set brit");
	set_brightness();
	break;
      case (SET_BRIGHTNESS):
	displaymode = SET_DIMMER;
	display_str("set dimr");
	set_dimmer();
	break;
      case (SET_DIMMER):
	displaymode = SET_VOLUME;
	display_str("set vol ");
	set_volume();
	break;
      case (SET_VOLUME):
	displaymode = SET_REGION;
	display_str("set regn");
	set_region();
	break;
	/*
      case (SET_REGION):
	displaymode = SET_SNOOZE;
	display_str("set snoz");
	set_snooze();
	break;
	*/
      default:
	displaymode = SHOW_TIME;
      }
    } else if ((just_pressed & 0x2) || (just_pressed & 0x4)) {
      just_pressed = 0;
      displaymode = NONE;
      display_date(DAY);

      kickthedog();
      delayms(1500);
      kickthedog();

      displaymode = SHOW_TIME;     
    } 
  }
}
int process_cmd(char *cmd,int sockfd){

 char * msg;
 commands cmd_pkt;
 char *cmds;
 cmds =strdup(cmd);
 cmd_pkt = getdlmtdcmdstr(cmd);

 if(cmd_pkt.no_of_args == -1)
  return 0;
 //printf("%s:%s\n",cmd_pkt.cmnd,"");
 /*call method to validate the nodes*/
 if(strcasecmp(cmd_pkt.arglist[0],"UPDATE")==0){
    msg ="Invalid Arguments.Usage - update <server-ID1> <server-ID2> <Link Cost>";
   if(cmd_pkt.no_of_args != 4 ){
     //printf("%s:%s\n",cmd_pkt.cmnd,msg);
     cse4589_print_and_log("%s:%s\n",cmds,msg);
     //printf("\n[PA3]$:Invalid Arguments.Usage - update <server-ID1> <server-ID2> <Link Cost>");
     return -1;
   }
   
   if(validate_nodes(cmd_pkt.arglist,0) == -1){
     msg ="Invalid Arguments.server-ID1 - Node Id server-ID2:Must be neighbor node Id";
     cse4589_print_and_log("%s:%s\n",cmds,msg);
   
   return -1;
   }
   else{
    update_rout_info(cmd_pkt.arglist); 
    compute_bellman_ford();
  }
   //printf("%s:SUCCESS\n",cmd_pkt.cmnd);
   cse4589_print_and_log("%s:SUCCESS\n",cmds);
   
 }/*call method to send the update packet */ 
   else if(strcasecmp(cmd_pkt.arglist[0],"STEP")==0){
    if(cmd_pkt.no_of_args > 1 ){
     msg ="Invalid Arguments.Usage - step"; 
     cse4589_print_and_log("%s:%s\n",cmds,msg);
     //printf("\n[PA3]$:Invalid Arguments.Usage - step");
     return -1;
   }
   send_update_packet_nnodes(sockfd);
   //printf("%s:SUCCESS\n",cmd_pkt.cmnd);
   cse4589_print_and_log("%s:SUCCESS\n",cmds); 

 }
 else if(strcasecmp(cmd_pkt.arglist[0],"PACKETS")==0){
  if(cmd_pkt.no_of_args > 1 ){
   msg ="Invalid Arguments.Usage - packets";
   cse4589_print_and_log("%s:%s\n",cmds,msg);
   //printf("\n[PA3]$:Invalid Arguments.Usage - packets");
   return -1;
 }
  //display the packets received
  //printf("\n The number of packets sent : %d",packet_count);
  cse4589_print_and_log("%s:SUCCESS\n",cmds);
  cse4589_print_and_log("%d\n",packet_count);
  //printf("%s:SUCCESS\n",cmd_pkt.cmnd);
  packet_count = 0 ;

}else if(strcasecmp(cmd_pkt.arglist[0],"DISPLAY")==0){
  if(cmd_pkt.no_of_args > 1 ){
    
   msg ="Invalid Arguments.Usage - display";
   cse4589_print_and_log("%s:%s\n",cmds,msg);
   //printf("\n[PA3]$:Invalid Arguments.Usage - display");
   return -1;
 }
  cse4589_print_and_log("%s:SUCCESS\n",cmds);
  dsplay_rt_table();
}else if(strcasecmp(cmd_pkt.arglist[0],"DISABLE")==0){
  if(cmd_pkt.no_of_args != 2  ){
   msg ="Invalid Arguments.Usage - disable <server-id>"; 
   //printf("\n[PA3]$:Invalid Arguments.Usage - disable <server-ID>");
   cse4589_print_and_log("%s:%s\n",cmds,msg);
   return -1;
 } 
  int iret = 0;
  iret = disable_link(cmd_pkt.arglist); 
    //printf("%s:SUCCESS\n",cmd_pkt.cmnd);
  msg ="Invalid Arguments.Usage - Server Id has to be a neighbor node id"; 
  if(iret == 1)
  cse4589_print_and_log("%s:SUCCESS\n",cmds);
  else
  cse4589_print_and_log("%s:%s\n",cmds,msg);

}else if(strcasecmp(cmd_pkt.arglist[0],"CRASH")==0){
 if(cmd_pkt.no_of_args > 1 ){
   msg ="Invalid Arguments.Usage - crash";
   cse4589_print_and_log("%s:%s\n",cmds,msg);
   //printf("\n[PA3]$:Invalid Arguments.Usage - crash");
   return -1;
 }
  gotosleep();
 
}else if(strcasecmp(cmd_pkt.arglist[0],"DUMP")==0){
  if(cmd_pkt.no_of_args > 1 ){
   msg ="Invalid Arguments.Usage - dump"; 
   //printf("\n[PA3]$:Invalid Arguments.Usage - dump");
   cse4589_print_and_log("%s:%s\n",cmds,msg);
   return -1;
 }
 build_rtpkt_dump(1);
 //printf("%s:SUCCESS\n",cmd_pkt.cmnd);
 cse4589_print_and_log("%s:SUCCESS\n",cmds);
}else if(strcasecmp(cmd_pkt.arglist[0],"academic_integrity")== 0)
{
  //printf("\n I have read and understood the course academic integrity policy located at http://www.cse.buffalo.edu/faculty/dimitrio/courses/cse4589_f14/index.html#integrity");
  cse4589_print_and_log("I have read and understood the course academic integrity policy located at http://www.cse.buffalo.edu/faculty/dimitrio/courses/cse4589_f14/index.html#integrity");
}else{
 printf("\n[PA3]$:Command not found");
 fflush(stdout);//cse4589_print_and_log("Command not found\n");
 return -1;
}
free(cmds);
return 1;
}