/******************************************************************************
 *
 *  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.
 *
 ******************************************************************************/

/******************************************************************************
 *
 *  Definitions for UPIO driver
 *
 ******************************************************************************/
#ifndef UPIO_H
#define UPIO_H

#include "bt_target.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 */
