/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef __AFIRDA__
#define __AFIRDA__

#ifdef __LP64__
#pragma push_macro("u_long")
#undef u_long
#define u_long __ms_u_long
#endif

#include <_bsd_types.h>

#define WINDOWS_AF_IRDA 26
#define WINDOWS_PF_IRDA WINDOWS_AF_IRDA

#define WCE_AF_IRDA 22
#define WCE_PF_IRDA WCE_AF_IRDA

#ifndef AF_IRDA
#define AF_IRDA WINDOWS_AF_IRDA
#endif
#define IRDA_PROTO_SOCK_STREAM 1

#define PF_IRDA AF_IRDA

#define SOL_IRLMP 0x00FF

#define IRLMP_ENUMDEVICES 0x00000010
#define IRLMP_IAS_SET 0x00000011
#define IRLMP_IAS_QUERY 0x00000012

#define IRLMP_SEND_PDU_LEN 0x00000013
#define IRLMP_EXCLUSIVE_MODE 0x00000014
#define IRLMP_IRLPT_MODE 0x00000015
#define IRLMP_9WIRE_MODE 0x00000016

#define IRLMP_TINYTP_MODE 0x00000017
#define IRLMP_PARAMETERS 0x00000018
#define IRLMP_DISCOVERY_MODE 0x00000019

#define IRLMP_SHARP_MODE 0x00000020

#define SIO_LAZY_DISCOVERY _IOR('t',127,u_long)

#define IAS_ATTRIB_NO_CLASS 0x00000010
#define IAS_ATTRIB_NO_ATTRIB 0x00000000
#define IAS_ATTRIB_INT 0x00000001
#define IAS_ATTRIB_OCTETSEQ 0x00000002
#define IAS_ATTRIB_STR 0x00000003

#define IAS_MAX_USER_STRING 256
#define IAS_MAX_OCTET_STRING 1024
#define IAS_MAX_CLASSNAME 64
#define IAS_MAX_ATTRIBNAME 256

enum {
  LM_HB_Extension = 128,LM_HB1_PnP = 1,LM_HB1_PDA_Palmtop = 2,LM_HB1_Computer = 4,LM_HB1_Printer = 8,LM_HB1_Modem = 16,LM_HB1_Fax = 32,
  LM_HB1_LANAccess = 64,LM_HB2_Telephony = 1,LM_HB2_FileServer = 2,
};

#define LmCharSetASCII 0
#define LmCharSetISO_8859_1 1
#define LmCharSetISO_8859_2 2
#define LmCharSetISO_8859_3 3
#define LmCharSetISO_8859_4 4
#define LmCharSetISO_8859_5 5
#define LmCharSetISO_8859_6 6
#define LmCharSetISO_8859_7 7
#define LmCharSetISO_8859_8 8
#define LmCharSetISO_8859_9 9
#define LmCharSetUNICODE 0xff

typedef u_long LM_BAUD_RATE;

#define LM_BAUD_1200 1200
#define LM_BAUD_2400 2400
#define LM_BAUD_9600 9600
#define LM_BAUD_19200 19200
#define LM_BAUD_38400 38400
#define LM_BAUD_57600 57600
#define LM_BAUD_115200 115200
#define LM_BAUD_576K 576000
#define LM_BAUD_1152K 1152000
#define LM_BAUD_4M 4000000

typedef struct {
  u_long nTXDataBytes;
  u_long nRXDataBytes;
  LM_BAUD_RATE nBaudRate;
  u_long thresholdTime;
  u_long discTime;
  u_short nMSLinkTurn;
  u_char nTXPackets;
  u_char nRXPackets;
} LM_IRPARMS,*PLM_IRPARMS;

typedef struct _SOCKADDR_IRDA {
  u_short irdaAddressFamily;
  u_char irdaDeviceID[4];
  char irdaServiceName[25];
} SOCKADDR_IRDA,*PSOCKADDR_IRDA,*LPSOCKADDR_IRDA;

typedef struct _WINDOWS_IRDA_DEVICE_INFO {
  u_char irdaDeviceID[4];
  char irdaDeviceName[22];
  u_char irdaDeviceHints1;
  u_char irdaDeviceHints2;
  u_char irdaCharSet;
} WINDOWS_IRDA_DEVICE_INFO,*PWINDOWS_IRDA_DEVICE_INFO,*LPWINDOWS_IRDA_DEVICE_INFO;

