#ifndef _RAMPABUS_HAL_H_

	#define _RAMPABUS_HAL_H_
	
	#include "stm32f1xx_hal.h"
	#include "led_pwm_hal.h"
	#include "herramienta_hal.h"
	#include "com_usart_hal.h"
	#include "lectura_adc1_hal.h"
	
	
	#define PINGDAT 0xfafb
	#define DIR 110
	#define GRU 19  //ojo GRU de 2 adelante el gru 0 es todo y el  gru 1 es esclavo
	//#define MAX_FUNCION 20
	#define MaxFuncion 20
	
	//#define MMIO16(addr) ((addr)+2);
	//#define MMIO32(addr) ((addr)+2);
	#define U_ID 0x1FFFF7E8
	#define U_KB 0x1FFFF7E0
	
	typedef enum {inicio=0,final,pendiente,repuesta,asistencias}Normas;
	typedef enum {todos,esclavo,grupo} Grupos; 
	typedef enum {fun_ok=0,fun_error,fun_ocupado} EstadoFun;
	
	typedef struct{
		uint8_t Normas;
		uint8_t Grupos;
		uint8_t Direccion;
		uint8_t Funcion;
		uint8_t Tamdatas;
		
		
	}Capsula;
	
	typedef union{
		uint8_t Data[5];
		Capsula cap;
	}Cap_Data;
	
	extern Cap_Data cap_data;
	
	
	uint8_t Capsula_Igual(Capsula A,Capsula B);
	void LimpiarCapsula(void);
	
	void RampaBUS_Funcion(uint8_t fun);
	void Proceder_Funcion(void);
	
	extern void (*Funcs[])(EstadoFun *edo);
	
	
	extern uint8_t INFUC;
	
	//------------------------------------funciones---------------------
	
	void Proceder_RBUS_Funcs(void);


	//void RBUS_vacio(EstadoFun *edo);
	void RBUS_IN_Comm_LedRGB(EstadoFun *edo);
	void RBUS_IN_Comm_LedRGB_Porcent(EstadoFun *edo);
	void RBUS_OUT_Env_ADC(EstadoFun *edo);
	
	void RBUS_Prueba(EstadoFun *edo);
	void RBUS_Prueba2(EstadoFun *edo);
	
	/*
	void RBUS_derecha(void);
	void RBUS_izquierda(void);
	void RBUS_cambio_periodo(void);
	void RBUS_cambio_senopwm(void);
	void RBUS_cambio_preescalar(void);
	void RBUS_prueba1(void);
	void RBUS_prueba2(void);
	void RBUS_status(void);
	void RBUS_prueba3(void);
	*/
	
	
	void RBUS_Vacio(EstadoFun *edo);
	void RBUS_ResPing(void);
	//uint8_t RBUS_ObtenerDatos(void);
	//uint8_t RBUS_Prueba(void);
	
#endif



