/******************************************************************************
 *
 *  Copyright (C) 2001-2012 Broadcom Corporation
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at:
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 ******************************************************************************/
#ifndef UPIO_H
#define UPIO_H

/* Enumeration of UPIO features                                         */
/* Not all features enumerated here are supported by the hardware.      */
/* Use UPIO_Feature() to determine support of a particular feature.     */
enum
{
    /* LEDs */
    UPIO_FEAT_LED1,
    UPIO_FEAT_LED2,
    UPIO_FEAT_LED3,
    UPIO_FEAT_LED4,
    UPIO_FEAT_LED5,
    UPIO_FEAT_LED6,
    UPIO_FEAT_LED7,
    UPIO_FEAT_LED8,

    /* Switches */
    UPIO_FEAT_SWITCH1,
    UPIO_FEAT_SWITCH2,
    UPIO_FEAT_SWITCH3,
    UPIO_FEAT_SWITCH4,
    UPIO_FEAT_SWITCH5,
    UPIO_FEAT_SWITCH6,
    UPIO_FEAT_SWITCH7,
    UPIO_FEAT_SWITCH8,
    UPIO_FEAT_SWITCH9,
    UPIO_FEAT_SWITCH10,
    UPIO_FEAT_SWITCH11,
    UPIO_FEAT_SWITCH12,
    UPIO_FEAT_SWITCH13,
    UPIO_FEAT_SWITCH14,
    UPIO_FEAT_SWITCH15,
    UPIO_FEAT_SWITCH16,

    /* Jumpers */
    UPIO_FEAT_JUMPER1,
    UPIO_FEAT_JUMPER2,
    UPIO_FEAT_JUMPER3,
    UPIO_FEAT_JUMPER4,
    UPIO_FEAT_JUMPER5,
    UPIO_FEAT_JUMPER6,
    UPIO_FEAT_JUMPER7,
    UPIO_FEAT_JUMPER8,

    /* Push buttons */
    UPIO_FEAT_BUTTON1,
    UPIO_FEAT_BUTTON2,
    UPIO_FEAT_BUTTON3,
    UPIO_FEAT_BUTTON4,
    UPIO_FEAT_BUTTON5,
    UPIO_FEAT_BUTTON6,
    UPIO_FEAT_BUTTON7,
    UPIO_FEAT_BUTTON8,

    /* General purpose */
    UPIO_FEAT_GENERAL1,
    UPIO_FEAT_GENERAL2,
    UPIO_FEAT_GENERAL3,
    UPIO_FEAT_GENERAL4,
    UPIO_FEAT_GENERAL5,
    UPIO_FEAT_GENERAL6,
    UPIO_FEAT_GENERAL7,
    UPIO_FEAT_GENERAL8,
    UPIO_FEAT_GENERAL9,
    UPIO_FEAT_GENERAL10,
    UPIO_FEAT_GENERAL11,
    UPIO_FEAT_GENERAL12,
    UPIO_FEAT_GENERAL13,
    UPIO_FEAT_GENERAL14,
    UPIO_FEAT_GENERAL15,
    UPIO_FEAT_GENERAL16,
    UPIO_FEAT_GENERAL17,
    UPIO_FEAT_GENERAL18,
    UPIO_FEAT_GENERAL19,
    UPIO_FEAT_GENERAL20,
    UPIO_FEAT_GENERAL21,
    UPIO_FEAT_GENERAL22,
    UPIO_FEAT_GENERAL23,
    UPIO_FEAT_GENERAL24,
    UPIO_FEAT_GENERAL25,
    UPIO_FEAT_GENERAL26,
    UPIO_FEAT_GENERAL27,
    UPIO_FEAT_GENERAL28,
    UPIO_FEAT_GENERAL29,
    UPIO_FEAT_GENERAL30,
    UPIO_FEAT_GENERAL31,
    UPIO_FEAT_GENERAL32,

