int main(int argc, char **argv) { // Not useful (void) argc; (void) argv; init_malloc_lock(); led_driver_init(); button_driver_init(); // Setup I2C i2c1_init(); // Setup SmartSensors smartsensor_init(); // Setup radio radio_driver_init(); #ifdef TEST_STATIC_LUA xTaskCreate(angelicTask, "Angelic", 2048, NULL, tskIDLE_PRIORITY, NULL); #endif xTaskCreate(radioTask, "Radio", 2048, NULL, tskIDLE_PRIORITY, NULL); vTaskStartScheduler(); }
/** * drivers_init: * @flags : Bitmask of drivers to initialize. * * Initializes drivers. * @flags determines which drivers get initialized. **/ void drivers_init(int flags) { bool video_is_threaded = false; if (flags & DRIVER_VIDEO_MASK) video_driver_unset_own_driver(); if (flags & DRIVER_AUDIO_MASK) audio_driver_unset_own_driver(); if (flags & DRIVER_INPUT_MASK) input_driver_unset_own_driver(); if (flags & DRIVER_CAMERA_MASK) camera_driver_ctl(RARCH_CAMERA_CTL_UNSET_OWN_DRIVER, NULL); if (flags & DRIVER_LOCATION_MASK) location_driver_ctl(RARCH_LOCATION_CTL_UNSET_OWN_DRIVER, NULL); if (flags & DRIVER_WIFI_MASK) wifi_driver_ctl(RARCH_WIFI_CTL_UNSET_OWN_DRIVER, NULL); #ifdef HAVE_MENU /* By default, we want the menu to persist through driver reinits. */ menu_driver_ctl(RARCH_MENU_CTL_SET_OWN_DRIVER, NULL); #endif if (flags & (DRIVER_VIDEO_MASK | DRIVER_AUDIO_MASK)) driver_adjust_system_rates(); if (flags & DRIVER_VIDEO_MASK) { struct retro_hw_render_callback *hwr = video_driver_get_hw_context(); video_driver_monitor_reset(); video_driver_init(&video_is_threaded); if (!video_driver_is_video_cache_context_ack() && hwr->context_reset) hwr->context_reset(); video_driver_unset_video_cache_context_ack(); rarch_ctl(RARCH_CTL_SET_FRAME_TIME_LAST, NULL); } if (flags & DRIVER_AUDIO_MASK) { audio_driver_init(); audio_driver_new_devices_list(); } /* Only initialize camera driver if we're ever going to use it. */ if ((flags & DRIVER_CAMERA_MASK) && camera_driver_ctl(RARCH_CAMERA_CTL_IS_ACTIVE, NULL)) camera_driver_ctl(RARCH_CAMERA_CTL_INIT, NULL); /* Only initialize location driver if we're ever going to use it. */ if ((flags & DRIVER_LOCATION_MASK) && location_driver_ctl(RARCH_LOCATION_CTL_IS_ACTIVE, NULL)) init_location(); core_info_init_current_core(); #ifdef HAVE_MENU if (flags & DRIVER_VIDEO_MASK) { if (flags & DRIVER_MENU_MASK) menu_driver_init(video_is_threaded); } #endif if (flags & (DRIVER_VIDEO_MASK | DRIVER_AUDIO_MASK)) { /* Keep non-throttled state as good as possible. */ if (input_driver_is_nonblock_state()) driver_set_nonblock_state(); } if (flags & DRIVER_LED_MASK) { led_driver_init(); } if (flags & DRIVER_MIDI_MASK) midi_driver_init(); }
int main() { seed_rand(); setup_mcu(); led_driver_init(); pwm_timer_init(); pir_init(); // the PIR sensor takes a few seconds _delay_ms(5000); sei(); uint8_t lower_pwm= 1; uint8_t upper_pwm= 70; uint8_t base_delay_interval= 10; while(1) { while( !(PIND && PD2) ); uint8_t pins[4]= { PB1, PB2, PB3, PB4 }; uint8_t pin_starts[4]; uint8_t pin_pwm[4]; uint16_t delay_count= 0; uint8_t still_fading= 1; for( uint8_t i= 0; i < 4; ++i ) { // number of base_delay_interval intervals to wait before lighting them up pin_starts[i]= range_rand(50); pin_pwm[i]= lower_pwm; } // fade them up delay_count= 0; still_fading= 1; while( still_fading ) { still_fading= 0; for( uint8_t i= 0; i < 4; ++i ) { if( delay_count >= pin_starts[i] && pin_pwm[i] < upper_pwm ) { pin_pwm[i]++; start_pwm( pins[i], pin_pwm[i] ); } if( pin_pwm[i] < upper_pwm ) still_fading= 1; } _delay_ms( base_delay_interval ); delay_count++; } // wait for no more motion for 5 seconds delay_count= 0; while( delay_count < (5000/base_delay_interval) ) { if( PIND && PD2 ) { delay_count= 0; continue; } _delay_ms( base_delay_interval ); delay_count++; } // fade them off for( uint8_t i= 0; i < 4; ++i ) { // number of base_delay_interval intervals to wait before shutting them down pin_starts[i]= range_rand(60); pin_pwm[i]= upper_pwm; } delay_count= 0; still_fading= 1; while( still_fading ) { still_fading= 0; for( uint8_t i= 0; i < 4; ++i ) { if( delay_count >= pin_starts[i] ) { if( pin_pwm[i] > lower_pwm ) { pin_pwm[i]--; start_pwm( pins[i], pin_pwm[i] ); } if( pin_pwm[i] <= lower_pwm ) stop_pwm( pins[i] ); } if( pin_pwm[i] > lower_pwm ) still_fading= 1; } _delay_ms( base_delay_interval ); delay_count++; } _delay_ms(2000); } return 0; }
int main(void) { SystemInit(); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); // STM32F4_Discovery_LEDInit(LED3); //Orange STM32F4_Discovery_LEDInit(LED4); //Green STM32F4_Discovery_LEDInit(LED5); //Red STM32F4_Discovery_LEDInit(LED6); //Blue STM32F4_Discovery_PBInit(BUTTON_USER, BUTTON_MODE_GPIO); USBD_Init(&USB_OTG_dev,USB_OTG_FS_CORE_ID,&USR_desc,&USBD_CDC_cb,&USR_cb); led_driver_init(); motor_driver_init(); SysTick_Config(2100000); //10 times a second: 168 MHz / 8 = 21 MHz SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //while(1) //{ //led_driver_write_data(50, 10); //} while (1) { if( usb_cdc_kbhit() ) { character = usb_cdc_getc(); usb_rx_buffer[usb_rx_ptr] = character; usb_rx_ptr++; if( usb_rx_ptr == 10 ) //upon receiving 10 bytes { if( ( usb_rx_buffer[0] == 0xAA ) && ( usb_rx_buffer[9] == 0xCC ) ) //check head and tail for correctness { usb_rx_ptr = 0; //reset data pointer if correct flag_new_command_received = 1; //set the flag if packet correct } else { usb_rx_ptr = 0; // if packet incorrect, reset data pointer } } } if(flag_new_command_received) { flag_new_command_received = 0; } if(flag_send_sensor_data) { motor_set_speed(0x55, 0x55); flag_send_sensor_data = 0; } // here's how to send data through USB VCP /* sprintf(buffer_out,"LED%c = %u\r\n",c,GPIO_ReadInputDataBit(GPIOD,LED6_PIN)); usb_cdc_printf(buffer_out); */ } }