214 lines
5.8 KiB
C
Executable File
214 lines
5.8 KiB
C
Executable File
/*
|
|
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(_MSC_VER) || defined(__BORLANDC__)
|
|
# if PLATFORM_DOS
|
|
# define REALMODE
|
|
# endif
|
|
#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
|
|
|