static void app_rover_setup(app_common *com, app_remote *rem, configuration_t *cnf) { common = com; remote = rem; app_cfg = cnf; #ifdef CONFIG_SPYBOT_HCSR RANGE_SENS_init(app_rover_radar_cb); #endif #ifdef CONFIG_I2C I2C_config(_I2C_BUS(0), 100000); STMPE_init(); #ifdef CONFIG_SPYBOT_LSM task *config_lsm_t = TASK_create(app_rover_setup_lsm, 0); ASSERT(config_lsm_t); TASK_run(config_lsm_t, 0, NULL); #endif CFG_EE_init(&eeprom_dev, app_rover_cfg_cb); CFG_EE_load_config(); #endif // CONFIG_I2C #ifdef CONFIG_SPYBOT_MOTOR MOTOR_init(); #endif #ifdef CONFIG_SPYBOT_SERVO SERVO_init(); #endif mech_task = TASK_create(app_rover_mech_task, TASK_STATIC); TASK_start_timer(mech_task, &mech_timer, 0, 0, 0, 20, "mech"); #ifdef CONFIG_SPYBOT_HCSR radar_task = TASK_create(app_rover_radar_task, TASK_STATIC); TASK_start_timer(radar_task, &radar_timer, 0, 0, 100, 65, "radar"); #endif // CONFIG_SPYBOT_HCSR #ifdef CONFIG_SPYBOT_LSM int i; for (i = 0; i < 3; i++) { acc_extremes[i][0] = S16_MAX; acc_extremes[i][1] = S16_MIN; mag_extremes[i][0] = S16_MAX; mag_extremes[i][1] = S16_MIN; } #endif COMRAD_init(); }
void SFOS_init() { memset(&sfos, 0, sizeof(sfos)); OS_mutex_init(&sfos.lock, 0); OS_mutex_init(&sfos.sig_mutex, 0); OS_cond_init(&sfos.cond); sfos.kernel_task = TASK_create(sfos_task_f, TASK_STATIC); }
void STMPE_init(void) { memset(&stmpe, 0x00, sizeof(stmpe)); stmpe811_handler_open(&stmpe.handler, _I2C_BUS(0), stmpe_gpio_irq, stmpe_adc_irq, stmpe_temp_irq, stmpe_err_cb); gpio_config(PORTC, PIN13, CLK_50MHZ, IN, AF0, OPENDRAIN, NOPULL); // cannot do this, will interfere with high prio hsync signal on controller //gpio_interrupt_config(PORTC, PIN13, stmpe_irq, FLANK_DOWN); //gpio_interrupt_mask_enable(PORTC, PIN13, TRUE); // instead, poll in timer irq_pin_pre_state = gpio_get(PORTC, PIN13) != 0; stmpe.task_irq = TASK_create(stmpe_task_irq, TASK_STATIC); ASSERT(stmpe.task_irq); init = TRUE; task *t = TASK_create(stmpe_task_config, 0); ASSERT(t); TASK_run(t, 0, NULL); }
static void stmpe_adc_irq(u8_t adc, u16_t val) { STMPE_DBG("stmpe_impl adc irq adc:%08b val:%04x\n", adc, val); stmpe.val_adc = val; if (stmpe.adc_cb) { task *t = TASK_create(stmpe_adc_cb, 0); ASSERT(t); TASK_run(t, val, NULL); } }
int SPI_FLASH_init(spi_flash_dev *sfd, spi_flash_dev_conf *flash_conf, u16_t spi_conf, spi_bus *bus, hw_io_port cs_port, hw_io_pin cs_pin) { memset(sfd, 0, sizeof(spi_flash_dev)); memcpy(&sfd->flash_conf, flash_conf, sizeof(spi_flash_dev_conf)); //SPI_DEV_init(&sfd->dev, spi_conf, bus, cs_port, cs_pin, 0); SPI_DEV_init(&sfd->dev, spi_conf, bus, cs_port, cs_pin, SPI_CONF_IRQ_DRIVEN); SPI_DEV_set_callback(&sfd->dev, spi_flash_callback_spi_result); sfd->task = TASK_create(spi_flash_task_f, TASK_STATIC); sfd->state = SPI_FLASH_STATE_CLOSED; sfd->open = FALSE; return SPI_OK; }
static void app_rover_setup_lsm(u32_t a, void *b) { lsm_open(&lsm_dev, _I2C_BUS(0), FALSE, app_rover_lsm_cb_irq); // lock mutex for lsm config if (!TASK_mutex_lock(&i2c_mutex)) { return; } int res = lsm_config_default(&lsm_dev); ASSERT(res == I2C_OK); lsm_set_lowpass(&lsm_dev, 50, 50); lsm_task = TASK_create(app_rover_lsm_task, TASK_STATIC); TASK_start_timer(lsm_task, &lsm_timer, 0, 0, 500, 100, "lsm_read"); }
// execute request depending on bit mask static void stmpe_exe_req(void) { u32_t req_mask = stmpe.req_mask; if (req_mask) { task *t = NULL; if (req_mask & STMPE_REQ_GPIO) { STMPE_DBG("stmpe_impl req EXE gpio\n"); t = TASK_create(stmpe_task_gpio, 0); } else if (req_mask & STMPE_REQ_ADC) { STMPE_DBG("stmpe_impl req EXE adc\n"); t = TASK_create(stmpe_task_adc, 0); } else if (req_mask & STMPE_REQ_TEMP) { STMPE_DBG("stmpe_impl req EXE temp\n"); t = TASK_create(stmpe_task_temp, 0); } else if (req_mask & STMPE_REQ_INT_STA) { STMPE_DBG("stmpe_impl req EXE int sta\n"); t = TASK_create(stmpe_task_int_sta, 0); } ASSERT(t); TASK_run(t, 0, NULL); } }
static void usb_rx_cb(u16_t avail, void *arg) { int in_ix = 0; while ((avail = IO_rx_available(IOUSB)) > 0) { int len = MIN(avail, sizeof(in) - in_ix); IO_get_buf(IOUSB, &in[in_ix], len); in_ix += len; if (in_ix >= sizeof(in)) break; } int i; for (i = 0; i < in_ix; i++) { if (in[i] == '\r' || in[i] == '\n') { task *t = TASK_create(CLI_TASK_on_usb_input, 0); TASK_run(t, i, NULL); } } }
static void app_rover_lsm_cb_irq(lsm303_dev *dev, int res) { TRACE_USR_MSG(0x20); task *t = TASK_create(app_rover_lsm_cb_task, 0); ASSERT(t); TASK_run(t, res, dev); }
void CLI_uart_check_char(void *a, u8_t c) { if (c == '\n' || c == '\r') { task *t = TASK_create(CLI_TASK_on_uart_input, 0); TASK_run(t, IO_rx_available(IOSTD), NULL); } }