    UPIO_FEAT_IN_HIGH,          /* Support for input with interrupt on high signal level. */
    UPIO_FEAT_IN_LOW,           /* Support for input with interrupt on low signal level. */
    UPIO_FEAT_IN_RISE,          /* Support for input with interrupt on rising edge. */
    UPIO_FEAT_IN_FALL           /* Support for input with interrupt on falling. */

};
typedef UINT8 tUPIO_FEATURE;


/* Enumeration of UPIO configurations */
enum
{
    UPIO_OUT,
    UPIO_IN,
    UPIO_IN_EDGE,
    UPIO_IN_LEVEL,
    UPIO_NONE
};
typedef UINT8 tUPIO_CONFIG;


/* Enumeration of UPIO types */
enum
{
    UPIO_LED,                   /* LED */
    UPIO_SWITCH,                /* Switch */
    UPIO_JUMPER,                /* Jumper */
    UPIO_BUTTON,                /* Push-button switch */
    UPIO_GENERAL,               /* General purpose I/O */

    UPIO_NUMBER_OF_TYPES
};
typedef UINT8 tUPIO_TYPE;


/* Enumeration of UPIO states */
enum
{
    UPIO_OFF,
    UPIO_ON,
    UPIO_TOGGLE
};
typedef UINT8 tUPIO_STATE;


enum
{
    UPIO_SW_BANK2,
    UPIO_SW_BANK3
};
typedef UINT8 tUPIO_SW_BANK;

/* Jumper masks */
#define UPIO_JUMPER1    0x00000001
#define UPIO_JUMPER2    0x00000002
#define UPIO_JUMPER3    0x00000004
#define UPIO_JUMPER4    0x00000008
#define UPIO_JUMPER5    0x00000010
#define UPIO_JUMPER6    0x00000020
#define UPIO_JUMPER7    0x00000040
#define UPIO_JUMPER8    0x00000080

/* General purpose i/o masks */
#define UPIO_GENERAL1   0x00000001
#define UPIO_GENERAL2   0x00000002
#define UPIO_GENERAL3   0x00000004
#define UPIO_GENERAL4   0x00000008
#define UPIO_GENERAL5   0x00000010
#define UPIO_GENERAL6   0x00000020
#define UPIO_GENERAL7   0x00000040
#define UPIO_GENERAL8   0x00000080
#define UPIO_GENERAL9   0x00000100
#define UPIO_GENERAL10  0x00000200
#define UPIO_GENERAL11  0x00000400
#define UPIO_GENERAL12  0x00000800
#define UPIO_GENERAL13  0x00001000
#define UPIO_GENERAL14  0x00002000
#define UPIO_GENERAL15  0x00004000
#define UPIO_GENERAL16  0x00008000
#define UPIO_GENERAL17  0x00010000
#define UPIO_GENERAL18  0x00020000
#define UPIO_GENERAL19  0x00040000
#define UPIO_GENERAL20  0x00080000
#define UPIO_GENERAL21  0x00100000
#define UPIO_GENERAL22  0x00200000
#define UPIO_GENERAL23  0x00400000
#define UPIO_GENERAL24  0x00800000
#define UPIO_GENERAL25  0x01000000
#define UPIO_GENERAL26  0x02000000
#define UPIO_GENERAL27  0x04000000
#define UPIO_GENERAL28  0x08000000
#define UPIO_GENERAL29  0x10000000
#define UPIO_GENERAL30  0x20000000
#define UPIO_GENERAL31  0x40000000
#define UPIO_GENERAL32  0x80000000

typedef UINT32 tUPIO;

/* LED masks */
#define UPIO_LED1       0x00000001
#define UPIO_LED2       0x00000002
#define UPIO_LED3       0x00000004
#define UPIO_LED4       0x00000008
#define UPIO_LED5       0x00000010
#define UPIO_LED6       0x00000020
#define UPIO_LED7       0x00000040
#define UPIO_LED8       0x00000080

#define UPIO_LED_ALL    (UPIO_LED1 | UPIO_LED2 | UPIO_LED3 | UPIO_LED4 | \
                        UPIO_LED5 | UPIO_LED6 | UPIO_LED7 | UPIO_LED8)


