// jidakiss.h ansi_c
// JUMPtec JIDA interface declarations
// Copyright 2001 JUMPtec AG
// {G)U(2} 1998.10.29 2001.10.10

//***************************************************************************

#ifndef _JIDA_H_        
#define _JIDA_H_

#ifdef __cplusplus
extern "C" {
#endif

//***********************************************************************

#define JidaDllVersionMajor 1
#define JidaDllVersionMinor 1
#define JidaDllVersion ((unsigned long)JidaDllVersionMajor*65536+JidaDllVersionMinor)
  
//***********************************************************************

typedef struct {
  unsigned short wYear;
  unsigned short wMonth;
  unsigned short wDayOfWeek;
  unsigned short wDay;
  unsigned short wHour;
  unsigned short wMinute;
  unsigned short wSecond;
  unsigned short wMilliseconds;
  } JSYSTEMTIME, *PJSYSTEMTIME;

//***********************************************************************

#define JIDA_BOARD_MAX_LEN_ID_STRING 7
#define JIDA_BOARD_MAX_SIZE_ID_STRING 16
#define JIDA_BOARD_MAX_LEN_SERIAL_STRING 10
#define JIDA_BOARD_MAX_SIZE_SERIAL_STRING 16
#define JIDA_BOARD_MAX_LEN_CLASSES_STRING 127
#define JIDA_BOARD_MAX_SIZE_CLASSES_STRING 128

#define JIDA_BOARDINFO_FLAGS_DEFAULT 0
  
typedef struct {
  unsigned long dwSize;
  unsigned long dwFlags;
  char szPrimaryClass[JIDA_BOARD_MAX_SIZE_ID_STRING];
  char szBoard[JIDA_BOARD_MAX_SIZE_ID_STRING];
  char szBoardSub[JIDA_BOARD_MAX_SIZE_ID_STRING];
  char szManufacturer[JIDA_BOARD_MAX_SIZE_ID_STRING];
  JSYSTEMTIME stManufacturingDate;
  JSYSTEMTIME stLastRepairDate;
  char szSerialNumber[JIDA_BOARD_MAX_SIZE_SERIAL_STRING];
  unsigned short wHardwareRevision;
  unsigned short wFirmwareRevision;
  unsigned short wJidaRevision;
  unsigned short wFeatureNumber;
  char szClasses[JIDA_BOARD_MAX_SIZE_CLASSES_STRING];
  } JIDABOARDINFO, *PJIDABOARDINFO;


//***********************************************************************

//
// Board handle
//

typedef unsigned long HJIDA, *PHJIDA;

//
// Board Classes
//

#define JIDA_BOARD_CLASS_CPU "CPU"
#define JIDA_BOARD_CLASS_VGA "VGA"
#define JIDA_BOARD_CLASS_IO "IO"

//
// Board Open/Count Flags
//

#define JIDA_BOARD_OPEN_FLAGS_DEFAULT 0
#define JIDA_BOARD_OPEN_FLAGS_PRIMARYONLY 1

//
// max values for LCD settings
//

#define JIDA_VGA_CONTRAST_MAX 255
#define JIDA_VGA_BACKLIGHT_MAX 255

//
// Type identifiers for storage areas
//

#define JIDA_STORAGE_AREA_UNKNOWN   0
#define JIDA_STORAGE_AREA_EEPROM    0x00010000
#define JIDA_STORAGE_AREA_FLASH     0x00020000
#define JIDA_STORAGE_AREA_CMOS      0x00030000
#define JIDA_STORAGE_AREA_RAM       0x00040000

#define JIDA_STORAGE_AREA_EEPROM_IP 0x01010000

//
// I2C Addresses as used by current JUMPtec boards. May change any time.
//

#ifndef JIDA_I2C_ADDR_EEPROM
#define JIDA_I2C_ADDR_EEPROM          0xA0
#endif

#ifndef JIDA_I2C_ADDR_CONTRAST_DAC
#define JIDA_I2C_ADDR_CONTRAST_DAC    0x5C
#endif

#ifndef JIDA_I2C_ADDR_BACKLIGHT_DAC
#define JIDA_I2C_ADDR_BACKLIGHT_DAC   0x58
#endif

#ifndef JIDA_I2C_ADDR_WATCHDOG_PIC
#define JIDA_I2C_ADDR_WATCHDOG_PIC    0xBO
#endif

#ifndef JIDA_I2C_ADDR_MATRIX_PIC
#define JIDA_I2C_ADDR_MATRIX_PIC      0x5A
#endif

//***********************************************************************

//
// Watchdog structure
//

#define JIDA_WDOG_MODE_REBOOT_PC 0
#define JIDA_WDOG_MODE_RESTART_WINDOWS 1

enum {JWDModeRebootPC=0, JWDModeRestartWindows };

typedef struct {
  unsigned long dwSize;
  unsigned long dwTimeout;
  unsigned long dwDelay;
  unsigned long dwMode;
  } JWDCONFIG, * PJWDCONFIG;

//***********************************************************************

#ifndef NOJIDAAPI

// API version 1.0

// Library

unsigned long JidaDllGetVersion(void);
unsigned int JidaDllInitialize(void);
unsigned int JidaDllUninitialize(void);
unsigned int JidaDllIsAvailable(void);
unsigned int JidaDllInstall(unsigned int install);

// Generic board

unsigned int JidaBoardClose(HJIDA hJida);

unsigned long JidaBoardCount(const char *pszClass, unsigned long dwFlags);
unsigned int JidaBoardOpen(const char *pszClass, unsigned long dwNum, unsigned long dwFlags, HJIDA *phJida);
unsigned int JidaBoardOpenByName(const char *pszName, HJIDA *phJida);
unsigned int JidaBoardGetName(HJIDA hJida, char *pszName, unsigned long dwSize);
unsigned int JidaBoardGetInfo(HJIDA hJida, JIDABOARDINFO *pBoardInfo);

unsigned int JidaBoardGetBootCounter(HJIDA hJida, unsigned long *pdwCount);
unsigned int JidaBoardGetRunningTimeMeter(HJIDA hJida, unsigned long *pdwCount);

unsigned int JidaBoardGetOption(HJIDA hJida, unsigned long dwOption, unsigned long *pdwSetting);
unsigned int JidaBoardSetOption(HJIDA hJida, unsigned long dwOption, unsigned long dwSetting);

// VGA (LCD)

unsigned int JidaVgaGetContrast(HJIDA hJida, unsigned long *pdwSetting);
unsigned int JidaVgaSetContrast(HJIDA hJida, unsigned long dwSetting);
unsigned int JidaVgaGetBacklight(HJIDA hJida, unsigned long *pdwSetting);
unsigned int JidaVgaSetBacklight(HJIDA hJida, unsigned long dwSetting);

unsigned int JidaVgaEndDarkBoot(unsigned long dwReserved);

// EEPROM, FLASH, CMOS

unsigned long JidaStorageAreaCount(HJIDA hJida, unsigned long dwType);
unsigned long JidaStorageAreaType(HJIDA hJida, unsigned long dwType);
unsigned long JidaStorageAreaSize(HJIDA hJida, unsigned long dwType);
unsigned long JidaStorageAreaBlockSize(HJIDA hJida, unsigned long dwType);
unsigned int JidaStorageAreaRead(HJIDA hJida, unsigned long dwType, unsigned long dwOffset, unsigned char *pBytes, unsigned long dwLen);
unsigned int JidaStorageAreaWrite(HJIDA hJida, unsigned long dwType, unsigned long dwOffset, unsigned char *pBytes, unsigned long dwLen);
unsigned int JidaStorageAreaErase(HJIDA hJida, unsigned long dwType, unsigned long dwOffset, unsigned long dwLen);
unsigned int JidaStorageAreaEraseStatus(HJIDA hJida, unsigned long dwType, unsigned long dwOffset, unsigned long dwLen, unsigned long *lpStatus);

// I2C Bus

unsigned long JidaI2CCount(HJIDA hJida);
unsigned int JidaI2CIsAvailable(HJIDA hJida, unsigned long dwType);
unsigned int JidaI2CRead(HJIDA hJida, unsigned long dwType, unsigned char bAddr, unsigned char *pBytes, unsigned long dwLen);
unsigned int JidaI2CWrite(HJIDA hJida, unsigned long dwType, unsigned char bAddr, unsigned char *pBytes, unsigned long dwLen);

unsigned int JidaI2CReadRegister(HJIDA hJida, unsigned long dwType, unsigned char bAddr, unsigned short wReg, unsigned char *pDataByte);
unsigned int JidaI2CWriteRegister(HJIDA hJida, unsigned long dwType, unsigned char bAddr, unsigned short wReg, unsigned char bData);

// General purpose IO

unsigned long JidaIOCount(HJIDA hJida);
unsigned int JidaIOIsAvailable(HJIDA hJida, unsigned long dwType);
unsigned int JidaIORead(HJIDA hJida, unsigned long dwType, unsigned long *pdwData);
unsigned int JidaIOWrite(HJIDA hJida, unsigned long dwType, unsigned long dwData);
unsigned int JidaIOXorAndXor(HJIDA hJida, unsigned long dwType, unsigned long dwXorMask1, unsigned long dwAndMask, unsigned long dwXorMask2);


// API version 1.1

// Watchdog

unsigned long JidaWDogCount(HJIDA hJida);
unsigned int JidaWDogIsAvailable(HJIDA hJida, unsigned long dwType);
unsigned int JidaWDogTrigger(HJIDA hJida, unsigned long dwType);
unsigned long JidaWDogGetTriggerCount(HJIDA hJida, unsigned long dwType);
unsigned int JidaWDogSetTriggerCount(HJIDA hJida, unsigned long dwType, unsigned long cnt);
unsigned int JidaWDogGetConfigStruct(HJIDA hJida, unsigned long dwType, JWDCONFIG *pConfig);
unsigned int JidaWDogSetConfigStruct(HJIDA hJida, unsigned long dwType, JWDCONFIG *pConfig);
unsigned int JidaWDogSetConfig(HJIDA hJida, unsigned long dwType, unsigned long timeout, unsigned long delay, unsigned long mode);
unsigned int JidaWDogDisable(HJIDA hJida, unsigned long dwType);

#endif

//***************************************************************************

#ifdef __cplusplus
}
#endif

#endif /* _JIDA_H_ */
