Difference between revisions of "APITestPage"
(updated by API) |
(updated by API) |
||
Line 33: | Line 33: | ||
::{| class="wikitable" | ::{| class="wikitable" | ||
|- | |- | ||
− | | style="background: PaleTurquoise; color: black" colspan="2"| ''' | + | | style="background: PaleTurquoise; color: black" colspan="2"| '''Android8.1示例''' |
|- | |- | ||
|Serial Port | |Serial Port | ||
Line 71: | Line 71: | ||
::{| class="wikitable" | ::{| class="wikitable" | ||
|- | |- | ||
− | | style="background: PaleTurquoise; color: black" colspan="2"| ''' | + | | style="background: PaleTurquoise; color: black" colspan="2"| '''Android7.1.2示例''' |
|- | |- | ||
|Serial Port | |Serial Port | ||
Line 106: | Line 106: | ||
|- | |- | ||
|} | |} | ||
+ | |||
+ | |||
+ | ==如何在自已的程序中使用硬件访问库== | ||
+ | ===集成libfriendlyarm-hardware.so到你的工程目录=== | ||
+ | 硬件访问库的so文件和java接口定义文件位于以下仓库,请克隆到本地: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | git clone https://github.com/friendlyarm/android-libfriendlyarm-hardware.git | ||
+ | </syntaxhighlight> | ||
+ | 然后,根据以下步骤操作:<br /> | ||
+ | * 复制 libs 目录下的所有内容到你的工程目录下; | ||
+ | * 在你的Android项目的src目录下创建com/friendlyarm目录,将java/AndroidSDK目录拷贝到此处; | ||
+ | 最后的目录的结构看上去像这样了的:<br /> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | YourProject/ | ||
+ | ├── AndroidManifest.xml | ||
+ | ├── libs | ||
+ | │ ├── arm64-v8a | ||
+ | │ │ └── libfriendlyarm-hardware.so | ||
+ | │ └── armeabi | ||
+ | │ └── libfriendlyarm-hardware.so | ||
+ | ├── src | ||
+ | │ └── com | ||
+ | │ └── friendlyarm | ||
+ | │ ├── AndroidSDK | ||
+ | │ │ ├── BoardType.java | ||
+ | │ │ ├── FileCtlEnum.java | ||
+ | │ │ ├── GPIOEnum.java | ||
+ | │ │ ├── HardwareControler.java | ||
+ | │ │ ├── SPIEnum.java | ||
+ | │ │ ├── SPI.java | ||
+ | │ │ └── WatchDogEnum.java | ||
+ | </syntaxhighlight> | ||
+ | 主要的接口都集中在 HardwareControler.java 中,其它都是一些常量定义,使用以下方法导入它们: | ||
+ | <syntaxhighlight lang="java"> | ||
+ | import com.friendlyarm.AndroidSDK.HardwareControler; | ||
+ | import com.friendlyarm.AndroidSDK.SPIEnum; | ||
+ | import com.friendlyarm.AndroidSDK.GPIOEnum; | ||
+ | import com.friendlyarm.AndroidSDK.FileCtlEnum; | ||
+ | import com.friendlyarm.AndroidSDK.BoardType; | ||
+ | </syntaxhighlight> | ||
+ | ===让你的app拥有system权限=== | ||
+ | 需要将你的 app提升至 system权限,否则会无法访问硬件,需要修改你的 app 的 AndroidManifest.xml 和 Android.mk这两个文件,同时,你的app需要到Android源码中编译,参考示例的方式部署即可。 | ||
+ | ====修改AndroidManifest.xml==== | ||
+ | 在应用程序的AndroidManifest.xml中的manifest节点中加入以下属性: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | android:sharedUserId="android.uid.system" | ||
+ | </syntaxhighlight> | ||
+ | ====修改Android.mk==== | ||
+ | 编写一个Android.mk文件(最简单的方法就是拷贝示例中的Android.mk文件),修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行: | ||
+ | <syntaxhighlight lang="java"> | ||
+ | LOCAL_PATH:= $(call my-dir) | ||
+ | include $(CLEAR_VARS) | ||
+ | |||
+ | LOCAL_SRC_FILES := $(call all-subdir-java-files) | ||
+ | |||
+ | LOCAL_PACKAGE_NAME := 你的项目名 | ||
+ | |||
+ | LOCAL_CERTIFICATE := platform | ||
+ | LOCAL_MODULE_TAGS := optional | ||
+ | LOCAL_CFLAGS := -lfriendlyarm-hardware | ||
+ | |||
+ | include $(BUILD_PACKAGE) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==RK3399平台Android硬件资源的程序访问== | ||
+ | ===Serial Port=== | ||
+ | 目前可用的串口是UART4,设备名称为/dev/ttyS4,其他串口资源如下表所示,你也可以使用USB转串口来扩展: | ||
+ | ::{| class="wikitable" | ||
+ | |- | ||
+ | |串口设备 || 串口资源占用情况 | ||
+ | |- | ||
+ | |UART0 || 已被蓝牙占用 | ||
+ | |- | ||
+ | |UART1 || 已被千兆以太网占用 | ||
+ | |- | ||
+ | |UART2 || 已被作为调试串口 | ||
+ | |- | ||
+ | |UART3 || 已被千兆以太网占用 | ||
+ | |- | ||
+ | |UART4 || 空闲,设备名称为 /dev/ttyS4 (注:需使用20180618之后的ROM) | ||
+ | |} | ||
+ | |||
+ | Android硬件库为串口提供的开发接口如下: | ||
+ | |||
+ | |||
+ | ===GPIO=== | ||
+ | |||
+ | ===ADC=== | ||
+ | |||
+ | ===PWM=== | ||
+ | |||
+ | ===I2C=== | ||
+ | |||
+ | ===RTC=== | ||
+ | |||
+ | ===Watch dog=== | ||
+ | |||
+ | ===SPI=== | ||
+ | |||
==开发资料== | ==开发资料== | ||
* 中文API文档:https://github.com/friendlyarm/AndroidHardwareAccess/blob/master/友善电子Android硬件开发指南.pdf | * 中文API文档:https://github.com/friendlyarm/AndroidHardwareAccess/blob/master/友善电子Android硬件开发指南.pdf |
Revision as of 07:55, 20 October 2018
Contents
1 简介
友善电子开发了一个名为libfriendlyarm-hardware.so的函数库,用于Android应用程序访问开发板上的硬件资源,该函数库基于Android-NDK技术开发,提供便利的硬件访问接口,开发者无需掌握过多的嵌入式知识便可使用,有效提高开发进度。
本篇文章仅适用于RK3399开发板,包括 NanoPi-NEO4, NanoPi-M4 和 NanoPC-T4。
其他平台也有相应的支持,请移步这里查看:Android Thing: Android Hardware Programming
2 支持如下RK3399官方Android BSP
- Android 7.1.2
- Android 8.1
3 支持如下RK3399硬件资源
- Serial Port
- GPIO
- ADC
- PWM
- I2C
- RTC
- Watch dog
- SPI
4 支持的开发板
- NanoPi-NEO4
- NanoPi-M4
- NanoPC-T4
- 其他开发板请移步这里查看:Android Thing: Android Hardware Programming
5 开源Android示例
所有硬件访问的示例程序均已集成到 Android 的源代码当中,位于 Android7.1.2 和 Android8.1 源代码的以下目录:vendor/friendlyelec/apps,也可以单独网上下载,下表中列出各个 Demo 的源代码地址:
5.1 Android8.1
5.2 Android7.1.2
Android7.1.2示例 Serial Port GPIO ADC https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/ADCDemo
PWM https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/PWMDemo
I2C RTC Watch dog SPI
6 如何在自已的程序中使用硬件访问库
6.1 集成libfriendlyarm-hardware.so到你的工程目录
硬件访问库的so文件和java接口定义文件位于以下仓库,请克隆到本地:
git clone https://github.com/friendlyarm/android-libfriendlyarm-hardware.git
然后,根据以下步骤操作:
- 复制 libs 目录下的所有内容到你的工程目录下;
- 在你的Android项目的src目录下创建com/friendlyarm目录,将java/AndroidSDK目录拷贝到此处;
最后的目录的结构看上去像这样了的:
YourProject/
├── AndroidManifest.xml
├── libs
│ ├── arm64-v8a
│ │ └── libfriendlyarm-hardware.so
│ └── armeabi
│ └── libfriendlyarm-hardware.so
├── src
│ └── com
│ └── friendlyarm
│ ├── AndroidSDK
│ │ ├── BoardType.java
│ │ ├── FileCtlEnum.java
│ │ ├── GPIOEnum.java
│ │ ├── HardwareControler.java
│ │ ├── SPIEnum.java
│ │ ├── SPI.java
│ │ └── WatchDogEnum.java
主要的接口都集中在 HardwareControler.java 中,其它都是一些常量定义,使用以下方法导入它们:
import com.friendlyarm.AndroidSDK.HardwareControler; import com.friendlyarm.AndroidSDK.SPIEnum; import com.friendlyarm.AndroidSDK.GPIOEnum; import com.friendlyarm.AndroidSDK.FileCtlEnum; import com.friendlyarm.AndroidSDK.BoardType;
6.2 让你的app拥有system权限
需要将你的 app提升至 system权限,否则会无法访问硬件,需要修改你的 app 的 AndroidManifest.xml 和 Android.mk这两个文件,同时,你的app需要到Android源码中编译,参考示例的方式部署即可。
6.2.1 修改AndroidManifest.xml
在应用程序的AndroidManifest.xml中的manifest节点中加入以下属性:
android:sharedUserId="android.uid.system"
6.2.2 修改Android.mk
编写一个Android.mk文件(最简单的方法就是拷贝示例中的Android.mk文件),修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行:
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_PACKAGE_NAME := 你的项目名 LOCAL_CERTIFICATE := platform LOCAL_MODULE_TAGS := optional LOCAL_CFLAGS := -lfriendlyarm-hardware include $(BUILD_PACKAGE)
7 RK3399平台Android硬件资源的程序访问
7.1 Serial Port
目前可用的串口是UART4,设备名称为/dev/ttyS4,其他串口资源如下表所示,你也可以使用USB转串口来扩展:
串口设备 串口资源占用情况 UART0 已被蓝牙占用 UART1 已被千兆以太网占用 UART2 已被作为调试串口 UART3 已被千兆以太网占用 UART4 空闲,设备名称为 /dev/ttyS4 (注:需使用20180618之后的ROM)
Android硬件库为串口提供的开发接口如下: