#include <stdio.h>
#include "pip_lib.h"
#include "pipclient.h"
#include "imports/elan_lib.h"
#include "pipclient.h"

#define DONTCARE 0x00

int pip_siemens_set( sda9189 *io_sda9189 )
{
	int rc;

	I2C_Byte SiRegs[21] = { DONTCARE,			// frozen, on
		                    DONTCARE,			// x hi
							DONTCARE,			// x lo
							DONTCARE,			// y
							DONTCARE,			// mode
							DONTCARE,			// target
							DONTCARE,			// 0x1f, fillmode of curr pip
							0,
							0,
							DONTCARE,
							DONTCARE,
							DONTCARE,			// frame control
							1,
							0,
							0,
							0x80,
							DONTCARE,
							DONTCARE,			// wipe on, wipe timer
							0,
							0,
							0 }; 

	rc = FindPip();
	if( rc ) return rc;

	if( pip_type != PIP_TYPE_SIEMENS )
		return PIP_ERROR_WRONG_TYPE;

	SiRegs[0x00] = (io_sda9189->cpip_frozen<<5) + (io_sda9189->pip_on<<0);
	SiRegs[0x01] = (io_sda9189->pip_xpos>>8);
	SiRegs[0x02] = io_sda9189->pip_xpos & 0xff;
	SiRegs[0x03] = io_sda9189->pip_ypos & 0xff;
	SiRegs[0x04] = io_sda9189->pip_mode & 63;
	SiRegs[0x05] = (io_sda9189->pip_target&0x0f)<<4;
	SiRegs[0x06] = (io_sda9189->cpip_fillmode<<5) + 0x1f;
	SiRegs[0x09] = ((io_sda9189->pip_intensity&0x0f)<<4) + (io_sda9189->frame_y&0x0f);
	SiRegs[0x0A] = ((io_sda9189->frame_v&0x0f)<<4) + (io_sda9189->frame_u&0x0f);
	SiRegs[0x0B] = ((io_sda9189->iframe_on&0x01)<<7) +
		           ((io_sda9189->frame_vert&0x03)<<3) +
				    (io_sda9189->frame_horiz&0x07);
	SiRegs[0x10] = ((io_sda9189->bkgd_fillmode&0x01)<<7) +
		           ((io_sda9189->bkgd_y&0x03)<<5) +
		           ((io_sda9189->bkgd_u&0x03)<<3) +
		           ((io_sda9189->bkgd_y&0x03)<<5) +
		           ((io_sda9189->bkgd_on&0x01)<<0);
	SiRegs[0x11] = ((io_sda9189->pip_wipe_speed&0x03)<<5) +
		           ((io_sda9189->pip_wipe_on&0x01)<<7) +
				   ((io_sda9189->pip_fillmode&0x01)<<0);

	rc = elan_i2c_write( I2C_DEV_SDA9189, 0x00, sizeof(SiRegs), SiRegs );

	if( rc < 0 )
		return rc;

	return 0;
}
