shithub: rott

ref: 2a0405f5f4d1c1afc80edb786d36748a6f39fdb8
dir: /src/splib.h/

View raw version
/*
Copyright (C) 1994-1995 Apogee Software, Ltd.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*/
#ifndef SPLIB_H
#define SPLIB_H

/* ======================================================================= *
 * Please Read "SpReadme.doc" for usage                                    *
 * ======================================================================= */

/* ======================================================================= *
 * Compiler & Memory Mode Wrappers.                                        *
 * ----------------------------------------------------------------------- */

#ifdef __cplusplus
extern "C" {
#endif

#if defined(REALMODE)
#define FAR __far
#else
#define FAR
#endif

//---------------------------------------------------------------------------
// Constants

#define TSR_SERIAL_LENGTH		14
#define TSR_MAX_LENGTH			80

//---------------------------------------------------------------------------

typedef struct {
    char           copyright[TSR_MAX_LENGTH];	// driver copyright
    short          major;							// driver version number
    short				minor;
    short				count;							// # of available devices
} SpwDrvOpenPacket;



typedef struct {
    char           copyright[TSR_MAX_LENGTH];	// device copyright
    char           serial[TSR_SERIAL_LENGTH];	// device serial number
} SpwDevOpenPacket;



typedef struct {
    long				timestamp;						// time of event
    unsigned short	period;							// period since last MOVEMENT
    unsigned short button;							// button pressed mask
    short          tx;								// Translation X
    short          ty;								//					Y
    short          tz;								//					Z
    short          rx;								// Rotation X
    short          ry;								//				Y
    short          rz;								//				Z
} SpwForcePacket;



typedef struct {
    long           timestamp;						// time of event
    unsigned short period;							// period since last BUTTON
    unsigned short button;							// button pressed mask
} SpwButtonPacket;



typedef struct {
    unsigned long data;								// MUST be TSRCMD_DATA
} SpwCommandPacket;

#define TSRCMD_DATA	0xFF0000FF

//---------------------------------------------------------------------------

typedef union {
    char              padding[128];		/* Extra room for future expansion */

    SpwCommandPacket	command;

    SpwDrvOpenPacket	drvOpen;
    SpwDevOpenPacket	devOpen;

    SpwForcePacket		force;
    SpwButtonPacket	button;
} SpwPacket;



// TSR Interrupt Functions
#define TSR_DRIVER_CLOSE		 		0x0000
#define TSR_DRIVER_OPEN					0x8001
#define TSR_DEVICE_CLOSE				0x0002
#define TSR_DEVICE_OPEN					0x8003

#define TSR_DEVICE_DISABLE				0x0010
#define TSR_DEVICE_ENABLE				0x0011

#define TSR_DEVICE_GETFORCE			0x8020
#define TSR_DEVICE_GETBUTTONS			0x8021

/* ======================================================================= *
 * Function Prototypes                                                     *
 * ======================================================================= */

short SpwOpenDriver(SpwPacket FAR *packet);
short SpwCloseDriver(void);

short SpwOpenDevice(short device, SpwPacket FAR *packet);
short SpwCloseDevice(short device);

short SpwEnableDevice(short device);
short SpwDisableDevice(short device);

short SpwGetForce(short device, SpwPacket FAR *packet);
short SpwGetButton(short device, SpwPacket FAR *packet);

/* ======================================================================= *
 * Convience functions                                                     *
 * ======================================================================= */

/* ----------------------------------------------------------------------- *
 * The SpwSimple... functions are just convienence wrappers for the above  *
 * functions.                                                              *
 * ----------------------------------------------------------------------- */

#ifndef SPWSTRUCTS
#define SPWSTRUCTS

enum SpwDeviceType {
    SPW_AVENGER=1,
};



enum SpwEventType {
    SPW_NO_EVENT=0,
    SPW_BUTTON_HELD=1,
    SPW_BUTTON_DOWN=2,
    SPW_BUTTON_UP=4,
    SPW_MOTION=8
};



/* ----------------------------------------------------------------------- *
 * Data struct for handling library calls                                  *
 * ----------------------------------------------------------------------- */

typedef struct {
    short new;
    short cur;
    short old;
} SpwButtonRec;



typedef struct {
    short 		 tx;			/* Current Translation vector */
    short 		 ty;
    short 		 tz;
    short 		 rx;			/* Current Rotation vector    */
    short 		 ry;
    short        rz;
    SpwButtonRec buttons;   /* Current Button Record      */
    short			 newData;   /* An SpEventType mask of newData, 0 if none */
} SpwRawData;

#endif



short SpwSimpleGet(short devNum, SpwRawData FAR *splayer);
short SpwSimpleOpen(short devNum);
short SpwSimpleClose(short devNum);

/* ======================================================================= *
 * Compiler & Memory Mode Wrappers.                                        *
 * ======================================================================= *
 */

#ifdef __cplusplus
};
#endif

/* ======================================================================= */
#endif