/*********************************************************************
 * FileName:        axis.c
 * Dependencies:    See INCLUDES section below
 * Processor:       PIC18
 * Compiler:        C18 2.30.01+
 * Company:         sprut
 * Copyright:       2012 Joerg Bredendiek (sprut)
 *
 *
 ********************************************************************/


/** I N C L U D E S **********************************************************/
#include <p18cxxx.h>
#include "GenericTypeDefs.h"
#include "HardwareProfile.h"             // I/O pin mapping
#include "delays.h"
#include "capture_rc.h"
#include "axis.h"



/** V A R I A B L E S ********************************************************/
#pragma udata
WORD				Kanal[16];
char				KanalNummer;
unsigned char		Axis[12];


/** D E C L A R A T I O N S **************************************************/
#pragma code

void Init_Axis(void)
{
	char k;
	for (k=0; k<16; k++) Kanal[k] = 2000;
	for (k=0; k<12; k++) Axis[k]  =  127;
	KanalNummer = 0;
} // Init_Axis



//ermittelt aus der Pulslänge (1..2ms) einen 8-Bit-Wert 0..250
unsigned char Pulse2Axis(char index)
{
	unsigned char Achse;
	WORD	longpulse;
	DontTouch = 1;
	longpulse = Kanal[index];
	DontTouch = 0;
	if (longpulse <= EineMS) return (0);
	if (longpulse >= ZweiMS) return (255);
	longpulse -= EineMS;

	Achse = longpulse / 6;		// eigentlich 5.8... oder EineMS/255;
	return(Achse);
} // Pulse2Axis


// aus Kanal[x] ermittelt man Axis_x
void UP_Axis(void)
{
	if (got_frame)
	{
		Axis[KanalNummer] = Pulse2Axis(KanalNummer);
		KanalNummer++;
		if (KanalNummer >= KanalZahl) KanalNummer = 0;
		// 0..4 sind 5 analoge Achsen
		// 5,6, und 7 brauch ich fuer Buttons
		// bei 12 Kanälen 8,9,10,11
	}
} // UP_Axis


/** EOF ************************************************************/