Ejemplo n.º 1
0
/**
 * @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;
}
Ejemplo n.º 2
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;
}