#include "PalmType.h"
#include "PalmChip.h"
#include "palm1lib.h"

void Led_On(UCHAR iIndex)
{
	DCHAR iOrMaskVal, iAndMaskVal, iRegIndex;
	BOOLEAN bHiReg;

	iRegIndex = iIndex;
	if (iRegIndex >= 0x20)	return;	// LED does not exist

	bHiReg = (iRegIndex & 0x08) ? TRUE : FALSE;
	iOrMaskVal = cOrMask[iRegIndex&0x07];
	iAndMaskVal = cAndMask[iRegIndex&0x07];
	if (iRegIndex & 0x10)
	{
		if (bHiReg)
		{
			XBYTE[IO_HI_DOUT] |= iOrMaskVal;
		}
		else
		{
			XBYTE[IO_LO_DOUT] |= iOrMaskVal;
		}
	}
	else
	{
		if (bHiReg)
		{
			XBYTE[IO_HI_DOUT] &= iAndMaskVal;
		}
		else
		{
			XBYTE[IO_LO_DOUT] &= iAndMaskVal;
		}
	}
	if (bHiReg)
	{
		XBYTE[IO_HI_ENABLE] |= iOrMaskVal;
	}
	else
	{
		XBYTE[IO_LO_ENABLE] |= iOrMaskVal;
	}
}

void Led_Off(UCHAR iIndex)
{
	DCHAR iMaskVal, iRegIndex;

	iRegIndex = iIndex;
	if (iRegIndex >= 0x20)	return;	// LED does not exist

	iMaskVal = cAndMask[iRegIndex&0x07];
	if (iRegIndex & 0x08)
	{
		XBYTE[IO_HI_ENABLE] &= iMaskVal;
	}
	else
	{
		XBYTE[IO_LO_ENABLE] &= iMaskVal;
	}
}

void Led_Blink(UCHAR iIndex)
{
	DCHAR iRegVal, iRegIndex;

	iRegIndex = iIndex;
	if (iRegIndex >= 0x20)	return;	// LED does not exist

	if (iRegIndex & 0x08)
	{
		iRegVal = XBYTE[IO_HI_ENABLE];
	}
	else
	{
		iRegVal = XBYTE[IO_LO_ENABLE];
	}
	if (iRegVal & cOrMask[iRegIndex&0x07])
	{
		Led_Off(iRegIndex);
	}
	else
	{
		Led_On(iRegIndex);
	}
}
