/*
 * PWM.c
 *
 *  Created on: 14 janv. 2019
 *      Author: e_rcluze
 */

#include "PWM.h"
#include "tim.h"
#include "gpio.h"

void PWMSetDutyCycle(uint32_t sortie, uint16_t value) {
	TIM_OC_InitTypeDef sConfigOC;
	sConfigOC.Pulse = value;
	switch (sortie) {
	case S1:
		HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3);
		break;
	case S2:
		HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4);
		break;
	case S3:
		HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1);
		break;
	case S4:
		HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2);
		break;
	case S5:
		HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3);
		break;
	case S6:
		HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4);
		break;
	case S7:
		HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1);
		break;
	case S8:
		HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2);
		break;
	case S9:
		HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3);
		break;
	case S10:
		HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4);
		break;
	}
}

void PWMSetZero(uint32_t sortie) {
	switch (sortie) {
	case S1:
		HAL_GPIO_WritePin(S1_GPIO_Port, S1_Pin, 0);
		break;
	case S2:
		HAL_GPIO_WritePin(S2_GPIO_Port, S2_Pin, 0);
		break;
	case S3:
		HAL_GPIO_WritePin(S3_GPIO_Port, S3_Pin, 0);
		break;
	case S4:
		HAL_GPIO_WritePin(S4_GPIO_Port, S4_Pin, 0);
		break;
	case S5:
		HAL_GPIO_WritePin(S5_GPIO_Port, S5_Pin, 0);
		break;
	case S6:
		HAL_GPIO_WritePin(S6_GPIO_Port, S6_Pin, 0);
		break;
	case S7:
		HAL_GPIO_WritePin(S7_GPIO_Port, S7_Pin, 0);
		break;
	case S8:
		HAL_GPIO_WritePin(S8_GPIO_Port, S8_Pin, 0);
		break;
	case S9:
		HAL_GPIO_WritePin(S9_GPIO_Port, S9_Pin, 0);
		break;
	case S10:
		HAL_GPIO_WritePin(S10_GPIO_Port, S10_Pin, 0);
		break;
	}
}

void PWMSetMAX(uint32_t sortie) {
	switch (sortie) {
	case S1:
		HAL_GPIO_WritePin(S1_GPIO_Port, S1_Pin, 1);
		break;
	case S2:
		HAL_GPIO_WritePin(S2_GPIO_Port, S2_Pin, 1);
		break;
	case S3:
		HAL_GPIO_WritePin(S3_GPIO_Port, S3_Pin, 1);
		break;
	case S4:
		HAL_GPIO_WritePin(S4_GPIO_Port, S4_Pin, 1);
		break;
	case S5:
		HAL_GPIO_WritePin(S5_GPIO_Port, S5_Pin, 1);
		break;
	case S6:
		HAL_GPIO_WritePin(S6_GPIO_Port, S6_Pin, 1);
		break;
	case S7:
		HAL_GPIO_WritePin(S7_GPIO_Port, S7_Pin, 1);
		break;
	case S8:
		HAL_GPIO_WritePin(S8_GPIO_Port, S8_Pin, 1);
		break;
	case S9:
		HAL_GPIO_WritePin(S9_GPIO_Port, S9_Pin, 1);
		break;
	case S10:
		HAL_GPIO_WritePin(S10_GPIO_Port, S10_Pin, 1);
		break;
	}
}

void PWMStart(uint8_t sortie) {
	switch (sortie) {
	case S1:
		HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
		break;
	case S2:
		HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);
		break;
	case S3:
		HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
		break;
	case S4:
		HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
		break;
	case S5:
		HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
		break;
	case S6:
		HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
		break;
	case S7:
		HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);
		break;
	case S8:
		HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);
		break;
	case S9:
		HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);
		break;
	case S10:
		HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);
		break;
	}
}


uint16_t PWMvalue(uint8_t minute) {
	return ((minute*100)/60) * PWM_MAX;
}
