|
*/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* 这个么 |
|