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

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
    关注

    为什么

    评论

报告相同问题?

悬赏问题

  • ¥20 求计算赫斯特(Hurst)指数
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大