void init_net(void) { rimeaddr_t rimeaddr; tr1001_init(); rime_init(nullmac_init(&tr1001_driver)); rimeaddr.u8[0] = node_id & 0xff; rimeaddr.u8[1] = node_id >> 8; rimeaddr_set_node_addr(&rimeaddr); rs232_set_input(serial_line_input_byte); }
int main() { disableIRQ(); disableFIQ(); *AT91C_AIC_IDCR = 0xffffffff; *AT91C_PMC_PCDR = 0xffffffff; *AT91C_PMC_PCER = (1 << AT91C_ID_PIOA); dbg_setup_uart(); printf("Initialising\n"); leds_arch_init(); clock_init(); process_init(); process_start(&etimer_process, NULL); ctimer_init(); robot_stepper_init(); enableIRQ(); cc2420_init(); cc2420_set_pan_addr(0x2024, 0, &uip_hostaddr.u16[1]); cc2420_set_channel(RF_CHANNEL); rime_init(nullmac_init(&cc2420_driver)); printf("CC2420 setup done\n"); rimeaddr_set_node_addr(&node_addr); #if WITH_UIP { uip_ipaddr_t hostaddr, netmask; uip_init(); uip_ipaddr(&hostaddr, 172,16, rimeaddr_node_addr.u8[0],rimeaddr_node_addr.u8[1]); uip_ipaddr(&netmask, 255,255,0,0); uip_ipaddr_copy(&meshif.ipaddr, &hostaddr); printf("Host addr\n"); uip_sethostaddr(&hostaddr); uip_setnetmask(&netmask); uip_over_mesh_set_net(&hostaddr, &netmask); /* uip_fw_register(&slipif);*/ /*uip_over_mesh_set_gateway_netif(&slipif);*/ uip_fw_default(&meshif); printf("Mesh init\n"); uip_over_mesh_init(UIP_OVER_MESH_CHANNEL); printf("uIP started with IP address %d.%d.%d.%d\n", uip_ipaddr_to_quad(&hostaddr)); } #endif /* WITH_UIP */ #if WITH_UIP process_start(&tcpip_process, NULL); process_start(&uip_fw_process, NULL); /* Start IP output */ #endif /* WITH_UIP */ printf("Heap size: %ld bytes\n", &__heap_end__ - (char*)sbrk(0)); printf("Started\n"); autostart_start(autostart_processes); printf("Processes running\n"); while(1) { do { /* Reset watchdog. */ wdt_reset(); } while(process_run() > 0); /* Idle! */ /* Stop processor clock */ *AT91C_PMC_SCDR |= AT91C_PMC_PCK; } return 0; }
/*---------------------------------------------------------------------------*/ PROCESS_THREAD(example_abc_process, ev, data) { static struct channel *c; static struct etimer et; PROCESS_BEGIN(); char buffer[32]; //button_sensor.activate(); SENSORS_ACTIVATE(button_sensor); printf("ready to rock\n"); //ds2411_init(); static int i; //cc2420_init(); //cc2420_set_pan_addr(panId, 0 /*XXX*/, ds2411_id); //cc2420_set_channel(26); //abc_open(&abc, 128, &abc_call); // set_rime_addr(); // cc2420_init(); //cc2420_set_pan_addr(panId, 0 , ds2411_id); // cc2420_set_channel(RF_CHANNEL); //cc2420_set_txpower(31); //nullmac_init(&cc2420_driver); //rime_init(&nullmac_driver); //cc2420_set_txpower(31); //cc2420_on(); channel_init(); packetbuf_clear(); driver = nullmac_init(&cc2420_driver); //rime_init(driver); //driver = sicslowmac_init(&cc2420_driver); cc2420_set_channel(26); channel_open(c, 34); /*packetbuf_clear();*/ driver->set_receive_function(recv); //packetbuf_clear(); channel_set_attributes(34, attributes); //set_receive_function(driver); driver->on(); leds_toggle(LEDS_RED); packetbuf_clear(); etimer_set(&et, CLOCK_SECOND * 2 + random_rand() % (CLOCK_SECOND * 2)); PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); leds_toggle(LEDS_RED); PROCESS_WAIT_EVENT_UNTIL(ev == sensors_event && data == &button_sensor); while(1) { if (i % 20 == 19) { PROCESS_WAIT_EVENT_UNTIL(ev == sensors_event && data == &button_sensor); } else { printf("wait!"); etimer_set(&et, CLOCK_SECOND * 0.5 + random_rand() % (CLOCK_SECOND) * 0.25); PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); } sprintf(buffer, "ping %d\0",i); printf("Attempting to send %s\n", buffer); // send the message straight to the radio //cc2420_send ( buffer, (int)strlen(buffer) ); packetbuf_clear(); packetbuf_copyfrom(&buffer, (int)strlen(buffer)); //driver->on(); //cc2420_driver.send(&buffer, (int)strlen(buffer)); //cc2420_send ( &buffer, (int)strlen(buffer) ); driver->send(); //rime_output(); //abc_send(&abc); //chameleon_output(c); //driver->off(1); printf("Message sent\n"); leds_toggle(LEDS_YELLOW); i = i + 1; } PROCESS_END(); }
/*---------------------------------------------------------------------------*/ PROCESS_THREAD(example_abc_process, ev, data) { static struct etimer et; static struct channel *c; PROCESS_BEGIN(); char buffer[32]; //button_sensor.activate(); SENSORS_ACTIVATE(button_sensor); printf("ready to rock\n"); static int i, j, k; //cc2420_init(); //cc2420_set_pan_addr(panId, 0 /*XXX*/, ds2411_id); //cc2420_set_channel(26); //cc2420_set_txpower(31); cc2420_on(); driver = nullmac_init(&cc2420_driver); driver->on(); channel_open(c, 128);channel_set_attributes(128, attributes); packetbuf_clear(); driver->set_receive_function(recv); packetbuf_clear(); //set_receive_function(driver); while(1) { //PROCESS_WAIT_EVENT_UNTIL(ev == sensors_event && data == &button_sensor); for (j = 0; j < 10000; j++) k = j/23; sprintf(buffer, "ping %d, %d\0",i, k); printf("Attempting to send %s\n", buffer); // send the message straight to the radio //cc2420_send ( buffer, (int)strlen(buffer) ); packetbuf_clear(); packetbuf_copyfrom(&buffer, (int)strlen(buffer)); driver->send(); printf("Message sent\n"); leds_toggle(LEDS_RED); i = i + 1; } PROCESS_END(); }
/*---------------------------------------------------------------------------*/ int main(int argc, char **argv) { /* * Initalize hardware. */ msp430_cpu_init(); clock_init(); leds_init(); leds_toggle(LEDS_RED | LEDS_GREEN | LEDS_BLUE); #if WITH_UIP slip_arch_init(BAUD2UBR(115200)); /* Must come before first printf */ #else /* WITH_UIP */ uart1_init(BAUD2UBR(115200)); /* Must come before first printf */ #endif /* WITH_UIP */ printf("Starting %s " "($Id: contiki-sky-main.c,v 1.9 2009/11/20 10:45:07 nifi Exp $)\n", __FILE__); ds2411_init(); xmem_init(); leds_toggle(LEDS_RED | LEDS_GREEN | LEDS_BLUE); rtimer_init(); /* * Hardware initialization done! */ /* Restore node id if such has been stored in external mem */ // node_id_burn(3); node_id_restore(); printf("node_id : %hu\n", node_id); printf("MAC %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", ds2411_id[0], ds2411_id[1], ds2411_id[2], ds2411_id[3], ds2411_id[4], ds2411_id[5], ds2411_id[6], ds2411_id[7]); #if WITH_UIP uip_init(); uip_sethostaddr(&slipif.ipaddr); uip_setnetmask(&slipif.netmask); uip_fw_default(&slipif); /* Point2point, no default router. */ #endif /* WITH_UIP */ /* * Initialize Contiki and our processes. */ process_init(); process_start(&etimer_process, NULL); process_start(&sensors_process, NULL); /* * Initialize light and humidity/temp sensors. */ SENSORS_ACTIVATE(light_sensor); SENSORS_ACTIVATE(sht11_sensor); ctimer_init(); set_rime_addr(); cc2420_init(); cc2420_set_pan_addr(panId, 0 /*XXX*/, ds2411_id); cc2420_set_channel(RF_CHANNEL); cc2420_set_txpower(31); nullmac_init(&cc2420_driver); rime_init(&nullmac_driver); // xmac_init(&cc2420_driver); // rime_init(&xmac_driver); /* rimeaddr_set_node_addr*/ #if WITH_UIP process_start(&tcpip_process, NULL); process_start(&uip_fw_process, NULL); /* Start IP output */ process_start(&slip_process, NULL); #endif /* WITH_UIP */ SENSORS_ACTIVATE(button_sensor); print_processes(autostart_processes); autostart_start(autostart_processes); energest_init(); /* * This is the scheduler loop. */ printf("process_run()...\n"); ENERGEST_ON(ENERGEST_TYPE_CPU); while (1) { do { /* Reset watchdog. */ } while(process_run() > 0); /* * Idle processing. */ if(lpm_en) { int s = splhigh(); /* Disable interrupts. */ if(process_nevents() != 0) { splx(s); /* Re-enable interrupts. */ } else { static unsigned long irq_energest = 0; /* Re-enable interrupts and go to sleep atomically. */ ENERGEST_OFF(ENERGEST_TYPE_CPU); ENERGEST_ON(ENERGEST_TYPE_LPM); /* We only want to measure the processing done in IRQs when we are asleep, so we discard the processing time done when we were awake. */ energest_type_set(ENERGEST_TYPE_IRQ, irq_energest); _BIS_SR(GIE | SCG0 | /*SCG1 |*/ CPUOFF); /* LPM3 sleep. */ /* We get the current processing time for interrupts that was done during the LPM and store it for next time around. */ dint(); irq_energest = energest_type_time(ENERGEST_TYPE_IRQ); eint(); ENERGEST_OFF(ENERGEST_TYPE_LPM); ENERGEST_ON(ENERGEST_TYPE_CPU); } } } return 0; }