/* Switch masks */
#define UPIO_SWITCH1    0x00000001
#define UPIO_SWITCH2    0x00000002
#define UPIO_SWITCH3    0x00000004
#define UPIO_SWITCH4    0x00000008
#define UPIO_SWITCH5    0x00000010
#define UPIO_SWITCH6    0x00000020
#define UPIO_SWITCH7    0x00000040
#define UPIO_SWITCH8    0x00000080
#define UPIO_SWITCH9    0x00000100
#define UPIO_SWITCH10   0x00000200
#define UPIO_SWITCH11   0x00000400
#define UPIO_SWITCH12   0x00000800
#define UPIO_SWITCH13   0x00001000
#define UPIO_SWITCH14   0x00002000
#define UPIO_SWITCH15   0x00004000
#define UPIO_SWITCH16   0x00008000

/* Push button masks */
#define UPIO_BUTTON1    0x00000001
#define UPIO_BUTTON2    0x00000002
#define UPIO_BUTTON3    0x00000004
#define UPIO_BUTTON4    0x00000008
#define UPIO_BUTTON5    0x00000010
#define UPIO_BUTTON6    0x00000020
#define UPIO_BUTTON7    0x00000040
#define UPIO_BUTTON8    0x00000080

typedef void (tUPIO_CBACK)(tUPIO_TYPE type, tUPIO pio, tUPIO_STATE state);

#ifdef __cplusplus
extern "C" {
#endif

/* API functions for UPIO driver */

/*****************************************************************************
**
** Function         UPIO_Init
**
** Description
**      Initialize the GPIO service.
**      This function is typically called once upon system startup.
**
** Returns          nothing
**
*****************************************************************************/
UDRV_API void UPIO_Init(void *p_cfg);


/*****************************************************************************
**
** Function         UPIO_Set
**
** Description
**      This function sets one or more GPIO devices to the given state.
**      Multiple GPIOs of the same type can be masked together to set more
**      than one GPIO. This function can only be used on types UPIO_LED and
**      UPIO_GENERAL.
**
** Input Parameters:
**      type    The type of device.
**      pio     Indicates the particular GPIOs.
**      state   The desired state.
**
** Output Parameter:
**      None.
**
** Returns:
**      None.
**
*****************************************************************************/
UDRV_API void UPIO_Set(tUPIO_TYPE type, tUPIO pio, tUPIO_STATE state);


/*****************************************************************************
**
** Function         UPIO_Read
**
** Description
**      Read the state of a GPIO. This function can be used for any type of
**      device. Parameter pio can only indicate a single GPIO; multiple GPIOs
**      cannot be masked together.
**
** Input Parameters:
**      Type:	The type of device.
**      pio:    Indicates the particular GUPIO.
**
** Output Parameter:
**      None.
**
** Returns:
**      State of GPIO (UPIO_ON or UPIO_OFF).
**
*****************************************************************************/
UDRV_API tUPIO_STATE UPIO_Read(tUPIO_TYPE type, tUPIO pio);


/*****************************************************************************
**
** Function         UPIO_Config
**
** Description      - Configure GPIOs of type UPIO_GENERAL as inputs or outputs
**                  - Configure GPIOs to be polled or interrupt driven
**
**                  Currently only support polled GPIOs.
**
** Input Parameters:
**      type    The type of device.
**      pio     Indicates the particular GPIOs.
**      config
**      cback
**
** Output Parameter:
**      None.
**
** Returns:
**      None.
**
*****************************************************************************/
UDRV_API void UPIO_Config(tUPIO_TYPE type, tUPIO pio, tUPIO_CONFIG config, tUPIO_CBACK *cback);


/*****************************************************************************
**
** Function         UPIO_Feature
**
** Description
**      Checks whether a feature of the pio API is supported
**
** Input Parameter:
**      feature     The feature to check
**
** Output Parameter:
**      None.
**
** Returns:
**      TRUE if feature is supported, FALSE if it is not.
**
*****************************************************************************/
UDRV_API BOOLEAN UPIO_Feature(tUPIO_FEATURE feature);

#ifdef __cplusplus
}
#endif

#endif  /* ifdef UPIO_H */
