/*
 * meas_tasks.h
 *
 *  Created on: Sep 5, 2024
 *      Author: jakubski
 */

#ifndef INC_MEAS_TASKS_H_
#define INC_MEAS_TASKS_H_

#include "FreeRTOS.h"
#include "FreeRTOSConfig.h"
#include "cmsis_os.h"
#include "stm32h7xx_hal.h"
#include "task.h"

#define GAIN_AUTO_CORRECTION

struct _EncoderTaskArg
{
	uint16_t dbgLed;
	float* currentPosition;
	float* positionOffset;
	int32_t* pvEncoder;
	float impPerTurn;
	uint32_t initPinStates;
	osMessageQueueId_t dataQueue;
};

typedef struct _EncoderTaskArg EncoderTaskArg;

extern osMessageQueueId_t adc1MeasDataQueue;
extern osMessageQueueId_t adc2MeasDataQueue;
extern osMessageQueueId_t adc3MeasDataQueue;
extern osMessageQueueId_t limiterSwitchDataQueue;

extern osMutexId_t resMeasurementsMutex;
extern osMutexId_t sensorsInfoMutex;

extern osThreadId_t encoderXTaskHandle;
extern osThreadId_t encoderYTaskHandle;

extern EncoderTaskArg encoderXTaskArg;
extern EncoderTaskArg encoderYTaskArg;

void MeasTasksInit (void);
void ADC1MeasTask (void* arg);
void ADC3MeasTask (void* arg);
void LimiterSwitchTask (void* arg);
void EncoderTask (void* arg);

#endif /* INC_MEAS_TASKS_H_ */