Difference between revisions of "APITestPage"

From FriendlyELEC WiKi
Jump to: navigation, search
(updated by API)
(updated by API)
Line 33: Line 33:
 
::{| class="wikitable"
 
::{| class="wikitable"
 
|-
 
|-
| style="background: PaleTurquoise; color: black" colspan="2"| '''Android8示例'''         
+
| 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"| '''Android8示例'''         
+
| 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

English

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

等等, 接口包括I2C, SPI, GPIO常用的接口。
Smart4418SDK+OLED

4 支持的开发板

5 开源Android示例

所有硬件访问的示例程序均已集成到 Android 的源代码当中,位于 Android7.1.2 和 Android8.1 源代码的以下目录:vendor/friendlyelec/apps,也可以单独网上下载,下表中列出各个 Demo 的源代码地址:

5.1 Android8.1

Android8.1示例
Serial Port

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/SerialPortDemo

GPIO

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/GPIO_LED_Demo

ADC

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/ADCDemo

PWM

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/PWMDemo

I2C

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/I2C_LCD1602_Demo

RTC

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/RTC_Demo

Watch dog

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/WatchDogDemo

SPI

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/SPI_OLED_Demo

5.2 Android7.1.2

Android7.1.2示例
Serial Port

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/SerialPortDemo

GPIO

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/GPIO_LED_Demo

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

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/I2C_LCD1602_Demo

RTC

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/RTC_Demo

Watch dog

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/WatchDogDemo

SPI

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/SPI_OLED_Demo


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硬件库为串口提供的开发接口如下:


7.2 GPIO

7.3 ADC

7.4 PWM

7.5 I2C

7.6 RTC

7.7 Watch dog

7.8 SPI

8 开发资料