天嵌 ARM开发社区

 找回密码
 注册
查看: 5402|回复: 16

E9 android 调用串口收发数据

[复制链接]
qhd_007 发表于 2017-4-7 09:44:23 | 显示全部楼层 |阅读模式
求 E9 android 调用串口收发数据 的资料 或者例程
support_lyl 发表于 2017-4-7 10:13:58 | 显示全部楼层
系统里面有一个serial port软件是可以和串口通信的
 楼主| qhd_007 发表于 2017-4-7 11:57:54 | 显示全部楼层
support_lyl 发表于 2017-4-7 10:13
系统里面有一个serial port软件是可以和串口通信的

但是我需要的是从串口读取数据后,用蓝牙转发出去,那个只是个测试
support_lyl 发表于 2017-4-7 12:10:04 | 显示全部楼层
qhd_007 发表于 2017-4-7 11:57
但是我需要的是从串口读取数据后,用蓝牙转发出去,那个只是个测试

可以参考网上的一些开源项目的
https://github.com/qing3gan/android-serialport-api
 楼主| qhd_007 发表于 2017-4-7 13:12:02 | 显示全部楼层
support_lyl 发表于 2017-4-7 12:10
可以参考网上的一些开源项目的
https://github.com/qing3gan/android-serialport-api

我现在知道可以用JNI方式 也能用AS来使用JNI  但是调用底层的C驱动部分 我不会写
support_lyl 发表于 2017-4-7 13:39:08 | 显示全部楼层
qhd_007 发表于 2017-4-7 13:12
我现在知道可以用JNI方式 也能用AS来使用JNI  但是调用底层的C驱动部分 我不会写

驱动部分是已经做好了的,如果是c应用程序部分的话可以参考这个帖子的代码
http://www.armbbs.net/forum.php? ... &extra=page%3D1
 楼主| qhd_007 发表于 2017-4-7 14:06:55 | 显示全部楼层
support_lyl 发表于 2017-4-7 13:39
驱动部分是已经做好了的,如果是c应用程序部分的话可以参考这个帖子的代码
http://www.armbbs.net/forum. ...

*/JNIEXPORT jobject JNICALL Java_example_hsap_cn_hra_SerialPortJNI_openDev(
        JNIEnv *env, jobject thiz, jstring devnum) {

    LOGD("openDev==>fun in");
    jobject mFileDescriptor;
    struct termios cfg;
    bzero(&cfg, sizeof(cfg));
    char dev[20];
    sprintf(dev, "/dev/tty%s", (*env)->GetStringUTFChars(env, devnum, 0));
    LOGD("openDev==>success");
    LOGD("openDev==>open %s", dev);
    jint fd = open(dev, O_RDWR | O_NOCTTY | O_NDELAY); //O_NOCTTY | O_NDELAY

    LOGD("openDev==>get Serial cfg");
    if (0 != tcgetattr(fd, &cfg)) {
        LOGE("openDev==>get Serial cfg failed");
        LOGD("openDev==>serialPort close");
        close(fd);
        LOGD("openDev==>serialPort closed");
        fd = -1;
    }
    LOGD("openDev==>get Serial cfg end");

    //***************************************
    //以下为cfmakeraw(&cfg);函数设置内容
    //***************************************
    cfg.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL
                     | IXON);
    cfg.c_oflag &= ~OPOST;
    cfg.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
    cfg.c_cflag &= ~(CSIZE | PARENB);
    cfg.c_cflag |= CS8;

    //***************************************
    //以下为cfmakeraw(&cfg);函数设置内容
    //***************************************

    LOGD("openDev==>cfg.c_cflag %x", cfg.c_cflag);
    LOGD("openDev==>cfg.c_iflag %x", cfg.c_iflag);
    LOGD("openDev==>cfg.c_oflag %x", cfg.c_oflag);
    LOGD("openDev==>cfg.c_lflag %x", cfg.c_lflag);

    tcflush(fd, TCIOFLUSH);
    LOGD("setParity==>set Serial cfg");
    if (0 != tcsetattr(fd, TCSANOW, &cfg)) {
        LOGE("setParity==>set tcsetattr parity failed");
        LOGD("setParity==>serialPort close");
        close(fd);
        LOGD("setParity==>serialPort closed");
        fd = -1;
    }
    LOGD("setParity==>set Serial cfg end");

    if (-1 == fd) {
        LOGE("Open Serial Port Failed");
        return NULL;
    } else
        LOGD("Open Serial Port Succeed");

    LOGD("openDev==>open dev %d", fd);

    LOGD("openDev==>fun end");
    mFileDescriptor = createFileDescriptor(env, fd);
    return mFileDescriptor;


