#include "stm32f1xx_hal.h"
#include "cmsis_os.h"

#include "herramienta_hal.h"

//----------------------------------------Converciones---------------------
float adc_por(float val,float a1,float a2){//resultado valor en porcentaje entre la distancias a2-a1
		float por=0.0;
	
    if(val<a1)val=a1;
		if(val>a2)val=a2;
		
    por=(val*100)/sqrt(pow((a2-a1),2));
    return por;
}

float por_adc(float por,float a1,float a2){//resultado en valor de adc cuando se le ingresa un por% de la distancias a2-a1
  
   float sal=(por/100)*sqrt(pow((a2-a1),2));
   return a1+sal;
}

float Cam_Pro(float por,float a1,float a2,float b1,float b2){//proporcional cambio (val) en por% de la distancias a2-a1 
   float pa1;																					//resultado cambio de b2-b1
   pa1=adc_por(por,a1,a2);  
   if(pa1<0)return -1;
   pa1=sqrt(pow((b2-b1),2))*(pa1/100);
   return b1+pa1;
    
}
 //---------------------------------------fin conversiones --------------------       

//-----------------------------------Manipulacion MEMORIA------------------------
void MemSecuencial(void *des,void *fue,uint16_t tam,uint16_t *cur){
	uint16_t incur=0;
	uint16_t cur2=*cur;
	//if(cur2>0)cur2++;
	while(tam--){
		*((uint8_t*)(des)+cur2)=*((uint8_t*)(fue)+incur);
		cur2++;
		incur++;
	}
	*cur=cur2;
}

void DesModularMem(void *dst,void *org,unsigned short tam,unsigned short offset){
	unsigned short cur=0;
	unsigned short cur2=offset;
	while(tam--){
		*((unsigned char*)(dst)+cur)=*((unsigned char*)(org)+cur2);
		cur++;
		cur2++;
	}

}

//----------------------------------- FIN Manipulacion MEMORIA------------------------

uint16_t Multiplo(uint16_t tam,uint8_t mul){
	uint16_t temp;
	if(tam==0)return mul;
	else if(tam%mul!=0){
			temp=tam%mul;
			temp=mul-temp;
			return tam+temp;
	}
	else return tam;
}



