void clock_test(void) { int error; int border_timeout; error = okn_syscall_interrupt_register(CLOCK_IRQ); assert(!error); /* Find the border value that is the first value of timeout that will * actually generate an interrupt. */ for (border_timeout = 1;; border_timeout++) { int interrupt_received; clock_pause(border_timeout, &interrupt_received); if (interrupt_received) { break; } } /* Test the range just above the border which is where most timeout * problems are. */ for (int k = 0; k < 10; k++) { for (int timeout = max(1, border_timeout - 10); timeout < 3 * border_timeout + 10; timeout++) { for (int j = 0; j < 10; j++) { int interrupt_received; clock_pause(timeout, &interrupt_received); } } } error = okn_syscall_interrupt_deregister(CLOCK_IRQ); assert(!error); }
void blinking_leds(enabled_led_modes_t mode) { switching_led_check_mode(mode); clock_pause(100); switching_led_check_mode(mode); clock_pause(100); switching_led_check_mode(mode); clock_pause(100); switching_led_check_mode(mode); clock_pause(100); LEDS_OFF_CHECK_MODE(mode); }
/* Main task, initialize hardware and start the FreeRTOS scheduler */ int main(void) { // stop the watchdog timer WDTCTL = WDTPW | WDTHOLD | WDTCNTCL | WDTSSEL; immediate_debug(pdFALSE); /******************************************************/ /* Initialize the SmartGrains hardware */ /******************************************************/ hardware_setup(); debug_init(0); queue_app = xQueueCreate( 4, sizeof( main_event_t ) ); // buffers initialization if (buffers_init()!=START_SUCCESS) { debug("Buffer init failed!!\r\n"); } /********************************************************/ /* Initialize the STACK including smart_mac & smart_nwk */ /********************************************************/ if (stack_init()==START_SUCCESS) { debug("OK\r\n");} else { debug("failed!!\r\n"); } address_utils_debug_address(&lgaddr_mac, ADDR_FULL); // blinking LEDs // Code is Green-Red-Green LEDS_OFF_CHECK_MODE(led_mode); LED0_ON_CHECK_MODE(led_mode); // G clock_pause(200); LED0_OFF_CHECK_MODE(led_mode); clock_pause(200); LED1_ON_CHECK_MODE(led_mode); // R clock_pause(200); LED1_OFF_CHECK_MODE(led_mode); clock_pause(200); LED0_ON_CHECK_MODE(led_mode); // G clock_pause(200); LED0_OFF_CHECK_MODE(led_mode); // Demo App xTaskCreate( vDemo, "AppDemo", configMINIMAL_STACK_SIZE+200, NULL, (tskIDLE_PRIORITY + 1 ), NULL ); vTaskStartScheduler(); return 0; }
/** * \Function cDemo * \Brief Some Demo */ static void vDemo( void *pvParameters ) { // I am Node 1 uint8_t trial = 0; uint8_t main_frame_type; uint8_t src_detection_state; main_event_t curr_event; long_addr_t dst_addr= {{{0xff, 0, 0, 0}}, {0, 0xff}, {2, 2},{PAN_ID_LOW, PAN_ID_HIGH}, ADDR_SMG} ; uint8_t msg[8]; uint8_t msg_length = 8; msg[0] = MURPHY_MSG_TYPE; msg[1] = msg_length; msg[2] = 0x0a; msg[3] = 0x0b; clock_pause(1500); // fill the msg as you wish ! while(1) { if(xQueueReceive(queue_app, &(curr_event), 3000 / portTICK_RATE_MS) == pdTRUE) { debug("rcv\r\n"); switch (curr_event.main_event_type) { case MAIN_BUFFER_UP: main_frame_type = curr_event.pbuf->buf[curr_event.pbuf->buf_ptr++]; switch(main_frame_type) { case MURPHY_MSG_TYPE: src_detection_state = curr_event.pbuf->buf[curr_event.pbuf->buf_ptr++]; if(src_detection_state == 0) { debug_printf("I have received an Empty MSG from :\r\n"); LED1_ON_CHECK_MODE(led_mode); LED0_OFF_CHECK_MODE(led_mode); } else { debug_printf("I have received a Full MSG from :\r\n"); LED0_ON_CHECK_MODE(led_mode); LED1_OFF_CHECK_MODE(led_mode); } address_utils_debug_address(&curr_event.pbuf->src_addr, ADDR_FULL); break; default: break; } stack_buffer_free(curr_event.pbuf); curr_event.pbuf = 0; break; case MAIN_BUFFER_DOWN: /* ********************************************** */ /* send message to nwk, if main_running is pdTRUE */ /* ********************************************** */ smart_nwk_handle(curr_event.pbuf); break; default: stack_buffer_free(curr_event.pbuf); curr_event.pbuf = 0; break; clock_pause(500); LEDS_OFF_CHECK_MODE(led_mode); } } } }