# UKASdk
**Repository Path**: ukiot/ukasdk
## Basic Information
- **Project Name**: UKASdk
- **Description**: UKASDK是一个Android C++ SDK,提供GPIO、RS232/RS485串口和V4L2摄像头操作的底层接口。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-09-29
- **Last Updated**: 2025-09-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# UKASDK - Android C++ SDK
UKASDK是一个Android C++ SDK,提供GPIO、RS232/RS485串口和V4L2摄像头操作的底层接口。
## 功能特性
- **GPIO操作**: 支持GPIO引脚的导出、方向设置、值读写等操作
- **串口通信**:
- 支持RS232串口通信
- 支持RS485串口通信(带使能管脚自动控制)
- 可配置波特率、数据位、校验位、停止位等参数
- 自动控制RS485使能管脚(DE/RE引脚)的收发切换
- **摄像头捕获**: 支持V4L2摄像头设备的图像捕获,包括格式设置、流控制等
- **JNI接口**: 提供完整的Java接口,方便Android应用调用
## 项目结构
```
ukasdk/
├── include/ # 头文件目录
│ ├── ukasdk.h # 主SDK头文件
│ ├── gpio/ # GPIO相关头文件
│ ├── serial/ # 串口相关头文件
│ ├── camera/ # 摄像头相关头文件
│ └── jni/ # JNI相关头文件
├── src/ # 源文件目录
│ ├── ukasdk.cpp # 主SDK实现
│ ├── gpio/ # GPIO实现
│ ├── serial/ # 串口实现
│ ├── camera/ # 摄像头实现
│ └── jni/ # JNI实现
├── java/ # Java接口
│ └── com/ukiot/ukasdk/ # Java SDK类
├── examples/ # 示例代码
├── CMakeLists.txt # CMake构建文件
├── Android.mk # NDK构建文件
├── Application.mk # NDK应用配置
└── README.md # 本文件
```
## 编译方法
### 使用CMake(推荐)
```bash
mkdir build
cd build
cmake ..
make
```
### 使用NDK
```bash
ndk-build
```
## 使用方法
### 1. 初始化SDK
```java
UKASDK sdk = UKASDK.getInstance();
int result = sdk.initialize();
if (result != UKASDK.SUCCESS) {
// 处理初始化失败
}
```
### 2. GPIO操作示例
```java
// 导出GPIO引脚
sdk.gpioExport(18);
// 设置为输出模式
sdk.gpioSetDirection(18, UKASDK.GPIO_OUTPUT);
// 设置高电平
sdk.gpioSetValue(18, UKASDK.GPIO_HIGH);
// 读取GPIO值
int value = sdk.gpioGetValue(18);
// 取消导出
sdk.gpioUnexport(18);
```
### 3. 串口操作示例
#### RS232串口通信
```java
// 打开RS232串口(不使用使能管脚)
int handle = sdk.serialOpen("/dev/ttyS0");
// 配置串口参数
sdk.serialConfig(handle, UKASDK.BAUD_115200, 8,
UKASDK.PARITY_NONE, UKASDK.STOP_BITS_ONE);
// 发送数据
byte[] data = "Hello".getBytes();
sdk.serialWrite(handle, data);
// 读取数据
byte[] received = sdk.serialRead(handle, 1000);
// 关闭串口
sdk.serialClose(handle);
```
#### RS485串口通信(带使能管脚)
```java
// 打开RS485串口(使用GPIO 18作为使能管脚)
int enablePin = 18; // DE/RE控制引脚
int handle = sdk.serialOpen("/dev/ttyS1", enablePin);
// 配置串口参数
sdk.serialConfig(handle, UKASDK.BAUD_9600, 8,
UKASDK.PARITY_NONE, UKASDK.STOP_BITS_ONE);
// 发送数据(使能管脚自动控制)
byte[] data = "RS485 Message".getBytes();
sdk.serialWrite(handle, data); // 发送时自动设置使能管脚为HIGH,发送完成后设置为LOW
// 读取数据(使能管脚保持LOW状态)
byte[] received = sdk.serialRead(handle, 1000);
// 动态更改使能管脚
sdk.serialSetEnablePin(handle, 19);
// 关闭串口(自动清理使能管脚GPIO)
sdk.serialClose(handle);
```
### 4. 摄像头操作示例
```java
// 打开摄像头
int handle = sdk.cameraOpen("/dev/video0");
// 设置格式
sdk.cameraSetFormat(handle, 640, 480, 0, 30);
// 开始捕获
sdk.cameraStartCapture(handle);
// 捕获一帧
byte[] frame = sdk.cameraCaptureFrame(handle);
// 停止捕获
sdk.cameraStopCapture(handle);
// 关闭摄像头
sdk.cameraClose(handle);
```
### 5. 清理资源
```java
sdk.cleanup();
```
## 错误代码
| 代码 | 常量 | 描述 |
|------|------|------|
| 0 | SUCCESS | 操作成功 |
| -1 | INVALID_PARAMETER | 无效参数 |
| -2 | DEVICE_NOT_FOUND | 设备未找到 |
| -3 | PERMISSION_DENIED | 权限被拒绝 |
| -4 | OPERATION_FAILED | 操作失败 |
| -5 | DEVICE_BUSY | 设备忙 |
| -6 | TIMEOUT | 超时 |
## 权限要求
在Android应用中使用此SDK需要以下权限:
```xml
```
对于GPIO和串口操作,通常需要root权限或系统级权限。
## 注意事项
1. **权限**: GPIO和串口操作通常需要root权限
2. **设备路径**: 根据实际硬件修改设备路径(如/dev/video0, /dev/ttyS0等)
3. **线程安全**: SDK内部已实现线程安全,可在多线程环境中使用
4. **资源管理**: 使用完毕后务必调用相应的关闭函数释放资源
5. **错误处理**: 所有操作都会返回错误代码,请检查返回值
## 示例程序
项目包含以下示例程序:
- `examples/GPIOExample.java`: GPIO操作示例
- `examples/SerialExample.java`: 串口通信示例(包含RS485使能管脚演示)
- `examples/RS485Example.java`: RS485专用通信示例
- `examples/CameraExample.java`: 摄像头捕获示例
## 技术支持
如有问题或建议,请联系技术支持团队。
## 许可证
本项目采用MIT许可证,详见LICENSE文件。