/* mbed Microcontroller Library
 * Copyright (c) 2006-2013 ARM Limited
 *
 * 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 MBED_PINNAMES_H
#define MBED_PINNAMES_H

#include "cmsis.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef enum {
    PIN_INPUT,
    PIN_OUTPUT
} PinDirection;

#define PORT_SHIFT  12
#define PIN_SHIFT   8

typedef enum {
    // LPC1114 Pin Names (PORT[15:12] + PIN[11:8] + IOCON offset[7:0])

    P0_0  = (0 << PORT_SHIFT) | (0  << PIN_SHIFT) | 0x0c,
    P0_1  = (0 << PORT_SHIFT) | (1  << PIN_SHIFT) | 0x10,
    P0_2  = (0 << PORT_SHIFT) | (2  << PIN_SHIFT) | 0x1c,
    P0_3  = (0 << PORT_SHIFT) | (3  << PIN_SHIFT) | 0x2c,
    P0_4  = (0 << PORT_SHIFT) | (4  << PIN_SHIFT) | 0x30,
    P0_5  = (0 << PORT_SHIFT) | (5  << PIN_SHIFT) | 0x34,
    P0_6  = (0 << PORT_SHIFT) | (6  << PIN_SHIFT) | 0x4c,
    P0_7  = (0 << PORT_SHIFT) | (7  << PIN_SHIFT) | 0x50,
    P0_8  = (0 << PORT_SHIFT) | (8  << PIN_SHIFT) | 0x60,
    P0_9  = (0 << PORT_SHIFT) | (9  << PIN_SHIFT) | 0x64,
    P0_10 = (0 << PORT_SHIFT) | (10 << PIN_SHIFT) | 0x68,
    P0_11 = (0 << PORT_SHIFT) | (11 << PIN_SHIFT) | 0x74,

    P1_0  = (1 << PORT_SHIFT) | (0  << PIN_SHIFT) | 0x78,
    P1_1  = (1 << PORT_SHIFT) | (1  << PIN_SHIFT) | 0x7c,
    P1_2  = (1 << PORT_SHIFT) | (2  << PIN_SHIFT) | 0x80,
    P1_3  = (1 << PORT_SHIFT) | (3  << PIN_SHIFT) | 0x90,
    P1_4  = (1 << PORT_SHIFT) | (4  << PIN_SHIFT) | 0x94,
    P1_5  = (1 << PORT_SHIFT) | (5  << PIN_SHIFT) | 0xa0,
    P1_6  = (1 << PORT_SHIFT) | (6  << PIN_SHIFT) | 0xa4,
    P1_7  = (1 << PORT_SHIFT) | (7  << PIN_SHIFT) | 0xa8,
    P1_8  = (1 << PORT_SHIFT) | (8  << PIN_SHIFT) | 0x14,
    P1_9  = (1 << PORT_SHIFT) | (9  << PIN_SHIFT) | 0x38,
    P1_10 = (1 << PORT_SHIFT) | (10 << PIN_SHIFT) | 0x6c,
    P1_11 = (1 << PORT_SHIFT) | (11 << PIN_SHIFT) | 0x98,

    P2_0  = (2 << PORT_SHIFT) | (0  << PIN_SHIFT) | 0x08,
    P2_1  = (2 << PORT_SHIFT) | (1  << PIN_SHIFT) | 0x28,
    P2_2  = (2 << PORT_SHIFT) | (2  << PIN_SHIFT) | 0x5c,
    P2_3  = (2 << PORT_SHIFT) | (3  << PIN_SHIFT) | 0x8c,
    P2_4  = (2 << PORT_SHIFT) | (4  << PIN_SHIFT) | 0x40,
    P2_5  = (2 << PORT_SHIFT) | (5  << PIN_SHIFT) | 0x44,
    P2_6  = (2 << PORT_SHIFT) | (6  << PIN_SHIFT) | 0x00,
    P2_7  = (2 << PORT_SHIFT) | (7  << PIN_SHIFT) | 0x20,
    P2_8  = (2 << PORT_SHIFT) | (8  << PIN_SHIFT) | 0x24,
    P2_9  = (2 << PORT_SHIFT) | (9  << PIN_SHIFT) | 0x54,
    P2_10 = (2 << PORT_SHIFT) | (10 << PIN_SHIFT) | 0x58,
    P2_11 = (2 << PORT_SHIFT) | (11 << PIN_SHIFT) | 0x70,
   
    P3_0  = (3 << PORT_SHIFT) | (0  << PIN_SHIFT) | 0x84,
    P3_1  = (3 << PORT_SHIFT) | (1  << PIN_SHIFT) | 0x88,
    P3_2  = (3 << PORT_SHIFT) | (2  << PIN_SHIFT) | 0x9c,
    P3_3  = (3 << PORT_SHIFT) | (3  << PIN_SHIFT) | 0xac,
    P3_4  = (3 << PORT_SHIFT) | (4  << PIN_SHIFT) | 0x3c,
    P3_5  = (3 << PORT_SHIFT) | (5  << PIN_SHIFT) | 0x48,

    // mbed DIP Pin Names (CQ board)
    p4  = P0_0,
    p5  = P0_9,
    p6  = P0_8,
    p7  = P0_6,
    p8  = P1_5,
    p9  = P1_7,
    p10 = P1_6,
    p11 = P0_7,
    p12 = P1_0,
    p13 = P1_1,
    p14 = P1_2,
    p15 = P0_11,
    p16 = P1_0,
    p17 = P1_1,
    p18 = P1_2,
    p19 = P1_3,
    p20 = P1_4,
    p21 = P0_10,
    p22 = P0_2,
    p23 = P0_11,
    p24 = P0_2,
    p25 = P1_8,
    p26 = P1_9,
    p27 = P0_4,
    p28 = P0_5,
    p29 = P0_3,
    p30 = P0_1,

    // Other mbed Pin Names
    LED1 = P1_5,
    LED2 = P0_7,
    LED3 = P1_5,
    LED4 = P0_7,

    USBTX = P1_7,
    USBRX = P1_6,

    // mbed DIP Pin Names (LPCXpresso LPC1114)
    xp4  = P0_0,
    xp5  = P0_9,
    xp6  = P0_8,
    xp7  = P2_11,
    xp8  = P0_2,
    xp9  = P1_7,
    xp10 = P1_6,
    xp11 = P0_7,
    xp12 = P2_0,
    xp13 = P2_1,
    xp14 = P2_2,
    xp15 = P0_11,
    xp16 = P1_0,
    xp17 = P1_1,
    xp18 = P1_2,
    xp19 = P1_3,
    xp20 = P1_4,
    xp21 = P1_5,
    xp22 = P1_8,
    xp23 = P0_6,
    xp24 = P0_10,
    xp25 = P3_0,
    xp26 = P3_1,
    xp27 = P3_2,

    xp29 = P3_3,
    xp30 = P2_10,
    xp31 = P2_9,
    xp32 = P2_8,
    xp33 = P2_7,
    xp34 = P2_6,
    xp35 = P2_5,
    xp36 = P2_4,
    xp37 = P2_3,
    xp38 = P1_11,
    xp39 = P1_10,
    xp40 = P1_9,
    xp41 = P0_4,
    xp42 = P0_5,
    xp43 = P0_3,
    xp44 = P0_1,

    // Other mbed Pin Names
    xLED1 = P0_7,
	
	// DIP Package Names
	
	dp1  = P0_8,
	dp2  = P0_9,
	dp3  = P0_10,
	dp4  = P0_11,
	dp5  = P0_5,
	dp6  = P0_6,
	dp9  = P1_0,
	dp10 = P1_1,
	dp11 = P1_2,
	dp12 = P1_3,
	dp13 = P1_4,
	dp14 = P1_5,
	dp15 = P1_6,
	dp16 = P1_7,
	dp17 = P1_8,
	dp18 = P1_9,
	dp23 = P0_0,
	dp24 = P0_1,
	dp25 = P0_2,
	dp26 = P0_3,
	dp27 = P0_4,
	dp28 = P0_7,

    // Not connected
    NC = (int)0xFFFFFFFF,
} PinName;

typedef enum {
    CHANNEL0 = WAKEUP0_IRQn,
    CHANNEL1 = WAKEUP1_IRQn,
    CHANNEL2 = WAKEUP2_IRQn,
    CHANNEL3 = WAKEUP3_IRQn,
    CHANNEL4 = WAKEUP4_IRQn,
    CHANNEL5 = WAKEUP5_IRQn,
    CHANNEL6 = WAKEUP6_IRQn,
    CHANNEL7 = WAKEUP7_IRQn
} Channel;

typedef enum {
    PullUp = 2,
    PullDown = 1,
    PullNone = 0,
    Repeater = 3,
    OpenDrain = 4,
    PullDefault = PullDown
} PinMode;

#ifdef __cplusplus
}
#endif

#endif
