/****************************************************************************/
/* Copyright 1994 to 1995 MBARI                                             */
/****************************************************************************/
/* Summary  : Camera Daughter Board Misc Function Driver                    */
/* Filename : camBoard.h                                                    */
/* Author   : Andrew Pearce                                                 */
/* Project  : Tiburon Data Concentrator                                     */
/* Version  : 1.0                                                           */
/* Created  : 04/08/94                                                      */
/* Modified : 03/10/95                                                      */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/* $Header: /usr/tiburon/.cvsroot/micro/h/camboard.h,v 1.1.1.1 1997/05/02 17:15:37 pean Exp $
 * $Log: camboard.h,v $
 * Revision 1.1.1.1  1997/05/02 17:15:37  pean
 * Initial release of the microcontroller software after Tiburon
 * Moolpool Dive to test IView, Lapboxes, modified Power can
 * GF/5V using bus capacitance mode.
 *
 */
/****************************************************************************/

#ifndef CAMBOARD_H
#define CAMBOARD_H

#define UART_ADDRESS        (Byte*) 0xAC00  /* Base address of Camera UART  */
#define STATUS_REG_LATCH_DATA_ADDR  0xB000  /* Latch Camera Status lines    */
#define STATUS_REG_ENABLE_ADDR      0xB400  /* Enable Status Reg output     */
#define STATUS_REG_DISABLE_ADDR     0xB800  /* Disable Status Reg output    */
#define STATUS_REG_LOAD_SHIFT_ADDR  0xBC00  /* Load data or shift data      */

#define STATUS_REG_BITS                8    /* Status Reg size in bits      */
#define STATUS_REG_SHIFT               7    /* Number of bits to shift data */
#define STATUS_REG_SCLOCK           0x80    /* Status Data Clock mask P2.7  */
#define STATUS_REG_SDATA            0x08    /* Status Serial Data mask P2.3 */


#define BIPOLAR                     TRUE    /* Bipolar A to D measurement   */
#define UNIPOLAR                   FALSE    /* Unipolar A to D measurement  */
#define CALIBRATE                      4    /* Calibrate A/D Convertor      */

#define CAM_COUNT                       1    /* Number of Camera units       */
#define CAM_TIMEOUT                    10    /* 0.1 second timeout for cmds  */

#define CAM_UART_BUF_SIZE         128    /* Transmit & Receive Buffer Sizes  */
#define CAM_UART_RX_IDLE_TIME       1    /* Wait 10 msec for receiver idle   */
#define CAM_UART_CHAN_PER_UART      2    /* No of serial channels per UART   */
#define CAM_UART_CHAN_OFFSET     0x08    /* Each channel occupies 8 bytes    */
#define CAM_UART_CLOCK_FREQ     (Int32) 2000000 /* UART clock frequency      */
#define CAM_SERIAL_CHAN          0       /* camera serial channel            */
#define CAMERA_BAUD_RATE     (Int32) 125000

                                        /* Return register absolute address */
                                        /* given channel number and reg ID  */
#define UART_REG(chan, reg) \
    ((Byte *) (uartBaseAddress + (chan * CAM_UART_CHAN_OFFSET + reg) ))


typedef struct
{
    struct                              /* Status Flag bits                 */
    {
        unsigned enableStatus : 8;      /* Rx and Tx enable status          */

        unsigned protocol     : 2;      /* Selects RS232/RS485 protocol mode*/
        unsigned chanOpen     : 1;      /* TRUE if channel is currently open*/
        unsigned txBusy       : 1;      /* Transmitter busy for TxStartUp   */
        unsigned rxIdle       : 1;      /* Receiver Idle flag               */
    } flags;

    Byte rxTerm;                        /* Receive termination character    */
    Byte termRecvd;                     /* Termination Character Count      */

    Ring readBuf;                       /* Ring buffer for serial read      */
    Ring writeBuf;                      /* Ring buffer for serial write     */

    Byte readBuffer[CAM_UART_BUF_SIZE];  /* Read buffer                      */
    Byte writeBuffer[CAM_UART_BUF_SIZE]; /* Write buffer                     */
} sccUartChan;

typedef enum                            /* Serial Protocol Modes            */
{
    RS232_MODE,
    RS485_MODE,
    RS422_MODE
} protocol;

#define LINE_FEED       0x0a            /* Line feed character              */
#define CARRIAGE_RET    0x0d            /* Carriage Return character        */
#define HANDSHAKE_ON    TRUE            /* RS232 Handshake Modes            */
#define HANDSHAKE_OFF   FALSE

#ifdef __STDC__

Void  toggleDaughterBoardLed( Void );

Void  camUartInit( Byte* uartAddress );
Void  camUartOpenSerialChan(Nat16 chan, protocol proto);
Void  camUartCloseSerialChan(Nat16 chan);
Int16 camUartSerialChanRead( Nat16 chan, Byte *buffer, Int16 nBytes);
Int16 camUartSerialChanWrite(Nat16 chan, Byte *buffer, Int16 nBytes);
Void  camUartSetLineFormat(Nat16 chan, Nat16 dataBits, Nat16 stopBits,
                              Nat16 parity, protocol proto);

Void  camUartSerialChanRxFlush(Nat16 chan);
Int16 camUartTermRecvd(Nat16 chan);

Void  camUartIsr( Void );

#endif

#endif





