
;****************************************************************
;                                                               ;
; Copyright 1985, Commodore Amiga Inc.  All rights reserved.    ;
; No part of this program may be reproduced, transmitted,       ;
; transcribed, stored in retrieval system, or translated into   ;
; any language or computer language, in any form or by any      ;
; means, electronic, mechanical, magnetic, optical, chemical,   ;
; manual or otherwise, without the prior written permission of  ;
; Commodore-Amiga Incorporated, 983 University Ave. Building #D,*
; Los Gatos, California, 95030                                  ;
;                                                               ;
;****************************************************************


;****************************************************************
;
; serial.i -- external declarations for Serial Port Driver
;
; SOURCE CONTROL
; ------ -------
; $Header: serial.i,v 33.1 86/04/29 14:19:10 barry Exp $
;
; $Locker:  $
;
;****************************************************************

    IFND    DEVICES_SERIAL_I@
DEVICES_SERIAL_I@ = 1

    IFND     EXEC_STRINGS_I@
    include 'exec/strings.i'
    ENDIF

    IFND     EXEC_IO_I@
    include 'exec/io.i'
    ENDIF

;--------------------------------------------------------------------
;
; Useful constants
;
;--------------------------------------------------------------------
;
SER_CTL       EQU     $1113     ; default char's for xON,Xoff.
SER_DBAUD     EQU     9600      ; default baud 

;
;--------------------------------------------------------------------
;
; Driver Specific Commands

SDCMD_QUERY     EQU     CMD_NONSTD
SDCMD_BREAK     EQU     CMD_NONSTD+1
SDCMD_SETPARAMS EQU     CMD_NONSTD+2

SER_DEVFINISH   EQU     CMD_NONSTD+2 ; number of device comands 

;--------------------------------------------------------------------

;-- SERIALNAME is a generic macro to get the name of the driver.  This
;-- way if the name is ever changed you will pick up the change
;-- automatically.
;--
;-- Normal usage would be:
;--
;-- internalName:       SERIALNAME
;--

SERIALNAME:     MACRO
                STRING  'serial.device'
                ENDM

;        BITDEF  SER,XDISABLED,7   ; SERFLAGS xOn-xOff feature disabled bit
SERB_XDISABLED = 7   ; SERFLAGS xOn-xOff feature disabled bit
SERF_XDISABLED = 1<<7   ; SERFLAGS xOn-xOff feature disabled bit
;        BITDEF  SER,EOFMODE,6     ;    "     EOF mode enabled bit
SERB_EOFMODE = 6     ;    "     EOF mode enabled bit
SERF_EOFMODE = 1<<6     ;    "     EOF mode enabled bit
;        BITDEF  SER,SHARED,5      ;    "     non-exclusive access
SERB_SHARED = 5      ;    "     non-exclusive access
SERF_SHARED = 1<<5      ;    "     non-exclusive access
;        BITDEF  SER,RAD_BOOGIE,4  ;    "     high-speed mode active
SERB_RAD_BOOGIE = 4  ;    "     high-speed mode active
SERF_RAD_BOOGIE = 1<<4  ;    "     high-speed mode active
;        BITDEF  SER,QUEUEDBRK,3   ;    "     queue this Break ioRqst
SERB_QUEUEDBRK = 3   ;    "     queue this Break ioRqst
SERF_QUEUEDBRK = 1<<3   ;    "     queue this Break ioRqst
;        BITDEF  SER,7WIRE,2       ;    "     RS232 7-wire protocol
SERB_7WIRE = 2       ;    "     RS232 7-wire protocol 
SERF_7WIRE = 1<<2       ;    "     RS232 7-wire protocol 
;        BITDEF  SER,PARTY_ODD,1   ;    "     use-odd-parity bit
SERB_PARTY_ODD = 1   ;    "     use-odd-parity bit
SERF_PARTY_ODD = 1<<1   ;    "     use-odd-parity bit
;        BITDEF  SER,PARTY_ON,0    ;    "     parity-enabled bit
SERB_PARTY_ON = 0    ;    "     parity-enabled bit 
SERF_PARTY_ON = 1<<0    ;    "     parity-enabled bit 
;        BITDEF  IOSER,QUEUED,6    ; IO_FLAGS rqst-queued bit
IOSERB_QUEUED = 6    ; IO_FLAGS rqst-queued bit
IOSERF_QUEUED = 1<<6    ; IO_FLAGS rqst-queued bit
;        BITDEF  IOSER,ABORT,5     ;     "    rqst-aborted bit
IOSERB_ABORT = 5     ;     "    rqst-aborted bit
IOSERF_ABORT = 1<<5     ;     "    rqst-aborted bit
;        BITDEF  IOSER,ACTIVE,4    ;     "    rqst-qued-or-current bit
IOSERB_ACTIVE = 4    ;     "    rqst-qued-or-current bit
IOSERF_ACTIVE = 1<<4    ;     "    rqst-qued-or-current bit
;        BITDEF  IOST,XOFFREAD,4   ; IOST_HOB receive currently xOFF'ed
IOSTB_XOFFREAD = 4   ; IOST_HOB receive currently xOFF'ed
IOSTF_XOFFREAD = 1<<4   ; IOST_HOB receive currently xOFF'ed
;        BITDEF  IOST,XOFFWRITE,3  ;     "    transmit currently xOFF'ed
IOSTB_XOFFWRITE = 3  ;     "    transmit currently xOFF'ed
IOSTF_XOFFWRITE = 1<<3  ;     "    transmit currently xOFF'ed
;        BITDEF  IOST,READBREAK,2  ;     "    break was latest input
IOSTB_READBREAK = 2  ;     "    break was latest input
IOSTF_READBREAK = 1<<2  ;     "    break was latest input
;        BITDEF  IOST,WROTEBREAK,1 ;     "    break was latest output
IOSTB_WROTEBREAK = 1 ;     "    break was latest output
IOSTF_WROTEBREAK = 1<<1 ;     "    break was latest output
;        BITDEF  IOST,OVERRUN,0    ;     "    status word RBF overrun
IOSTB_OVERRUN = 0    ;     "    status word RBF overrun
IOSTF_OVERRUN = 1<<0    ;     "    status word RBF overrun
;       BITDEF's (longword field) ; IO_EXTFLAGS (extended flag longword)

