/*************************************************************************
 *
 * ctrl.h
 *
 *************************************************************************
 *
 * simple controller interface
 *
 *************************************************************************/

#ifndef CTRL_H_INCLUDED
#define CTRL_H_INCLUDED

/*
 * includes
 */

#include "ult_64.h"

/*
 * defines
 */

#define MAX_CTRLPAK_FILES		16

#define CTRL_UP				(1<<0)
#define CTRL_DOWN			(1<<1)
#define CTRL_LEFT			(1<<2)
#define CTRL_RIGHT			(1<<3)
#define CTRL_FIRE_A			(1<<4)
#define CTRL_FIRE_B			(1<<5)
#define CTRL_START			(1<<6)
#define CTRL_C_UP			(1<<7)
#define CTRL_C_DOWN			(1<<8)
#define CTRL_C_LEFT			(1<<9)
#define CTRL_C_RIGHT			(1<<10)
#define CTRL_PAD_UP			(1<<11)
#define CTRL_PAD_DOWN			(1<<12)
#define CTRL_PAD_LEFT			(1<<13)
#define CTRL_PAD_RIGHT			(1<<14)
#define CTRL_SHOULDER_L			(1<<15)
#define CTRL_SHOULDER_R			(1<<16)
#define CTRL_TRIGGER			(1<<17)

/*
 * typedefs
 */

/*
 * structures
 */

typedef struct _ctrlData
{
	unsigned short	buttons;
	signed char 	x,y;
} ctrlData;

typedef struct _ctrlPakDirEntry
{
	unsigned long	size;
	unsigned long	gameCode;
	unsigned short	companyCode;
	char		extension[4];
	char		gameName[16];
	signed short	fileId;
} ctrlPakDirEntry;

/*
 * globals
 */

extern int stopAllMotors;

extern int ctrlReading;

extern ctrlPakDirEntry	ctrlPakDirEntries[4][MAX_CTRLPAK_FILES];

extern ctrlData controllers[4];
extern unsigned char validcontrollers;

extern unsigned long motorStat,motorValid,paksValid,dodgyPaks;

extern int eepromPresent,eepromSize;
extern unsigned char sramTestBuf[32];

/*
 * function prototypes
 */

extern int  CtrlInit(void);
extern void CtrlUpdate(void);
extern void CtrlStartReading(void);

extern void CtrlMotorOn(int which,int time);

extern void CtrlScanSingle(int pak);

extern void CtrlDisable(int time);


extern int CtrlPakQuerySpace(int pak);
extern int CtrlPakReadDirectory(int pak);
extern int CtrlPakCreateFile(int pak,char *n,char *e,int compCode,int gameCode,int size);
extern int CtrlPakDeleteFile(int pak,int fileId);
extern int CtrlPakReadFile(int pak,int fh,int offset,int len,char *data);
extern int CtrlPakWriteFile(int pak,int fh,int offset,int len,char *data);

extern void CtrlEepromWriteBuffer(int offset,unsigned char *buf,int len);
extern void CtrlEepromReadBuffer(int offset,unsigned char *buf,int len);

extern int CtrlPakRepair(int pak);


#endif
