/** * @brief Initialize the HMC5883 magnetometer sensor. * @return 0 on success */ int32_t PIOS_HMC5883_Init(uint32_t i2c_id, const struct pios_hmc5883_cfg *cfg) { dev = (struct hmc5883_dev *) PIOS_HMC5883_alloc(); if (dev == NULL) return -1; dev->cfg = cfg; dev->i2c_id = i2c_id; dev->orientation = cfg->Default_Orientation; /* check if we are using an irq line */ if (cfg->exti_cfg != NULL) { PIOS_EXTI_Init(cfg->exti_cfg); dev->data_ready_sema = PIOS_Semaphore_Create(); PIOS_Assert(dev->data_ready_sema != NULL); } else { dev->data_ready_sema = NULL; } if (PIOS_HMC5883_Config(cfg) != 0) return -2; PIOS_SENSORS_Register(PIOS_SENSOR_MAG, dev->queue); dev->task = PIOS_Thread_Create(PIOS_HMC5883_Task, "pios_hmc5883", HMC5883_TASK_STACK_BYTES, NULL, HMC5883_TASK_PRIORITY); PIOS_Assert(dev->task != NULL); return 0; }
/** * @brief Initialize the HMC5883 magnetometer sensor. * @return none */ int32_t PIOS_HMC5883_Init(uint32_t i2c_id, const struct pios_hmc5883_cfg *cfg) { dev = (struct hmc5883_dev *) PIOS_HMC5883_alloc(); if (dev == NULL) return -1; dev->cfg = cfg; dev->i2c_id = i2c_id; #ifdef PIOS_HMC5883_HAS_GPIOS PIOS_EXTI_Init(cfg->exti_cfg); #endif if (PIOS_HMC5883_Config(cfg) != 0) return -2; PIOS_SENSORS_Register(PIOS_SENSOR_MAG, dev->queue); int result = xTaskCreate(PIOS_HMC5883_Task, (const signed char *)"pios_hmc5883", HMC5883_TASK_STACK, NULL, HMC5883_TASK_PRIORITY, &dev->task); PIOS_Assert(result == pdPASS); dev->data_ready_sema = xSemaphoreCreateMutex(); return 0; }