最近的一个项目,需要通过JNI在串口中读取数据,读取数据并返回的代码是用C语言写的。我对C语言很陌生,哪位大神帮帮忙,帮忙撸几句代码。
JNIEXPORT jbyteArray JNICALL Java_com_cem_serialdevdemo_CodeJNI_ReadRfidSerialPort
(JNIEnv env, jobject obj)
{
//大致的思路是:
int rev=0;
unsigned char sof;
unsigned char buf[20];
rev=read(s_fdRfid,&sof,1)
//判断读取到数据时:
//判断读取到的数据与通信协议的格式是否相同
//首先判断前三个字节与通信协议的前三个识别码是否相同
//再判断末尾两个字节与通信协议的后两个识别码是否相同
//再取出中间的四个字节,转换为jbyteArray后返回
//未读到数据或者数据格式不对时:返回"0"
char *fail="0";
jbyteArray byteArray = (*env)->NewByteArray(env, 1/*strlen(cp)/);
(*env)->SetByteArrayRegion(env, byteArray, 0, 1/*strlen(cp)*/, (jbyte *)fail);
return byteArray;
}
学习网站:
系统的学习网站:http://helloxuweifu.iteye.com/blog/1168647
http://www.chinavideo.org/viewthread.php?tid=10870
http://blog.csdn.net/bigapple88/article/details/6756204......
答案就在这里:android中如何通过jni调用c,c++代码
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?
主要还是read()的用法,三个参数,分别是从哪里读,读到哪里,读多少
满足你第一个要求就是if(read(s_fdRfid,&buf[0],1))进去就是读到了,因为read返回实际读到的数据,前提是不管你s_fdRfid是这个句柄是否可以存在且读到东西。后面的就是加加减减的事啦,buf[0]buf[1].....
read返回实际读到的数据数
您好,我看了下之前同事写好的程序,read()返回的不是读到的数据,而是如果读到数据,则返回1,
我这样写,同事说不是很好!
int rev=0,len=0;
unsigned char buf[20];
unsigned char sof;
char *fail="0";
//读取数据
rev=read(s_fdRfid,&sof,1);
if (rev==1 && sof==0xFF) {
rev=read(s_fdRfid,&sof,1);
if (rev==1 && sof==0x03) {
rev=read(s_fdRfid,&sof,1);
if (rev==1 && sof==0x04) {
for(len=0;len<4;len++){
rev=read(s_fdRfid,&sof,1);
buf[len]=sof;
}
rev=read(s_fdRfid,&sof,1);
if (rev==1 && sof==0x00) {
rev=read(s_fdRfid,&sof,1);
if (rev==1 && sof==0x00) {
jbyteArray byteArray = (*env)->NewByteArray(env, len);
(*env)->SetByteArrayRegion(env, byteArray, 0, len, (jbyte *)buf);
return byteArray;
}else{
//失败时返回"0"
jbyteArray byteArray = (*env)->NewByteArray(env, 1/*strlen(cp)*/);
(*env)->SetByteArrayRegion(env, byteArray, 0, 1/*strlen(cp)*/, (jbyte *)fail);
return byteArray;
}
}
}
}
}
能指点一下吗?