;(longword field) ; IO_EXTFLAGS (extended flag longword)
        BITDEF  SEXTB_MSPON = 1      ;     "    use mark-space parityF_not odd-even
SEXTB_MSPON = 1      ;     "    use mark-space parityF_not odd-even
SEXTB_MSPON = 1      ;     "    use mark-space parityF_not odd-even
        BITDEF  SEXT = 1<<MARKB_0       ;     "    if mark-space =  use mark
;
;*************************************************************************************
 STRUCTURE TERMARRAYF_0
        ULONG    TERMARRAY_0
        ULONG    TERMARRAY_1
        LABEL    TERMARRAY_SIZE
;
;****************************************************************
; CAUTION ||  IF YOU ACCESS the serial.device = 1<< you MUST (||||) use an
; IOEXTSER-sized structure or you may overlay innocent memory, okay ?|  
;****************************************************************
 
 STRUCTURE IOEXTSER,IOSTD_SIZE

;     STRUCT   MsgNode
;   0   APTR     Succ
;   4   APTR     Pred
;   8   UBYTE    Type
;   9   UBYTE    Pri
;   A   APTR     Name
;   E   APTR     ReplyPort
;  12   UWORD    MNLength
;     STRUCT   IOExt
;  14   APTR     IO_DEVICE
;  18   APTR     IO_UNIT
;  1C   UWORD    IO_COMMAND
;  1E   UBYTE    IO_FLAGS
;  1F   UBYTE    IO_ERROR
;     STRUCT   IOStdExt
;  20   ULONG    IO_ACTUAL
;  24   ULONG    IO_LENGTH
;  28   APTR     IO_DATA
;  2C   ULONG    IO_OFFSET
;
;  30
        ULONG   IO_CTLCHAR      ; control char's (order = xON,xOFF,rsvd,rsvd)
        ULONG   IO_RBUFLEN      ; length in bytes of serial port's read buffer
        ULONG   IO_EXTFLAGS     ; additional serial flags (see bitdefs above)
        ULONG   IO_BAUD         ; baud rate requested (true baud)
        ULONG   IO_BRKTIME      ; duration of break signal in MICROseconds
        STRUCT  IO_TERMARRAY,TERMARRAY_SIZE ; termination character array
        UBYTE   IO_READLEN      ; bits per read char (bit count)
        UBYTE   IO_WRITELEN     ; bits per write char (bit count)
        UBYTE   IO_STOPBITS     ; stopbits for read (count)
        UBYTE   IO_SERFLAGS     ; see SERFLAGS bit definitions above 
        UWORD   IO_STATUS       ; status of serial port, as follows:
;
;                  BIT  ACTIVE  FUNCTION
;                   0    low    busy
;                   1    low    paper out
;                   2    low    select
;                   3    low    Data Set Ready
;                   4    low    Clear To Send
;                   5    low    Carrier Detect
;                   6    low    Ready To Send
;                   7    low    Data Terminal Ready
;                   8    high   read overrun
;                   9    high   break sent
;                  10    high   break received
;                  11    high   transmit x-OFF'ed       
;                  12    high   receive x-OFF'ed
;               13-15           reserved
;
        LABEL   IOEXTSER_SIZE

;********************************************************************************

;--------------------------------------------------------------------
;
; Driver error definitions
;
;--------------------------------------------------------------------

SerErr_DevBusy          EQU     1
SerErr_BaudMismatch     EQU     2
SerErr_InvBaud          EQU     3
SerErr_BufErr           EQU     4
SerErr_InvParam         EQU     5
SerErr_LineErr          EQU     6
SerErr_NotOpen          EQU     7    
SerErr_PortReset        EQU     8   
SerErr_ParityErr        EQU     9
SerErr_InitErr          EQU    10
SerErr_TimerErr         EQU    11
SerErr_BufOverflow      EQU    12
SerErr_NoDSR            EQU    13
SerErr_NoCTS            EQU    14
SerErr_DetectedBreak    EQU    15

    ENDIF
    END


 