int main(void) { wdt_enable(WDTO_2S); clock_prescale_set(clock_div_1); // Disable Clock Division // if we had been restarted by watchdog check the REQ BootLoader byte in the // EEPROM ... if (bit_is_set(MCUSR,WDRF) && erb(EE_REQBL)) { ewb( EE_REQBL, 0 ); // clear flag start_bootloader(); } // Setup the timers. Are needed for watchdog-reset OCR0A = 249; // Timer0: 0.008s = 8MHz/256/250 TCCR0B = _BV(CS02); TCCR0A = _BV(WGM01); TIMSK0 = _BV(OCIE0A); TCCR1A = 0; TCCR1B = _BV(CS11) | _BV(WGM12); // Timer1: 1us = 8MHz/8 #ifdef CURV3 // Timer3 is used by the LCD backlight (PWM) TCCR3A = _BV(COM3A1)| _BV(WGM30); // Fast PWM, 8-bit, clear on match TCCR3B = _BV(WGM32) | _BV(CS31); // Prescaler 8MHz/8: 3.9KHz #endif MCUSR &= ~(1 << WDRF); // Enable the watchdog led_init(); spi_init(); eeprom_init(); USB_Init(); fht_init(); tx_init(); joy_init(); // lcd init is done manually from menu_init bat_init(); df_init(&df); fs_init(&fs, df, 0); // needs df_init rtc_init(); // does i2c_init too log_init(); // needs fs_init & rtc_init menu_init(); // needs fs_init input_handle_func = analyze_ttydata; log_enabled = erb(EE_LOGENABLED); display_channel = DISPLAY_USB|DISPLAY_LCD|DISPLAY_RFROUTER; rf_router_init(); checkFrequency(); LED_OFF(); for(;;) { USB_USBTask(); CDC_Task(); RfAnalyze_Task(); Minute_Task(); FastRF_Task(); rf_router_task(); JOY_Task(); } }
int main(void) { wdt_enable(WDTO_2S); #if defined(CUL_ARDUINO) clock_prescale_set(clock_div_2); // for 16MHz #endif MARK433_PORT |= _BV( MARK433_BIT ); // Pull 433MHz marker MARK915_PORT |= _BV( MARK915_BIT ); // Pull 915MHz marker // if we had been restarted by watchdog check the REQ BootLoader byte in the // EEPROM ... if(bit_is_set(MCUSR,WDRF) && erb(EE_REQBL)) { ewb( EE_REQBL, 0 ); // clear flag start_bootloader(); } // Setup the timers. Are needed for watchdog-reset OCR0A = 249; // Timer0: 0.008s = 8MHz/256/250 TCCR0B = _BV(CS02); TCCR0A = _BV(WGM01); TIMSK0 = _BV(OCIE0A); TCCR1A = 0; TCCR1B = _BV(CS11) | _BV(WGM12); // Timer1: 1us = 8MHz/8 MCUSR &= ~(1 << WDRF); // Enable the watchdog led_init(); spi_init(); eeprom_init(); USB_Init(); fht_init(); tx_init(); input_handle_func = analyze_ttydata; #ifdef HAS_RF_ROUTER rf_router_init(); display_channel = (DISPLAY_USB|DISPLAY_RFROUTER); #else display_channel = DISPLAY_USB; #endif checkFrequency(); LED_OFF(); for(;;) { USB_USBTask(); CDC_Task(); RfAnalyze_Task(); Minute_Task(); #ifdef HAS_FASTRF FastRF_Task(); #endif #ifdef HAS_RF_ROUTER rf_router_task(); #endif #ifdef HAS_ASKSIN rf_asksin_task(); #endif #ifdef HAS_MORITZ rf_moritz_task(); #endif #ifdef HAS_RWE rf_rwe_task(); #endif #ifdef HAS_RFNATIVE native_task(); #endif #ifdef HAS_KOPP_FC kopp_fc_task(); #endif #ifdef HAS_MBUS rf_mbus_task(); #endif } }
/** * \brief This is main... */ int main(void) { lcd_init(); key_init(); uart_init(); eeprom_init(); temp_init(); timer_init(); sei(); lcd_symbol_set(LCD_SYMBOL_RAVEN); lcd_symbol_set(LCD_SYMBOL_IP); /* Start with main menu */ read_menu(0); /* and draw it */ lcd_puts_P(menu.text); timer_start(); for (;;){ /* Make sure interrupts are always on */ sei(); /* The one second timer has fired. */ if(timer_flag){ timer_flag = false; /* Check if main menu needs toggled. */ check_main_menu(); /* Update LCD with temp data. */ if(temp_flag){ menu_display_temp(); } /* Auto send temp data to 1284p. */ if(auto_temp){ menu_send_temp(); } /* If ping mode, send 4 ping requests and then stop. */ if(ping_mode){ if((PING_ATTEMPTS == count) && !timeout_flag){ count = 0; timeout_count = 0; menu_stop_ping(); } else if(timeout_flag){ timeout_flag = false; timeout_count++; /* Display timeout message if all PING_ATTEMPTS were not successful. */ if(PING_ATTEMPTS == timeout_count){ lcd_puts_P(PSTR("PINGS FAILED")); } } else{ count = menu_send_ping(); } } } /* Check for button press and deal with it */ if (is_button()){ /* Dispatch the button pressed */ switch (get_button()){ case KEY_UP: read_menu(menu.up); lcd_puts_P(menu.text); break; case KEY_DOWN: read_menu(menu.down); lcd_puts_P(menu.text); break; case KEY_LEFT: read_menu(menu.left); lcd_puts_P(menu.text); break; case KEY_RIGHT: /* * Check to see if we should show another menu or * run a function */ if (!menu.enter_func){ /* Just another menu to display */ read_menu(menu.right); lcd_puts_P(menu.text); break; } /* Drop through here */ case KEY_ENTER: /* Call the menu function on right or enter buttons */ if (menu.enter_func){ menu.enter_func(menu.state); if (menu.state){ /* * We just called a selection menu (not a test), * so re-display the text for this menu level */ lcd_puts_P(menu.text); } /* After enter key, check the right button menu and display. */ read_menu(menu.right); lcd_puts_P(menu.text); } break; default: break; } /* After button press, check for menus... */ check_menu(); } /* Process any progress frames */ uart_serial_rcv_frame(false); } /* end for(). */ } /* end main(). */
int main(void) { wdt_disable(); clock_prescale_set(clock_div_1); led_init(); LED_ON(); spi_init(); // eeprom_factory_reset("xx"); eeprom_init(); // Setup OneWire and make a full search at the beginning (takes some time) #ifdef HAS_ONEWIRE i2c_init(); onewire_Init(); onewire_FullSearch(); #endif // Setup the timers. Are needed for watchdog-reset #if defined (HAS_IRRX) || defined (HAS_IRTX) ir_init(); // IR uses highspeed TIMER0 for sampling OCR0A = 1; // Timer0: 0.008s = 8MHz/256/2 == 15625Hz #else OCR0A = 249; // Timer0: 0.008s = 8MHz/256/250 == 125Hz #endif TCCR0B = _BV(CS02); TCCR0A = _BV(WGM01); TIMSK0 = _BV(OCIE0A); TCCR1A = 0; TCCR1B = _BV(CS11) | _BV(WGM12); // Timer1: 1us = 8MHz/8 MCUSR &= ~(1 << WDRF); // Enable the watchdog wdt_enable(WDTO_2S); uart_init( UART_BAUD_SELECT_DOUBLE_SPEED(UART_BAUD_RATE,F_CPU) ); fht_init(); tx_init(); input_handle_func = analyze_ttydata; display_channel = DISPLAY_USB; #ifdef HAS_RF_ROUTER rf_router_init(); display_channel |= DISPLAY_RFROUTER; #endif LED_OFF(); sei(); for(;;) { uart_task(); RfAnalyze_Task(); Minute_Task(); #ifdef HAS_FASTRF FastRF_Task(); #endif #ifdef HAS_RF_ROUTER rf_router_task(); #endif #ifdef HAS_ASKSIN rf_asksin_task(); #endif #ifdef HAS_MORITZ rf_moritz_task(); #endif #ifdef HAS_RWE rf_rwe_task(); #endif #ifdef HAS_RFNATIVE native_task(); #endif #ifdef HAS_KOPP_FC kopp_fc_task(); #endif #if defined(HAS_IRRX) || defined(HAS_IRTX) ir_task(); #endif #ifdef HAS_MBUS rf_mbus_task(); #endif #ifdef HAS_ZWAVE rf_zwave_task(); #endif } }
int main(void) { wdt_disable(); #ifdef CSMV4 LED_ON_DDR |= _BV( LED_ON_PIN ); LED_ON_PORT |= _BV( LED_ON_PIN ); #endif led_init(); LED_ON(); spi_init(); // eeprom_factory_reset("xx"); eeprom_init(); // led_mode = 2; // if we had been restarted by watchdog check the REQ BootLoader byte in the // EEPROM ... // if(bit_is_set(MCUSR,WDRF) && eeprom_read_byte(EE_REQBL)) { // eeprom_write_byte( EE_REQBL, 0 ); // clear flag // start_bootloader(); // } // Setup the timers. Are needed for watchdog-reset #ifdef HAS_IRRX ir_init(); // IR uses highspeed TIMER0 for sampling OCR0A = 1; // Timer0: 0.008s = 8MHz/256/2 == 15625Hz #else OCR0A = 249; // Timer0: 0.008s = 8MHz/256/250 == 125Hz #endif TCCR0B = _BV(CS02); TCCR0A = _BV(WGM01); TIMSK0 = _BV(OCIE0A); TCCR1A = 0; TCCR1B = _BV(CS11) | _BV(WGM12); // Timer1: 1us = 8MHz/8 clock_prescale_set(clock_div_1); MCUSR &= ~(1 << WDRF); // Enable the watchdog wdt_enable(WDTO_2S); uart_init( UART_BAUD_SELECT_DOUBLE_SPEED(UART_BAUD_RATE,F_CPU) ); #ifdef HAS_DOGM dogm_init(); #endif fht_init(); tx_init(); input_handle_func = analyze_ttydata; display_channel = DISPLAY_USB; #ifdef HAS_RF_ROUTER rf_router_init(); display_channel |= DISPLAY_RFROUTER; #endif #ifdef HAS_DOGM display_channel |= DISPLAY_DOGM; #endif LED_OFF(); sei(); for(;;) { uart_task(); RfAnalyze_Task(); Minute_Task(); #ifdef HAS_FASTRF FastRF_Task(); #endif #ifdef HAS_RF_ROUTER rf_router_task(); #endif #ifdef HAS_ASKSIN rf_asksin_task(); #endif #ifdef HAS_MORITZ rf_moritz_task(); #endif #ifdef HAS_IRRX ir_task(); #endif #ifdef HAS_MBUS rf_mbus_task(); #endif } }
int do_eeprom ( cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) { const char *const fmt = "\nEEPROM @0x%lX %s: addr %08lx off %04lx count %ld ... "; #if defined(CONFIG_SYS_I2C_MULTI_EEPROMS) if (argc == 6) { ulong dev_addr = simple_strtoul (argv[2], NULL, 16); ulong addr = simple_strtoul (argv[3], NULL, 16); ulong off = simple_strtoul (argv[4], NULL, 16); ulong cnt = simple_strtoul (argv[5], NULL, 16); #else if (argc == 5) { ulong dev_addr = CONFIG_SYS_DEF_EEPROM_ADDR; ulong addr = simple_strtoul (argv[2], NULL, 16); ulong off = simple_strtoul (argv[3], NULL, 16); ulong cnt = simple_strtoul (argv[4], NULL, 16); #endif /* CONFIG_SYS_I2C_MULTI_EEPROMS */ # if !defined(CONFIG_SPI) || defined(CONFIG_ENV_EEPROM_IS_ON_I2C) eeprom_init (); # endif /* !CONFIG_SPI */ if (strncmp (argv[1], "read", 4) == 0) { int rcode=0; printf (fmt, dev_addr, argv[1], addr, off, cnt); MS_U8 pu8addr[2]; pu8addr[0] = HIBYTE(off); pu8addr[1] = LOBYTE(off); #if(CONFIG_MSTARI2C == 1) rcode = MApi_SWI2C_ReadBytes((MS_U16)dev_addr, 2, (MS_U8*)pu8addr,(MS_U16)cnt, (MS_U8*)addr); #else rcode = eeprom_read (dev_addr, off, (uchar *) addr, cnt); #endif puts ("done\n"); return rcode; } else if (strncmp (argv[1], "write", 5) == 0) { int rcode=0; printf (fmt, dev_addr, argv[1], addr, off, cnt); #if(CONFIG_MSTARI2C == 1) rcode = MApi_SWI2C_WriteBytes((MS_U16)dev_addr,1, (MS_U8*)off,(MS_U16)cnt, (MS_U8*)addr); #else rcode = eeprom_write (dev_addr, off, (uchar *) addr, cnt); #endif puts ("done\n"); return rcode; } } return cmd_usage(cmdtp); } #endif /*----------------------------------------------------------------------- * * for CONFIG_SYS_I2C_EEPROM_ADDR_LEN == 2 (16-bit EEPROM address) offset is * 0x000nxxxx for EEPROM address selectors at n, offset xxxx in EEPROM. * * for CONFIG_SYS_I2C_EEPROM_ADDR_LEN == 1 (8-bit EEPROM page address) offset is * 0x00000nxx for EEPROM address selectors and page number at n. */ #if !defined(CONFIG_SPI) || defined(CONFIG_ENV_EEPROM_IS_ON_I2C) #if !defined(CONFIG_SYS_I2C_EEPROM_ADDR_LEN) || CONFIG_SYS_I2C_EEPROM_ADDR_LEN < 1 || CONFIG_SYS_I2C_EEPROM_ADDR_LEN > 2 #error CONFIG_SYS_I2C_EEPROM_ADDR_LEN must be 1 or 2 #endif #endif int eeprom_read (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt) { unsigned end = offset + cnt; unsigned blk_off; int rcode = 0; /* Read data until done or would cross a page boundary. * We must write the address again when changing pages * because the next page may be in a different device. */ while (offset < end) { unsigned alen, len; #if !defined(CONFIG_SYS_I2C_FRAM) unsigned maxlen; #endif #if CONFIG_SYS_I2C_EEPROM_ADDR_LEN == 1 && !defined(CONFIG_SPI_X) uchar addr[2]; blk_off = offset & 0xFF; /* block offset */ addr[0] = offset >> 8; /* block number */ addr[1] = blk_off; /* block offset */ alen = 2; #else uchar addr[3]; blk_off = offset & 0xFF; /* block offset */ addr[0] = offset >> 16; /* block number */ addr[1] = offset >> 8; /* upper address octet */ addr[2] = blk_off; /* lower address octet */ alen = 3; #endif /* CONFIG_SYS_I2C_EEPROM_ADDR_LEN, CONFIG_SPI_X */ addr[0] |= dev_addr; /* insert device address */ len = end - offset; /* * For a FRAM device there is no limit on the number of the * bytes that can be ccessed with the single read or write * operation. */ #if !defined(CONFIG_SYS_I2C_FRAM) maxlen = 0x100 - blk_off; if (maxlen > I2C_RXTX_LEN) maxlen = I2C_RXTX_LEN; if (len > maxlen) len = maxlen; #endif #if defined(CONFIG_SPI) && !defined(CONFIG_ENV_EEPROM_IS_ON_I2C) spi_read (addr, alen, buffer, len); #else if (i2c_read (addr[0], offset, alen-1, buffer, len) != 0) rcode = 1; #endif buffer += len; offset += len; } return rcode; }
int main(void) { //ewb((uint8_t*)0x80, erb((uint8_t*)0x80)+1); wdt_enable(WDTO_2S); // Avoid an early reboot clock_prescale_set(clock_div_1); // Disable Clock Division:1->8MHz #ifdef HAS_XRAM init_memory_mapped(); // First initialize the RAM #endif // if we had been restarted by watchdog check the REQ BootLoader byte in the // EEPROM if(bit_is_set(MCUSR,WDRF) && erb(EE_REQBL)) { ewb( EE_REQBL, 0 ); // clear flag start_bootloader(); } while(tx_report); // reboot if the bss is not initialized // Setup the timers. Are needed for watchdog-reset OCR0A = 249; // Timer0: 0.008s = 8MHz/256/250 TCCR0B = _BV(CS02); TCCR0A = _BV(WGM01); TIMSK0 = _BV(OCIE0A); TCCR1A = 0; TCCR1B = _BV(CS11) | _BV(WGM12); // Timer1: 1us = 8MHz/8 MCUSR &= ~(1 << WDRF); // Enable the watchdog led_init(); // So we can debug spi_init(); eeprom_init(); USB_Init(); fht_init(); tx_init(); ethernet_init(); #ifdef HAS_FS df_init(&df); fs_init(&fs, df, 0); // needs df_init log_init(); // needs fs_init & rtc_init log_enabled = erb(EE_LOGENABLED); #endif input_handle_func = analyze_ttydata; display_channel = DISPLAY_USB; LED_OFF(); for(;;) { USB_USBTask(); CDC_Task(); RfAnalyze_Task(); Minute_Task(); FastRF_Task(); rf_router_task(); #ifdef HAS_ASKSIN rf_asksin_task(); #endif #ifdef HAS_ETHERNET Ethernet_Task(); #endif } }
//------------------------------------------------------------------------------ /// Application entry point. Configures the DBGU, PIT, TC0, LEDs and buttons /// and makes LED\#1 blink in its infinite loop, using the Wait function. /// \return Unused (ANSI-C compatibility). //------------------------------------------------------------------------------ int main(void) { // DBGU configuration TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK); TRACE_INFO_WP("\n\r"); TRACE_INFO("Getting new Started Project --\n\r"); TRACE_INFO("%s\n\r", BOARD_NAME); TRACE_INFO("Compiled: %s %s --\n\r", __DATE__, __TIME__); //Configure Reset Controller AT91C_BASE_RSTC->RSTC_RMR=AT91C_RSTC_URSTEN | 0xa5<<24; TRACE_INFO("init Flash\n\r"); flash_init(); TRACE_INFO("init Timer\n\r"); // Configure timer 0 ticks=0; extern void ISR_Timer0(); AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_TC0); AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS; AT91C_BASE_TC0->TC_IDR = 0xFFFFFFFF; AT91C_BASE_TC0->TC_SR; AT91C_BASE_TC0->TC_CMR = AT91C_TC_CLKS_TIMER_DIV5_CLOCK | AT91C_TC_CPCTRG; AT91C_BASE_TC0->TC_RC = 375; AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; AIC_ConfigureIT(AT91C_ID_TC0, AT91C_AIC_PRIOR_LOWEST, ISR_Timer0); AIC_EnableIT(AT91C_ID_TC0); AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG; // Configure timer 1 extern void ISR_Timer1(); AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_TC1); AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKDIS; //Stop clock AT91C_BASE_TC1->TC_IDR = 0xFFFFFFFF; //Disable Interrupts AT91C_BASE_TC1->TC_SR; //Read Status register AT91C_BASE_TC1->TC_CMR = AT91C_TC_CLKS_TIMER_DIV4_CLOCK | AT91C_TC_CPCTRG; // Timer1: 2,666us = 48MHz/128 AT91C_BASE_TC1->TC_RC = 0xffff; AT91C_BASE_TC1->TC_IER = AT91C_TC_CPCS; AIC_ConfigureIT(AT91C_ID_TC1, 1, ISR_Timer1); AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG; led_init(); TRACE_INFO("init EEprom\n\r"); eeprom_init(); rb_reset(&TTY_Rx_Buffer); rb_reset(&TTY_Tx_Buffer); input_handle_func = analyze_ttydata; LED_OFF(); LED2_OFF(); LED3_OFF(); spi_init(); fht_init(); tx_init(); TRACE_INFO("init USB\n\r"); CDCDSerialDriver_Initialize(); USBD_Connect(); wdt_enable(WDTO_2S); fastrf_on=0; display_channel = DISPLAY_USB; TRACE_INFO("init Complete\n\r"); checkFrequency(); // Main loop while (1) { CDC_Task(); Minute_Task(); RfAnalyze_Task(); #ifdef HAS_FASTRF FastRF_Task(); #endif #ifdef HAS_RF_ROUTER rf_router_task(); #endif #ifdef HAS_ASKSIN rf_asksin_task(); #endif #ifdef HAS_MORITZ rf_moritz_task(); #endif #ifdef HAS_RWE rf_rwe_task(); #endif #ifdef HAS_MBUS rf_mbus_task(); #endif #ifdef HAS_RFNATIVE native_task(); #endif #ifdef HAS_KOPP_FC kopp_fc_task(); #endif #ifdef HAS_ZWAVE rf_zwave_task(); #endif #ifdef HAS_MAICO rf_maico_task(); #endif #ifdef DBGU_UNIT_IN if(DBGU_IsRxReady()){ unsigned char volatile * const ram = (unsigned char *) AT91C_ISRAM; unsigned char x; x=DBGU_GetChar(); switch(x) { case 'd': puts("USB disconnect\n\r"); USBD_Disconnect(); break; case 'c': USBD_Connect(); puts("USB Connect\n\r"); break; case 'w': ewb(0x1e, 0x55); break; case 'S': USBD_Disconnect(); my_delay_ms(250); my_delay_ms(250); //Reset *ram = 0xaa; AT91C_BASE_RSTC->RSTC_RCR = AT91C_RSTC_PROCRST | AT91C_RSTC_PERRST | AT91C_RSTC_EXTRST | 0xA5<<24; while (1); break; default: rb_put(&TTY_Tx_Buffer, x); } } #endif if (USBD_GetState() == USBD_STATE_CONFIGURED) { if( USBState == STATE_IDLE ) { CDCDSerialDriver_Read(usbBuffer, DATABUFFERSIZE, (TransferCallback) UsbDataReceived, 0); LED3_ON(); USBState=STATE_RX; } } if( USBState == STATE_SUSPEND ) { TRACE_INFO("suspend !\n\r"); USBState = STATE_IDLE; } if( USBState == STATE_RESUME ) { TRACE_INFO("resume !\n\r"); USBState = STATE_IDLE; } } }
int main(void) { /* * Initalize hardware. */ PIO_InitializeInterrupts(0); usbmain(); clock_init(); rtimer_init(); process_init(); process_start(&etimer_process, NULL); ctimer_init(); NETSTACK_RADIO.init(); rimeaddr_t addr; eeprom_init(); memset(&addr, 0, sizeof(rimeaddr_t)); memcpy(&addr.u8, eeprom_getEUI64(), 8); #if UIP_CONF_IPV6 memcpy(&uip_lladdr.addr, &addr.u8, 8); #endif #if RF212BB rf212_set_pan_addr( eeprom_getPanid(), eeprom_getPanaddr(), (uint8_t *)&addr.u8); #endif extern uint16_t mac_dst_pan_id; extern uint16_t mac_src_pan_id; //set pan_id for frame creation mac_dst_pan_id = eeprom_getPanid(); mac_src_pan_id = mac_dst_pan_id; rimeaddr_set_node_addr(&addr); PRINTFD("MAC address %x:%x:%x:%x:%x:%x:%x:%x\n",addr.u8[0],addr.u8[1],addr.u8[2],addr.u8[3],addr.u8[4],addr.u8[5],addr.u8[6],addr.u8[7]); /* Initialize stack protocols */ queuebuf_init(); NETSTACK_RDC.init(); NETSTACK_MAC.init(); NETSTACK_NETWORK.init(); //netstack_init(); process_start(&tcpip_process, NULL); /* * Initialize Contiki and our processes. */ //netstack_init(); autostart_start(autostart_processes); while(1) { int r; do { /* Reset watchdog. */ r = process_run(); } while(r > 0); } }
void network_init(void) { uip_ipaddr_t ip; (void) ip; /* Keep GCC quiet. */ uip_init(); #if defined(RFM12_IP_SUPPORT) && defined(UIP_MULTI_STACK) uip_stack_set_active(STACK_RFM12); rfm12_stack_init(); #endif #if defined(ZBUS_SUPPORT) && defined(UIP_MULTI_STACK) uip_stack_set_active(STACK_ZBUS); zbus_stack_init(); #endif #ifdef OPENVPN_SUPPORT uip_stack_set_active(STACK_OPENVPN); openvpn_init(); #endif /* load base network settings */ # ifdef DEBUG_NET_CONFIG debug_printf("net: loading base network settings\n"); # endif # ifdef ENC28J60_SUPPORT uip_stack_set_active(STACK_ENC); /* use uip buffer as generic space here, since when this function is called, * no network packets will be processed */ #ifdef EEPROM_SUPPORT /* use global network packet buffer for configuration */ uint8_t checksum = eeprom_get_chksum(); uint8_t saved_checksum; eeprom_restore_char(crc, &saved_checksum); if (checksum != saved_checksum) eeprom_init(); #endif #ifdef ENC28J60_SUPPORT network_config_load(); #endif /* Do the autoconfiguration after the MAC is set */ # if UIP_CONF_IPV6 && !defined(IPV6_STATIC_SUPPORT) uip_setprefixlen(64); uip_ip6autoconfig(0xFE80, 0x0000, 0x0000, 0x0000); # endif # if defined(IPV6_STATIC_SUPPORT) && defined(TFTPOMATIC_SUPPORT) const unsigned char *filename = CONF_TFTP_IMAGE; set_CONF_TFTP_IP(&ip); tftp_fire_tftpomatic(&ip, filename); bootload_delay = CONF_BOOTLOAD_DELAY; # endif /* IPV6_STATIC_SUPPORT && TFTPOMATIC_SUPPORT */ # elif !defined(ROUTER_SUPPORT) /* and not ENC28J60_SUPPORT */ /* Don't allow for eeprom-based configuration of rfm12/zbus IP address, mainly for code size reasons. */ set_CONF_ETHERRAPE_IP(&ip); uip_sethostaddr(&ip); # endif /* not ENC28J60_SUPPORT and not ROUTER_SUPPORT */ ethersex_meta_netinit(); # ifdef ENC28J60_SUPPORT init_enc28j60(); # if UIP_CONF_IPV6 uip_neighbor_init(); # else uip_arp_init(); # endif # endif }
int env_init(void) { ulong len, crc[2], crc_tmp; unsigned int off, off_env[2]; uchar buf[64], flags[2]; int i, crc_ok[2] = {0, 0}; eeprom_init(); /* prepare for EEPROM read/write */ off_env[0] = CONFIG_ENV_OFFSET; off_env[1] = CONFIG_ENV_OFFSET_REDUND; for (i = 0; i < 2; i++) { /* read CRC */ eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR, off_env[i] + offsetof(env_t, crc), (uchar *)&crc[i], sizeof(ulong)); /* read FLAGS */ eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR, off_env[i] + offsetof(env_t, flags), (uchar *)&flags[i], sizeof(uchar)); crc_tmp = 0; len = ENV_SIZE; off = off_env[i] + offsetof(env_t, data); while (len > 0) { int n = (len > sizeof(buf)) ? sizeof(buf) : len; eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR, off, buf, n); crc_tmp = crc32(crc_tmp, buf, n); len -= n; off += n; } if (crc_tmp == crc[i]) crc_ok[i] = 1; } if (!crc_ok[0] && !crc_ok[1]) { gd->env_addr = 0; gd->env_valid = 0; return 0; } else if (crc_ok[0] && !crc_ok[1]) { gd->env_valid = 1; } else if (!crc_ok[0] && crc_ok[1]) { gd->env_valid = 2; } else { /* both ok - check serial */ if (flags[0] == ACTIVE_FLAG && flags[1] == OBSOLETE_FLAG) gd->env_valid = 1; else if (flags[0] == OBSOLETE_FLAG && flags[1] == ACTIVE_FLAG) gd->env_valid = 2; else if (flags[0] == 0xFF && flags[1] == 0) gd->env_valid = 2; else if (flags[1] == 0xFF && flags[0] == 0) gd->env_valid = 1; else /* flags are equal - almost impossible */ gd->env_valid = 1; } if (gd->env_valid == 2) gd->env_addr = off_env[1] + offsetof(env_t, data); else if (gd->env_valid == 1) gd->env_addr = off_env[0] + offsetof(env_t, data); return 0; }