/* * DEVICE.LIB - written by Jan Kriesten * * (c) 1994, 1995 by Jan Kriesten, Friedhofstr. 25 b, 35043 Marburg, Germany * EMail: Maus GI * 90:400/1002@nest.ftn * 51:601/103@atarinet.ftn * 2:2435/707@fidonet.org * kriesten@Mailer.Uni-Marburg.DE * * Routines for using the ports - supporting HSModem, FastSerial and * MiNT block device routines. * Including fast sending routines when no block device routines are * availbable. */ #ifndef __DEVICE_H__ #define __DEVICE_H__ /*--- includes ---*/ /*--- defines ---*/ #define IO_I_BUFFER 1L /* Inbound buffer */ #define IO_O_BUFFER 2L /* Outbound buffer */ #define IO_BUFFERS 3L /* Both buffers */ /* * Definitions for the port protocol: */ #define _1STOP 0x0001 #define _15STOP 0x0002 #define _2STOP 0x0003 #define _8BIT 0x0000 #define _7BIT 0x0004 #define _6BIT 0x0008 #define _5BIT 0x000c #define _NO_HNDSHAKE 0x0000 #define _XONXOFF 0x1000 #define _RTSCTS 0x2000 #define _NO_PARITY 0x0000 #define _EVENP 0x4000 #define _ODDP 0x8000 /*--- types ---*/ typedef struct _dev_list { BYTE *name; /* Device name */ LONG curr_dte; /* current DTE rate */ struct _dev_list *next; /* Pointer to next dev */ } DEV_LIST; /*--- variables ---*/ /*--- prototypes ---*/ /* * InitDevices: * To be called at the beginning of the program to initialize * the all routines. * * Parameters: * pause_normal: Routine to spent some time or NULL. * pause_super : same as normal, but will be called from * supervise modus! */ GLOBAL DEV_LIST *InitDevices ( VOID *pause_normal, VOID *pause_super ); /* * TermDevices: * Frees all memory allocated during initialization. Devicelist * is no longer valid after calling this routine. * Just to be called before exiting the program. */ GLOBAL VOID TermDevices ( VOID ); /* * Open-/CloseDevice: * The given port will be initialized and the speedlist will be * created. Returns TRUE if everything went well and the Device * could be opened. FALSE is returned if the Device is already in * use or memory allocation failed ... */ GLOBAL BOOLEAN OpenDevice ( DEV_LIST *port ); GLOBAL VOID CloseDevice ( DEV_LIST *port ); /* * GetBiosNr: * Returns the corresponding bios number for the device or -1 * if the device isn't known by the bios. Should only be used * if you have to transfer the bios number as a parameter to * another program. */ GLOBAL WORD GetBiosNr ( DEV_LIST *port ); /* * PortParameter: * Sets the parameters for the port. You don't need to call * this routine if you wish to run 8N1 + RTS/CTS handshake. * * flowctl: _RTSCTS (default) * _XONXOFF * _NO_HNDSHAKE * charlen: _8BIT (default) * _7BIT * _6BIT * _5BIT * stopbits: _1STOP (default) * _15STOP * _2STOP * parity: _NO_PARITY (default) * _EVENP * _ODDP */ GLOBAL VOID PortParameter ( DEV_LIST *port, UWORD flowctl, UWORD charlen, UWORD stopbits, UWORD parity ); /* * GetSpeedList: * Returns the speedlist for the corresponding device. The * return value is only defined for _open_ devices! * The speedlist is an array of long values (from higher dte- * rates to lower). The end of the list is specified by a * speed of -1L. */ GLOBAL LONG *GetSpeedList ( DEV_LIST *port ); /* * SetDTESpeed: * Sets the DTE speed to `speed'. If `speed' isn't available, * the current DTE is returned. * In all cases the new DTE speed is returned by the function. * Just call this function for open devices! */ GLOBAL LONG SetDTESpeed ( DEV_LIST *port, LONG speed ); /* * PortSendByte: * Sends character `c' to the port `port'. */ GLOBAL BOOLEAN PortSendByte ( DEV_LIST *port, BYTE c ); /* * PortSendBlock: * Sends `len' characters from `block' to device `port'. * If `tst_dcd' is TRUE, the carrier is checked during sending. */ GLOBAL BOOLEAN PortSendBlock ( DEV_LIST *port, BYTE *block, LONG len, BOOLEAN tst_dcd ); /* * PortGetByte: * Returns the next available character. While no character is * available the function pause_1 is called. * The routine will not pause, if there's no carrier available! */ GLOBAL WORD PortGetByte ( DEV_LIST *port ); /* * PortPeekByte: * Returns the next available character _without_ actually read * it from the port (i.e. the character is still available from * port). * If no char is available, -1 is returned. */ GLOBAL WORD PortPeekByte ( DEV_LIST *port ); /* * OutIsEmpty: * Checks, if the outbound iorec buffer is empty. */ GLOBAL BOOLEAN OutIsEmpty ( DEV_LIST *port ); /* * WaitOutEmpty: * Waits, until the outbound iorec buffer is empty. If tst_dcd * is set to TRUE, the carrier is checked while waiting. * If wait_hundreds is != 0, WaitOutEmpty waits a maximum time * of wait_hundreds hundreds seconds. If the outbound buffer is * not empty in this period, the outbound buffer is cleared. */ GLOBAL BOOLEAN WaitOutEmpty ( DEV_LIST *dev, BOOLEAN tst_dcd, UWORD wait_hundreds ); /* * CharAvailable: * Returns TRUE if a char is available from `port', else FALSE. */ GLOBAL BOOLEAN CharAvailable ( DEV_LIST *port ); /* * ClearIOBuffer: * Clears the IO buffer `which' from device port. * IO_I_BUFFER: Inbound buffer; * IO_O_BUFFER: Outbound buffer; * IO_BUFFERS: Both buffers; */ GLOBAL VOID ClearIOBuffer ( DEV_LIST *port, LONG which ); /* * DtrOn: * DtrOff: * Sets/Unsets the DTR of port `port'. */ GLOBAL VOID DtrOn ( DEV_LIST *port ); GLOBAL VOID DtrOff ( DEV_LIST *port ); /* * IsCarrier: * Returns TRUE if carrier on port `port' is available, else * FALSE; */ GLOBAL BOOLEAN IsCarrier ( DEV_LIST *port ); /* * StartReceiver: * StopReceiver: * Enables/disables the reiceiver. * StopReceiver should be used before disk access and * StartReceiver after finished disk i/o. */ GLOBAL VOID StartReceiver ( DEV_LIST *port ); GLOBAL VOID StopReceiver ( DEV_LIST *port ); /* * Set/Get*xBuffer: * Sets/returns the size of the inbound/outbound iorec * buffers. */ GLOBAL WORD SetRxBuffer ( DEV_LIST *port, WORD size ); GLOBAL WORD GetRxBuffer ( DEV_LIST *port ); GLOBAL WORD SetTxBuffer ( DEV_LIST *port, WORD size ); GLOBAL WORD GetTxBuffer ( DEV_LIST *port ); /* * Misceallaneous functions: */ /* * get_tos: * returns TOS version */ GLOBAL WORD get_tos ( VOID ); /* * getcookie: * searches `cookie' in the cookie jar. If found TRUE is * returned. `value' then holds the value of the found * cookie. */ GLOBAL BOOLEAN getcookie ( LONG cookie, LONG *value ); /* * Get200Hz: * returns the value of the 200Hz hardware counter. */ GLOBAL ULONG Get200Hz ( VOID ); /* * Calc200Hz: * returns the value the 200Hz hardware counter will have * after `time_to_set' hundreds seconds. */ GLOBAL ULONG Calc200Hz ( ULONG time_to_set ); /*--- End of device.h module ---*/ #endif