/* File:	funkset.c	
 * Project:	Funkset Ansteuerung
 * 		http://www.thomaskropf.at/funkset.php
 * Version:	1.0
 * Date:	Sun Feb 18 02:55:08 CET 2007
 * uC:		AVR ATMega16 @ 14.7456 MHz
 *
 * Author:	Thomas Kropf
 * 		http://www.thomaskropf.at
 * 		uC@thomaskropf.at
 */

#include "funkset.h"


void fs_turn_on_A(void)
{
	FS_PORT = 0x00;

//	PIN0 = A5 = 0
//	PIN1 = A6 = Z/1
//	PIN2 = A7 = Z/1
//
//	PIN3 = D0 = 1
//	PIN4 = D1 = Z/1
//	PIN5 = D2 = Z/1
//	PIN6 = D3 = Z/1

	//A ON
	FS_DDR = 0xFF;
	FS_PORT |= (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6);
	
	FS_ENABLE_TE();
	busywait(FS_SEND_TIME);
	FS_DISABLE_TE();
}

void fs_turn_off_A(void)
{
	FS_PORT = 0x00;

//	PIN0 = A5 = 0
//	PIN1 = A6 = Z/1
//	PIN2 = A7 = Z/1
//
//	PIN3 = D0 = 0
//	PIN4 = D1 = 1 
//	PIN5 = D2 = Z/1
//	PIN6 = D3 = Z/1

	//A OFF
	FS_DDR = 0xFF;
	FS_PORT |= (1 << 1) | (1 << 2) | (1 << 4) | (1 << 5) | (1 << 6);

	FS_ENABLE_TE();
	busywait(FS_SEND_TIME);
	FS_DISABLE_TE();

}

void fs_turn_on_B(void)
{
	FS_PORT = 0x00;

//	PIN0 = A5 = Z/1
//	PIN1 = A6 = 0
//	PIN2 = A7 = Z/1
//
//	PIN3 = D0 = 1
//	PIN4 = D1 = Z/1
//	PIN5 = D2 = Z/1
//	PIN6 = D3 = Z/1

	//B ON
	FS_DDR = 0xFF;
	FS_PORT |= (1 << 0) | (1 << 2)| (1 << 3) | (1 << 4)| (1 << 5)| (1 << 6);
	
	
	FS_ENABLE_TE();
	busywait(FS_SEND_TIME);
	FS_DISABLE_TE();
}

void fs_turn_off_B(void)
{
	FS_PORT = 0x00;

//	PIN0 = A5 = Z/1
//	PIN1 = A6 = 0
//	PIN2 = A7 = Z/1
//
//	PIN3 = D0 = 0
//	PIN4 = D1 = 1
//	PIN5 = D2 = Z/1
//	PIN6 = D3 = Z/1

	//B OFF
	FS_DDR = 0xFF;
	FS_PORT |= (1 << 0) | (1 << 2)| (1 << 4)| (1 << 5)| (1 << 6);

	FS_ENABLE_TE();
	busywait(FS_SEND_TIME);
	FS_DISABLE_TE();
}

void fs_turn_on_C(void)
{
	FS_PORT = 0x00;

//	PIN0 = A5 = Z/1
//	PIN1 = A6 = Z/1
//	PIN2 = A7 = 0

//	PIN3 = D0 = 1
//	PIN4 = D1 = Z/1
//	PIN5 = D2 = Z/1
//	PIN6 = D3 = Z/1

	//C ON
	FS_DDR = 0xFF;
	FS_PORT |= (1 << 0) | (1 << 1) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6);
	
	FS_ENABLE_TE();
	busywait(FS_SEND_TIME);
	FS_DISABLE_TE();
}

void fs_turn_off_C(void)
{
	FS_PORT = 0x00;

//	PIN0 = A5 = Z/1
//	PIN1 = A6 = Z/1
//	PIN2 = A7 = 0

//	PIN3 = D0 = 0
//	PIN4 = D1 = 1
//	PIN5 = D2 = Z/1
//	PIN6 = D3 = Z/1

	//C OFF
	FS_DDR = 0xFF;
	FS_PORT |= (1 << 0) | (1 << 1)  | (1 << 4) | (1 << 5) | (1 << 6);
	
	FS_ENABLE_TE();
	busywait(FS_SEND_TIME);
	FS_DISABLE_TE();
}

void fs_turn_on_D(void)
{
	FS_PORT = 0x00;

//	PIN0 = A5 = Z/1
//	PIN1 = A6 = Z/1
//	PIN2 = A7 = Z/1

//	PIN3 = D0 = 1
//	PIN4 = D1 = Z/1
//	PIN5 = D2 = Z/1
//	PIN6 = D3 = 0

	//D ON
	FS_DDR = 0xFF;
	FS_PORT |= (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5);
	
	FS_ENABLE_TE();
	busywait(FS_SEND_TIME);
	FS_DISABLE_TE();
}

void fs_turn_off_D(void)
{
	FS_PORT = 0x00;

//	PIN0 = A5 = Z/1
//	PIN1 = A6 = Z/1
//	PIN2 = A7 = Z/1

//	PIN3 = D0 = 0
//	PIN4 = D1 = 1
//	PIN5 = D2 = Z/1
//	PIN6 = D3 = 0

	//D OFF
	FS_DDR = 0xFF;
	FS_PORT |= (1 << 0) | (1 << 1)  | (1 << 2) | (1 << 4) | (1 << 5);
	
	FS_ENABLE_TE();
	busywait(FS_SEND_TIME);
	FS_DISABLE_TE();
}

void fs_turn_on_E(void)
{
	FS_PORT = 0x00;

//	PIN0 = A5 = Z/1
//	PIN1 = A6 = Z/1
//	PIN2 = A7 = Z/1

//	PIN3 = D0 = 1
//	PIN4 = D1 = Z/1
//	PIN5 = D2 = 0
//	PIN6 = D3 = Z/1

	//E ON
	FS_DDR = 0xFF;
	FS_PORT |= (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 6);
	
	FS_ENABLE_TE();
	busywait(FS_SEND_TIME);
	FS_DISABLE_TE();
}

void fs_turn_off_E(void)
{
	FS_PORT = 0x00;

//	PIN0 = A5 = Z/1
//	PIN1 = A6 = Z/1
//	PIN2 = A7 = Z/1

//	PIN3 = D0 = 0
//	PIN4 = D1 = 1
//	PIN5 = D2 = 0
//	PIN6 = D3 = Z/1

	//E OFF
	FS_DDR = 0xFF;
	FS_PORT |= (1 << 0) | (1 << 1)  | (1 << 2) | (1 << 4) | (1 << 6);
	
	FS_ENABLE_TE();
	busywait(FS_SEND_TIME);
	FS_DISABLE_TE();
}

void busywait(uint8_t limit)
{
	uint16_t volatile counter, counter2;

	for (counter=0; counter < 65000; counter++)
	{
		for (counter2=0; counter2 < limit; counter2++)
			asm volatile("nop");
	}
}