是类似这种的 这个是我们之前用迪文板子的时候 他们提供的 我现在把这个直接用在E9上不行  找不到本地库
还有个问题 E9的串口 是dev ttys*  这个么
support_lyl 发表于 2017-4-7 14:11:19 | 显示全部楼层
qhd_007 发表于 2017-4-7 14:06
*/JNIEXPORT jobject JNICALL Java_example_hsap_cn_hra_SerialPortJNI_openDev(
        JNIEnv *env,  ...

e9的串口是ttySAC0~3
 楼主| qhd_007 发表于 2017-4-7 14:15:57 | 显示全部楼层
support_lyl 发表于 2017-4-7 14:11
e9的串口是ttySAC0~3

咱们自己没有android调用jni 来操作板子串口收发的例程么
support_lyl 发表于 2017-4-7 14:33:52 | 显示全部楼层
qhd_007 发表于 2017-4-7 14:15
咱们自己没有android调用jni 来操作板子串口收发的例程么

串口是android平台已经有接口了,所以在网上下载通用的串口apk就可以用的
 楼主| qhd_007 发表于 2017-4-7 14:52:56 | 显示全部楼层
support_lyl 发表于 2017-4-7 14:33
串口是android平台已经有接口了,所以在网上下载通用的串口apk就可以用的

想要的不是串口这种测试工具  想用串口来做一些数据控制协议  这样就必须自己什么写的app能调用串口收发数据 网上的apk只能单纯的收发
support_lyl 发表于 2017-4-7 15:01:19 | 显示全部楼层
qhd_007 发表于 2017-4-7 14:52
想要的不是串口这种测试工具  想用串口来做一些数据控制协议  这样就必须自己什么写的app能调用串口收发 ...

在可以单纯可以收发的基础上再封装一层接口就可以做成自己的数据控制协议了,在java层做可以的
 楼主| qhd_007 发表于 2017-4-7 15:35:23 | 显示全部楼层
support_lyl 发表于 2017-4-7 15:01
在可以单纯可以收发的基础上再封装一层接口就可以做成自己的数据控制协议了,在java层做可以的

麻烦能说详细点么  不太明白
support_lyl 发表于 2017-4-7 16:56:16 | 显示全部楼层
qhd_007 发表于 2017-4-7 15:35
麻烦能说详细点么  不太明白

例如你有一个发送数据的函数接口uart_send(),然后你的协议是需要先发送0x55,0xaa数据头,你就可以写一个出一个新的java方法
vold send(char str)
{
    uart_send(0x55);
    uart_send(0xaa);
    uart_send(str);
}
 楼主| qhd_007 发表于 2017-4-8 09:52:44 | 显示全部楼层
support_lyl 发表于 2017-4-7 16:56
例如你有一个发送数据的函数接口uart_send(),然后你的协议是需要先发送0x55,0xaa数据头,你就可以写一个出 ...

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "cfsetispeed" referenced by "libserial_port.so"...
                                                                                  at java.lang.Runtime.loadLibrary(Runtime.java:361)
                                                                                  at java.lang.System.loadLibrary(System.java:525)
                                                                                  at example.hsap.cn.serialporttest.SerialPort.<clinit>(SerialPort.java:83)
                                                                                  at example.hsap.cn.serialporttest.MainActivity.onCreate(MainActivity.java:16)
                                                                                  at android.app.Activity.performCreate(Activity.java:5133)
                                                                                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
                                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
                                                                                  at android.app.ActivityThread.access$600(ActivityThread.java:141)
这个问题网上说是android.mk文件 但是这个文件是AS自动生成的
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := serial_port
LOCAL_LDFLAGS := -Wl,--build-id
LOCAL_LDLIBS := \
        -llog \

LOCAL_SRC_FILES := \
        F:\andriod\SerialPortTest\app\src\main\jni\example_hsap_cn_serialporttest_SerialPort.c \

LOCAL_C_INCLUDES += F:\andriod\SerialPortTest\app\src\main\jni
LOCAL_C_INCLUDES += F:\andriod\SerialPortTest\app\src\debug\jni

include $(BUILD_SHARED_LIBRARY)
大神 这个问题遇到过么
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-26 16:46 , Processed in 1.062500 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表