typedef struct _WCE_IRDA_DEVICE_INFO {
  u_char irdaDeviceID[4];
  char irdaDeviceName[22];
  u_char Reserved[2];
} WCE_IRDA_DEVICE_INFO,*PWCE_IRDA_DEVICE_INFO;

typedef WINDOWS_IRDA_DEVICE_INFO IRDA_DEVICE_INFO,*PIRDA_DEVICE_INFO,*LPIRDA_DEVICE_INFO;

typedef struct _WINDOWS_DEVICELIST {
  ULONG numDevice;
  WINDOWS_IRDA_DEVICE_INFO Device[1];
} WINDOWS_DEVICELIST,*PWINDOWS_DEVICELIST,*LPWINDOWS_DEVICELIST;

typedef struct _WCE_DEVICELIST {
  ULONG numDevice;
  WCE_IRDA_DEVICE_INFO Device[1];
} WCE_DEVICELIST,*PWCE_DEVICELIST;

typedef WINDOWS_DEVICELIST DEVICELIST,*PDEVICELIST,*LPDEVICELIST;

typedef struct _WINDOWS_IAS_SET {
  char irdaClassName[IAS_MAX_CLASSNAME];
  char irdaAttribName[IAS_MAX_ATTRIBNAME];
  u_long irdaAttribType;
  union {
    LONG irdaAttribInt;
    struct {
      u_short Len;
      u_char OctetSeq[IAS_MAX_OCTET_STRING];
    } irdaAttribOctetSeq;
    struct {
      u_char Len;
      u_char CharSet;
      u_char UsrStr[IAS_MAX_USER_STRING];
    } irdaAttribUsrStr;
  } irdaAttribute;
} WINDOWS_IAS_SET,*PWINDOWS_IAS_SET,*LPWINDOWS_IAS_SET;

typedef struct _WINDOWS_IAS_QUERY {
  u_char irdaDeviceID[4];
  char irdaClassName[IAS_MAX_CLASSNAME];
  char irdaAttribName[IAS_MAX_ATTRIBNAME];
  u_long irdaAttribType;
  union {
    LONG irdaAttribInt;
    struct {
      u_long Len;
      u_char OctetSeq[IAS_MAX_OCTET_STRING];
    } irdaAttribOctetSeq;
    struct {
      u_long Len;
      u_long CharSet;
      u_char UsrStr[IAS_MAX_USER_STRING];
    } irdaAttribUsrStr;
  } irdaAttribute;
} WINDOWS_IAS_QUERY,*PWINDOWS_IAS_QUERY,*LPWINDOWS_IAS_QUERY;

typedef struct _WCE_IAS_SET {
  char irdaClassName[61];
  char irdaAttribName[61];
  u_short irdaAttribType;
  union {
    int irdaAttribInt;
    struct {
      int Len;
      u_char OctetSeq[1];
      u_char Reserved[3];
    } irdaAttribOctetSeq;
    struct {
      int Len;
      u_char CharSet;
      u_char UsrStr[1];
      u_char Reserved[2];
    } irdaAttribUsrStr;
  } irdaAttribute;
} WCE_IAS_SET,*PWCE_IAS_SET;

typedef struct _WCE_IAS_QUERY {
  u_char irdaDeviceID[4];
  char irdaClassName[61];
  char irdaAttribName[61];
  u_short irdaAttribType;
  union {
    int irdaAttribInt;
    struct {
      int Len;
      u_char OctetSeq[1];
      u_char Reserved[3];
    } irdaAttribOctetSeq;
    struct {
      int Len;
      u_char CharSet;
      u_char UsrStr[1];
      u_char Reserved[2];
    } irdaAttribUsrStr;
  } irdaAttribute;
} WCE_IAS_QUERY,*PWCE_IAS_QUERY;

typedef WINDOWS_IAS_SET IAS_SET,*PIAS_SET,*LPIASSET;
typedef WINDOWS_IAS_QUERY IAS_QUERY,*PIAS_QUERY,*LPIASQUERY;

#ifdef __LP64__
#pragma pop_macro("u_long")
#endif

#endif