From 9cc3577dbff4f5aa5f312d337965abec190c7d6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz?= Date: Wed, 14 Sep 2022 17:44:20 +0200 Subject: [PATCH] Add driver for Radxa Rock Pi 4B Plus (#1918) * Add driver for Radxa Rock Pi 4B Plus * make the class as public * fix formatting * add `Board specific drivers` to readme * driver name and link to source * Fix markdown error Co-authored-by: Patrick Grawehr --- .../Gpio/Drivers/RockPi4BPlusDriver.cs | 38 +++++++++++++++++++ src/devices/Gpio/README.md | 11 ++++++ 2 files changed, 49 insertions(+) create mode 100644 src/devices/Gpio/Drivers/RockPi4BPlusDriver.cs diff --git a/src/devices/Gpio/Drivers/RockPi4BPlusDriver.cs b/src/devices/Gpio/Drivers/RockPi4BPlusDriver.cs new file mode 100644 index 00000000..3954c405 --- /dev/null +++ b/src/devices/Gpio/Drivers/RockPi4BPlusDriver.cs @@ -0,0 +1,38 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; + +namespace Iot.Device.Gpio.Drivers +{ + /// + /// A GPIO driver for the Rock Pi 4B Plus. + /// + /// + /// SoC: Rockchip RK3399 + /// + public class RockPi4bPlusDriver : Rk3399Driver + { + private static readonly int[] _pinNumberConverter = new int[] + { + -1, -1, MapPinNumber(2, 'A', 7), -1, MapPinNumber(2, 'B', 0), -1, MapPinNumber(2, 'B', 3), + MapPinNumber(4, 'C', 4), -1, MapPinNumber(4, 'C', 3), MapPinNumber(4, 'C', 2), MapPinNumber(4, 'A', 3), + MapPinNumber(4, 'C', 6), -1, MapPinNumber(4, 'C', 5), MapPinNumber(4, 'D', 2), -1, MapPinNumber(4, 'D', 4), + MapPinNumber(1, 'B', 0), -1, MapPinNumber(1, 'A', 7), MapPinNumber(4, 'D', 5), MapPinNumber(1, 'B', 1), + MapPinNumber(1, 'B', 2), -1, -1, MapPinNumber(2, 'A', 0), MapPinNumber(2, 'A', 1), MapPinNumber(2, 'B', 2), + -1, MapPinNumber(2, 'B', 1), MapPinNumber(3, 'C', 0), MapPinNumber(2, 'B', 4), -1, MapPinNumber(4, 'A', 5), + MapPinNumber(4, 'A', 4), MapPinNumber(4, 'D', 6), MapPinNumber(4, 'A', 6), -1, MapPinNumber(4, 'A', 7) + }; + + /// + protected override int PinCount => 40; + + /// + protected override int ConvertPinNumberToLogicalNumberingScheme(int pinNumber) + { + int num = _pinNumberConverter[pinNumber]; + + return num != -1 ? num : throw new ArgumentException($"Board (header) pin {pinNumber} is not a GPIO pin on the {GetType().Name} device.", nameof(pinNumber)); + } + } +} diff --git a/src/devices/Gpio/README.md b/src/devices/Gpio/README.md index 38656e23..e6c74f55 100644 --- a/src/devices/Gpio/README.md +++ b/src/devices/Gpio/README.md @@ -7,6 +7,17 @@ This project contains some **full function(PULL-UP, PULL-DOWN)** generic GPIO dr * For Allwinner SoCs: [SunxiDriver](Drivers/Sunxi/README.md) * For Rockchip SoCs: [RockchipDriver](Drivers/Rockchip/README.md) +## Board specific drivers + +| Board | Driver | +| :-: | :-: | +| Orange Pi 4 | [OrangePi4Driver](./Drivers/OrangePi4Driver.cs) | +| Orange Pi Lite | [OrangePiLiteDriver](./Drivers/OrangePiLiteDriver.cs) | +| Orange Pi Lite 2 | [OrangePiLite2Driver](./Drivers/OrangePiLite2Driver.cs) | +| Orange Pi Zero | [OrangePiZeroDriver](./Drivers/OrangePiZeroDriver.cs) | +| Orange Pi Zero 2 | [OrangePiZero2Driver](./Drivers/OrangePiZero2Driver.cs) | +| Rock Pi 4B Plus | [RockPi4bPlusDriver](./Drivers/RockPi4bPlusDriver.cs) | + ## Benchmarks The test uses different GPIO drivers to quickly switch the state of GPIO, and uses an oscilloscope to measure the average frequency of GPIO externally. -- GitLab