Android中java调用C的实现jniNDK

Android.mk代码:

LOCAL_PATH := $(call my-dir)


include $(CLEAR_VARS)
LOCAL_LDLIBS    := -lm -llog 
LOCAL_MODULE    := myndk
LOCAL_SRC_FILES := myndk.c


include $(BUILD_SHARED_LIBRARY)

myndk.c代码(获取crc校验):

#include <jni.h>
#include <termios.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <android/log.h>
#include <termios.h>
#include <unistd.h>
//#include <syspes.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdio.h>
#include <jni.h>
#include <errno.h>


//#include "devapi.h"
//#include "SerialPort.h"


#include "android/log.h"




static const char *TAG="serial_port";
#define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, TAG, fmt, ##args)


typedef unsigned char INT8U ;
typedef unsigned short int INT16U ;
//extern "C"
JNIEXPORT jshort JNICALL Java_com_pda_ndktest_NDKtest_getcrc16
  (JNIEnv *env, jclass thiz, jshort len, jbyteArray array)
{
// cal_crc16_ext( 0xffff,p +1 ,idx -1)  ;
//
// INT16U cal_crc16_ext(INT16U initval ,INT8U *ptr,  INT16U len)
// {
// short crc;
// short i,j;
// char val;
// crc=0;
// crc= initval ;
//    for(i=0;i<len;i++)
//    {
// val =ptr[i];
//        crc^=val ;
//        for(j=0;j<8;j++)
//        {
//         if(crc&0x0001)
//               crc=(crc>>1)^0x8408;
//         else
//               crc=(crc>>1);
//        }
//    }
// return(crc);
// }
//short cal_crc16_ext(byte[]ptr,  short len) //for RD5112 protocol


// short crc = 0;
// short i,j;
// char val;
// crc=0;
// crc= 0xffff ;
//    for(i=0;i<len;i++)
//    {
// val =datas[i];
//        crc^=val ;
//        for(j=0;j<8;j++)
//        {
//         if(crc&0x0001)
//               crc=(crc>>1)^0x8408;
//         else
//               crc=(crc>>1);
//        }
//    }
// return(crc);


// INT16U cal_crc16_ext(INT16U initval ,INT8U *ptr,  INT16U len) //for RD5112 protocol
// {
// 07FFF00100
char buf[128];
jbyte *jby = (*env)->GetByteArrayElements(env, array, 0);
    memcpy(buf, jby, len);
    (*env)->ReleaseByteArrayElements(env, array, jby, 0);
    LOGE("len(len = %x)",len);
INT16U crc;
INT16U i,j;
INT8U val;
crc=0;
crc= 0xffff ;
   for(i=0;i<len;i++)
   {
    LOGE("crc(crc = %x)",crc);






val = buf[i];
LOGE("val(val = %x)",val);
//        crc^=val ;//这行代码错误
crc = crc^val;
       for(j=0;j<8;j++)
       {
        if(crc&0x0001)
              crc=(crc>>1)^0x8408;
        else
              crc=(crc>>1);
       }
   }
   LOGE("crc(crc = %x)",crc);
return(crc);
// }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值