

#include "stm32f2xx_hal.h"
#include "analog.h"

void mux( int ic, int position)
{
	switch(ic)
	{
		case IC_RECTIFIER :
		{
			switch(position)
			{
				case POSITION_RECTIFIER_S1:
				{
					HAL_GPIO_WritePin(R_A0_GPIO_Port,R_A0_Pin, 0);
					HAL_GPIO_WritePin(R_A1_GPIO_Port,R_A1_Pin, 0);
					HAL_GPIO_WritePin(R_A2_GPIO_Port,R_A2_Pin, 0);
					HAL_GPIO_WritePin(R_nEN_GPIO_Port,R_nEN_Pin, 0);
					break;
				}
				case POSITION_RECTIFIER_S2:
				{
					HAL_GPIO_WritePin(R_A0_GPIO_Port,R_A0_Pin, 1);
					HAL_GPIO_WritePin(R_A1_GPIO_Port,R_A1_Pin, 0);
					HAL_GPIO_WritePin(R_A2_GPIO_Port,R_A2_Pin, 0);
					HAL_GPIO_WritePin(R_nEN_GPIO_Port,R_nEN_Pin, 0);
					break;
				}
				case POSITION_RECTIFIER_S3:
				{
					HAL_GPIO_WritePin(R_A0_GPIO_Port,R_A0_Pin, 0);
					HAL_GPIO_WritePin(R_A1_GPIO_Port,R_A1_Pin, 1);
					HAL_GPIO_WritePin(R_A2_GPIO_Port,R_A2_Pin, 0);
					HAL_GPIO_WritePin(R_nEN_GPIO_Port,R_nEN_Pin, 0);
					break;
				}
				case POSITION_RECTIFIER_S4:
				{
					HAL_GPIO_WritePin(R_A0_GPIO_Port,R_A0_Pin, 1);
					HAL_GPIO_WritePin(R_A1_GPIO_Port,R_A1_Pin, 1);
					HAL_GPIO_WritePin(R_A2_GPIO_Port,R_A2_Pin, 0);
					HAL_GPIO_WritePin(R_nEN_GPIO_Port,R_nEN_Pin, 0);
					break;
				}
				case POSITION_RECTIFIER_S5:
				{
					HAL_GPIO_WritePin(R_A0_GPIO_Port,R_A0_Pin, 0);
					HAL_GPIO_WritePin(R_A1_GPIO_Port,R_A1_Pin, 0);
					HAL_GPIO_WritePin(R_A2_GPIO_Port,R_A2_Pin, 1);
					HAL_GPIO_WritePin(R_nEN_GPIO_Port,R_nEN_Pin, 0);
					break;
				}
				case POSITION_RECTIFIER_S6:
				{
					HAL_GPIO_WritePin(R_A0_GPIO_Port,R_A0_Pin, 1);
					HAL_GPIO_WritePin(R_A1_GPIO_Port,R_A1_Pin, 0);
					HAL_GPIO_WritePin(R_A2_GPIO_Port,R_A2_Pin, 1);
					HAL_GPIO_WritePin(R_nEN_GPIO_Port,R_nEN_Pin, 0);
					break;
				}
				case POSITION_RECTIFIER_S7:
				{
					HAL_GPIO_WritePin(R_A0_GPIO_Port,R_A0_Pin, 0);
					HAL_GPIO_WritePin(R_A1_GPIO_Port,R_A1_Pin, 1);
					HAL_GPIO_WritePin(R_A2_GPIO_Port,R_A2_Pin, 1);
					HAL_GPIO_WritePin(R_nEN_GPIO_Port,R_nEN_Pin, 0);
					break;
				}
				case POSITION_RECTIFIER_S8:
				{
					HAL_GPIO_WritePin(R_A0_GPIO_Port,R_A0_Pin, 1);
					HAL_GPIO_WritePin(R_A1_GPIO_Port,R_A1_Pin, 1);
					HAL_GPIO_WritePin(R_A2_GPIO_Port,R_A2_Pin, 1);
					HAL_GPIO_WritePin(R_nEN_GPIO_Port,R_nEN_Pin, 0);
					break;
				}
				default:
				{
					HAL_GPIO_WritePin(R_nEN_GPIO_Port,R_nEN_Pin, 1);
					break;
				}					
			}
		break;
		}
		case IC_LOAD :
		{
			switch(position)
			{
				case POSITION_LOAD_S1:
				{
					HAL_GPIO_WritePin(L_A0_GPIO_Port,L_A0_Pin, 0);
					HAL_GPIO_WritePin(L_A1_GPIO_Port,L_A1_Pin, 0);
					HAL_GPIO_WritePin(L_A2_GPIO_Port,L_A2_Pin, 0);
					HAL_GPIO_WritePin(L_nEN_GPIO_Port,L_nEN_Pin, 0);
					break;
				}
				case POSITION_LOAD_S2:
				{
					HAL_GPIO_WritePin(L_A0_GPIO_Port,L_A0_Pin, 1);
					HAL_GPIO_WritePin(L_A1_GPIO_Port,L_A1_Pin, 0);
					HAL_GPIO_WritePin(L_A2_GPIO_Port,L_A2_Pin, 0);
					HAL_GPIO_WritePin(L_nEN_GPIO_Port,L_nEN_Pin, 0);
					break;
				}
				case POSITION_LOAD_S3:
				{
					HAL_GPIO_WritePin(L_A0_GPIO_Port,L_A0_Pin, 0);
					HAL_GPIO_WritePin(L_A1_GPIO_Port,L_A1_Pin, 1);
					HAL_GPIO_WritePin(L_A2_GPIO_Port,L_A2_Pin, 0);
					HAL_GPIO_WritePin(L_nEN_GPIO_Port,L_nEN_Pin, 0);
					break;
				}
				case POSITION_LOAD_S4:
				{
					HAL_GPIO_WritePin(L_A0_GPIO_Port,L_A0_Pin, 1);
					HAL_GPIO_WritePin(L_A1_GPIO_Port,L_A1_Pin, 1);
					HAL_GPIO_WritePin(L_A2_GPIO_Port,L_A2_Pin, 0);
					HAL_GPIO_WritePin(L_nEN_GPIO_Port,L_nEN_Pin, 0);
					break;
				}
				case POSITION_LOAD_S5:
				{
					HAL_GPIO_WritePin(L_A0_GPIO_Port,L_A0_Pin, 0);
					HAL_GPIO_WritePin(L_A1_GPIO_Port,L_A1_Pin, 0);
					HAL_GPIO_WritePin(L_A2_GPIO_Port,L_A2_Pin, 1);
					HAL_GPIO_WritePin(L_nEN_GPIO_Port,L_nEN_Pin, 0);
					break;
				}
				case POSITION_LOAD_S6:
				{
					HAL_GPIO_WritePin(L_A0_GPIO_Port,L_A0_Pin, 1);
					HAL_GPIO_WritePin(L_A1_GPIO_Port,L_A1_Pin, 0);
					HAL_GPIO_WritePin(L_A2_GPIO_Port,L_A2_Pin, 1);
					HAL_GPIO_WritePin(L_nEN_GPIO_Port,L_nEN_Pin, 0);
					break;
				}
				case POSITION_LOAD_S7:
				{
					HAL_GPIO_WritePin(L_A0_GPIO_Port,L_A0_Pin, 0);
					HAL_GPIO_WritePin(L_A1_GPIO_Port,L_A1_Pin, 1);
					HAL_GPIO_WritePin(L_A2_GPIO_Port,L_A2_Pin, 1);
					HAL_GPIO_WritePin(L_nEN_GPIO_Port,L_nEN_Pin, 0);
					break;
				}
				case POSITION_LOAD_S8:
				{
					HAL_GPIO_WritePin(L_A0_GPIO_Port,L_A0_Pin, 1);
					HAL_GPIO_WritePin(L_A1_GPIO_Port,L_A1_Pin, 1);
					HAL_GPIO_WritePin(L_A2_GPIO_Port,L_A2_Pin, 1);
					HAL_GPIO_WritePin(L_nEN_GPIO_Port,L_nEN_Pin, 0);
					break;
				}
				default:
				{
					HAL_GPIO_WritePin(L_nEN_GPIO_Port,L_nEN_Pin, 1);
					break;
				}					
			}
		break;
		}
		
		case IC_GAIN :
		{
			switch(position)
			{
				case POSITION_GAIN_S1:
				{
					HAL_GPIO_WritePin(G_A0_GPIO_Port,G_A0_Pin, 0);
					HAL_GPIO_WritePin(G_A1_GPIO_Port,G_A1_Pin, 0);
					HAL_GPIO_WritePin(G_A2_GPIO_Port,G_A2_Pin, 0);
					HAL_GPIO_WritePin(G_nEN_GPIO_Port,G_nEN_Pin, 0);
					break;
				}
				case POSITION_GAIN_S2:
				{
					HAL_GPIO_WritePin(G_A0_GPIO_Port,G_A0_Pin, 1);
					HAL_GPIO_WritePin(G_A1_GPIO_Port,G_A1_Pin, 0);
					HAL_GPIO_WritePin(G_A2_GPIO_Port,G_A2_Pin, 0);
					HAL_GPIO_WritePin(G_nEN_GPIO_Port,G_nEN_Pin, 0);
					break;
				}
				case POSITION_GAIN_S3:
				{
					HAL_GPIO_WritePin(G_A0_GPIO_Port,G_A0_Pin, 0);
					HAL_GPIO_WritePin(G_A1_GPIO_Port,G_A1_Pin, 1);
					HAL_GPIO_WritePin(G_A2_GPIO_Port,G_A2_Pin, 0);
					HAL_GPIO_WritePin(G_nEN_GPIO_Port,G_nEN_Pin, 0);
					break;
				}
				case POSITION_GAIN_S4:
				{
					HAL_GPIO_WritePin(G_A0_GPIO_Port,G_A0_Pin, 1);
					HAL_GPIO_WritePin(G_A1_GPIO_Port,G_A1_Pin, 1);
					HAL_GPIO_WritePin(G_A2_GPIO_Port,G_A2_Pin, 0);
					HAL_GPIO_WritePin(G_nEN_GPIO_Port,G_nEN_Pin, 0);
					break;
				}
				case POSITION_GAIN_S5:
				{
					HAL_GPIO_WritePin(G_A0_GPIO_Port,G_A0_Pin, 0);
					HAL_GPIO_WritePin(G_A1_GPIO_Port,G_A1_Pin, 0);
					HAL_GPIO_WritePin(G_A2_GPIO_Port,G_A2_Pin, 1);
					HAL_GPIO_WritePin(G_nEN_GPIO_Port,G_nEN_Pin, 0);
					break;
				}
				case POSITION_GAIN_S6:
				{
					HAL_GPIO_WritePin(G_A0_GPIO_Port,G_A0_Pin, 1);
					HAL_GPIO_WritePin(G_A1_GPIO_Port,G_A1_Pin, 0);
					HAL_GPIO_WritePin(G_A2_GPIO_Port,G_A2_Pin, 1);
					HAL_GPIO_WritePin(G_nEN_GPIO_Port,G_nEN_Pin, 0);
					break;
				}
				case POSITION_GAIN_S7:
				{
					HAL_GPIO_WritePin(G_A0_GPIO_Port,G_A0_Pin, 0);
					HAL_GPIO_WritePin(G_A1_GPIO_Port,G_A1_Pin, 1);
					HAL_GPIO_WritePin(G_A2_GPIO_Port,G_A2_Pin, 1);
					HAL_GPIO_WritePin(G_nEN_GPIO_Port,G_nEN_Pin, 0);
					break;
				}
				case POSITION_GAIN_S8:
				{
					HAL_GPIO_WritePin(G_A0_GPIO_Port,G_A0_Pin, 1);
					HAL_GPIO_WritePin(G_A1_GPIO_Port,G_A1_Pin, 1);
					HAL_GPIO_WritePin(G_A2_GPIO_Port,G_A2_Pin, 1);
					HAL_GPIO_WritePin(G_nEN_GPIO_Port,G_nEN_Pin, 0);
					break;
				}
				default:
				{
					HAL_GPIO_WritePin(G_nEN_GPIO_Port,G_nEN_Pin, 1);
					break;
				}					
			}
		break;
		}
	}
}