之前根据我的知识和见识范围,以为Android程序都是用JAVA写的,当然接触过QT,知道也是跨平台的额,可以移植到Android上去跑,也没有具体试过。直到前段时间,一个巴西的小哥,跟我讲他用C#写的android程序。然后就有了第一次听说Xamarin这个东东。我以为听听就结束了,我们这里都是用C#写桌面程序的,也有专门的人负责这事。万万没想到,这小哥要买我们的机器,还要用他们自己的程序,增加的他们没用过的功能就是串口通信。他拿着我写的JAVA下的demo程序翻了半个月还是没调通。
他跟我讲串口打开没问题,不报错,就是不能读到数据。我看了看代码也没发觉出什么错误,于是就搭建开发环境,下载他的C#解决方案,单步调试,最后发现其实因为JAVA下用到了.so文件,在C#下调用总是出错,他就参考一个文章给改了。错虽然不报了,其实改乱了并没有真正能打开串口设备文件,所以也就读不到输入输出流了。
好不容易找到一篇人家写的参考了重新编译了个.so文件(编译方法看我另一篇文章,用android studio编的),我也没明白到底为啥要这样改,跟java下面写的接口不一样:
首先是C代码:
JNIEXPORT jint JNICALL openSerialPort
(char *path, int baudrate, int flags)
{
int fd;
speed_t speed;
jobject mFileDescriptor;
/* Check arguments */
{
speed = getBaudrate(baudrate);
if (speed == -1) {
/* TODO: throw an exception */
LOGE("Invalid baudrate");
return NULL;
}
}
/* Opening device */
{
jboolean iscopy;
LOGD("Opening serial port %s with flags 0x%x", path, O_RDWR | flags);
fd = open(path, O_RDWR | flags);
LOGD("open() fd = %d", fd);
if (fd == -1)
{
/* Throw an ex