# 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文件。