blob: b075b967399d1ae33dcca6edec2c3e57df016c45 [file] [log] [blame]
/*
*
* Copyright (c) 2020 Project CHIP Authors
* Copyright (c) 2018 Nest Labs, Inc.
* All rights reserved.
*
* 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.
*/
#pragma once
#include <platform_stdlib.h>
#ifdef CONFIG_PLATFORM_8710C
#include "gpio_api.h"
#include "rtl8710c_pin_name.h"
#else
typedef enum
{
PORT_A = 0,
PORT_B = 1,
} GPIO_PORT;
typedef enum
{
PIN_INPUT = 0,
PIN_OUTPUT
} PinDirection;
typedef enum
{
PullNone = 0, // IN HIGHZ
PullUp = 1,
PullDown = 2,
PullDefault = PullNone
} PinMode;
/* (((port)<<5)|(pin)) */
typedef enum
{
PA_0 = (PORT_A << 5 | 0),
PA_1 = (PORT_A << 5 | 1),
PA_2 = (PORT_A << 5 | 2),
PA_3 = (PORT_A << 5 | 3),
PA_4 = (PORT_A << 5 | 4),
PA_5 = (PORT_A << 5 | 5),
PA_6 = (PORT_A << 5 | 6),
PA_7 = (PORT_A << 5 | 7),
PA_8 = (PORT_A << 5 | 8),
PA_9 = (PORT_A << 5 | 9),
PA_10 = (PORT_A << 5 | 10),
PA_11 = (PORT_A << 5 | 11),
PA_12 = (PORT_A << 5 | 12),
PA_13 = (PORT_A << 5 | 13),
PA_14 = (PORT_A << 5 | 14),
PA_15 = (PORT_A << 5 | 15),
PA_16 = (PORT_A << 5 | 16),
PA_17 = (PORT_A << 5 | 17),
PA_18 = (PORT_A << 5 | 18),
PA_19 = (PORT_A << 5 | 19),
PA_20 = (PORT_A << 5 | 20),
PA_21 = (PORT_A << 5 | 21),
PA_22 = (PORT_A << 5 | 22),
PA_23 = (PORT_A << 5 | 23),
PA_24 = (PORT_A << 5 | 24),
PA_25 = (PORT_A << 5 | 25),
PA_26 = (PORT_A << 5 | 26),
PA_27 = (PORT_A << 5 | 27),
PA_28 = (PORT_A << 5 | 28),
PA_29 = (PORT_A << 5 | 29),
PA_30 = (PORT_A << 5 | 30),
PA_31 = (PORT_A << 5 | 31),
PB_0 = (PORT_B << 5 | 0),
PB_1 = (PORT_B << 5 | 1),
PB_2 = (PORT_B << 5 | 2),
PB_3 = (PORT_B << 5 | 3),
PB_4 = (PORT_B << 5 | 4),
PB_5 = (PORT_B << 5 | 5),
PB_6 = (PORT_B << 5 | 6),
PB_7 = (PORT_B << 5 | 7),
PB_8 = (PORT_B << 5 | 8),
PB_9 = (PORT_B << 5 | 9),
PB_10 = (PORT_B << 5 | 10),
PB_11 = (PORT_B << 5 | 11),
PB_12 = (PORT_B << 5 | 12),
PB_13 = (PORT_B << 5 | 13),
PB_14 = (PORT_B << 5 | 14),
PB_15 = (PORT_B << 5 | 15),
PB_16 = (PORT_B << 5 | 16),
PB_17 = (PORT_B << 5 | 17),
PB_18 = (PORT_B << 5 | 18),
PB_19 = (PORT_B << 5 | 19),
PB_20 = (PORT_B << 5 | 20),
PB_21 = (PORT_B << 5 | 21),
PB_22 = (PORT_B << 5 | 22),
PB_23 = (PORT_B << 5 | 23),
PB_24 = (PORT_B << 5 | 24),
PB_25 = (PORT_B << 5 | 25),
PB_26 = (PORT_B << 5 | 26),
PB_27 = (PORT_B << 5 | 27),
PB_28 = (PORT_B << 5 | 28),
PB_29 = (PORT_B << 5 | 29),
PB_30 = (PORT_B << 5 | 30),
PB_31 = (PORT_B << 5 | 31),
VBAT_MEAS = (0x7 << 5 | 2),
AD_0 = PB_4, // CH0
AD_1 = PB_5, // CH1
AD_2 = PB_6, // CH2
AD_3 = PB_7, // CH3
AD_4 = PB_1, // CH4
AD_5 = PB_2, // CH5
AD_6 = PB_3, // CH6
AD_7 = VBAT_MEAS, // CH7
// Not connected
NC = (uint32_t) 0xFFFFFFFF
} PinName;
typedef struct gpio_s
{
PinName pin;
} gpio_t;
#endif
typedef struct gpio_s gpio_t;
extern "C" void gpio_init(gpio_t * obj, PinName pin);
extern "C" uint32_t gpio_set(PinName pin);
extern "C" void gpio_mode(gpio_t * obj, PinMode mode);
extern "C" void gpio_dir(gpio_t * obj, PinDirection direction);
extern "C" void gpio_write(gpio_t * obj, int value);
extern "C" int gpio_read(gpio_t * obj);
class LEDWidget
{
public:
void Init(PinName gpioNum);
void Set(bool state);
private:
PinName mGPIONum;
bool mState;
void DoSet(bool state);
};