示例#1
0
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);
}
示例#3
0
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);
}
示例#4
0
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);
  }
}
示例#5
0
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;
}
示例#6
0
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");
}
示例#7
0
// 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);
  }
}
示例#8
0
文件: cli.c 项目: godzivan/arcadehid
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);
    }
  }
}
示例#9
0
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);
}
示例#10
0
文件: cli.c 项目: godzivan/arcadehid
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);
  }
}