kozeng 2015-06-09 07:28 采纳率: 0%
浏览 4524

JNI 返回 jbytearray类型

JNIEXPORT jint JNICALL Java_com_serial_android_serialnative_jni_serial_read(JNIEnv *env, jobject obj , jint fd, jbyteArray buffer, jint size, jint rcv_wait){

// LOGD("serial_read");
// char buf[256];
// char savedata[256];
int len = 0;
int i = 0;
int j;
int ret = 0;
// jbyteArray array = env->NewByteArray(size);
// jbyte *bytes = env->GetByteArrayElements(array, 0);
// memset(savedata, 0, 256);
// tcflush(serialFd, TCIOFLUSH);

jbyte* buf = (jbyte *)malloc(size);

jbyte* savedata = (jbyte *)malloc(size);
memset(buf, 0, 256);
memset(savedata, 0, 256);
if (!buf) {
LOGD("malloc buf error");
return -1;
}
while (1)
{
len = read(serialFd, buf, size);
if(len < 0)
{
LOGD("read error");
break;
}else if (len == 0)
{
LOGD("read end or no data");
break;
}else if (len > 0){
for (j = 0;j < len ;j++ )
{
savedata[i] = buf[j];
i++;
}

}
LOGD("read number = %d", len);
}

if (savedata[0] == 0x2e)
{
ret = check_packege(savedata); //校验
LOGD("check_sum = %d", ret);
}
if (ret == 1)
{
env->SetByteArrayRegion(buffer, 0, size, savedata);
for (j = 0;j < 6 ; j++)
{
LOGD("read = %02x", buffer[j]);
}
}

free(buf);
free(savedata);
return 1;

savedata的数据都是正确的, 但是执行下面函数SetByteArrayRegion后, buffer就是全0了。 Android framework里面frameworks\base\core\jni\android_hardware_SerialPort.cpp的标准串口操作就是这样的, 我都是cpy了代码了,但还是不行,不指点为什么。
env->SetByteArrayRegion(buffer, 0, size, savedata);

  • 写回答

1条回答 默认 最新

  • qq_24631289 2022-02-24 18:15
    关注

    为什么

    评论

报告相同问题?

悬赏问题

  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图