JNI 从C文件向Java文件传递多个参数
2015-09-25 16:41
357 查看
JNI C主函数
JNI C代码
#include <jni.h> #include <string.h> #include <android/log.h> #include "Provider.h" #include "libCold_chain.h" JNIEnv* jniEnv; jint Java_com_panasonic_communicationtest_StateConfirmFragment_openSerialDevice( JNIEnv* env, jobject thiz, jstring devName ) { const char* devName_id = (*env)->GetStringUTFChars(env, devName, NULL); if(jniEnv == NULL) { jniEnv = env; } return openSerialDevice(devName_id); } jint Java_com_panasonic_communicationtest_StateConfirmFragment_readSerialData( JNIEnv* env, jobject thiz ) { long dataTest = 0; if(jniEnv == NULL) { jniEnv = env; } jclass class; jfieldID send_instruction_record; jfieldID receive_instruction_record; class = (*env)->GetObjectClass(env, thiz); if (class == NULL) { return -1; } send_instruction_record = (*env)->GetFieldID(env, class, "send_instruction_str", "Ljava/lang/String;"); receive_instruction_record = (*env)->GetFieldID(env, class, "receive_instruction_str", "Ljava/lang/String;"); if (send_instruction_record == NULL || receive_instruction_record == NULL) { return -1; } unsigned char* rcmdReq = malloc(9*sizeof(jchar)); unsigned char* rcmdRes = malloc(10*sizeof(jchar)); if(readSerialData(1, 1, 80, &dataTest, 500, rcmdReq, rcmdRes) == 0){ unsigned char* str1 = "hello fan sen!"; unsigned char* str2 = rcmdReq; jstring jstr1 = (*env)->NewStringUTF(env, str1); jstring jstr2 = (*env)->NewStringUTF(env, str2); __android_log_print(ANDROID_LOG_INFO, "ComTest", rcmdReq); if(jstr1 == NULL || jstr2 == NULL){ return 2; } (*env)->SetObjectField(env, thiz, send_instruction_record, jstr1); (*env)->SetObjectField(env, thiz, receive_instruction_record, jstr2); return dataTest; } return -1; } jint Java_com_panasonic_communicationtest_StateConfirmFragment_closeSerialDevice( JNIEnv* env, jobject thiz, jint devFd ) { if(jniEnv == NULL) { jniEnv = env; } return closeSerialDevice(devFd); } // =========================================== jint Java_com_panasonic_communicationtest_ParameterSettingFragment_openSerialDevice( JNIEnv* env, jobject thiz, jstring devName ) { const char* devName_id = (*env)->GetStringUTFChars(env, devName, NULL); if(jniEnv == NULL) { jniEnv = env; } return openSerialDevice(devName_id); } jint Java_com_panasonic_communicationtest_ParameterSettingFragment_readSerialData( JNIEnv* env, jobject thiz, jint devFd, jchar unitno, jshort addr, jlong data ) { if(jniEnv == NULL) { jniEnv = env; } unsigned char rcmdReq[10]; unsigned char rcmdRes[10]; return readSerialData(devFd, unitno, addr, data, 500, rcmdReq[10], rcmdRes[10]); } jint Java_com_panasonic_communicationtest_ParameterSettingFragment_writeSerialData( JNIEnv* env, jobject thiz, jint devFd, jchar unitno, jshort addr, jlong data ) { if(jniEnv == NULL) { jniEnv = env; } unsigned char rcmdReq[10]; unsigned char rcmdRes[10]; return writeSerialData(devFd, unitno, addr, data, 500, rcmdReq[10], rcmdRes[10]); } jint Java_com_panasonic_communicationtest_ParameterSettingFragment_closeSerialDevice( JNIEnv* env, jobject thiz, jint devFd ) { if(jniEnv == NULL) { jniEnv = env; } return closeSerialDevice(devFd); } //-------------------------------------- jstring Java_com_panasonic_communicationtest_StateConfirmFragment_getStringFromJNI( JNIEnv* env, jobject thiz, jstring address ) { const char* address_id = (*env)->GetStringUTFChars(env, address, NULL); if(jniEnv == NULL) { jniEnv = env; } // return getString(address_id); return (*env)->NewStringUTF(env, address_id); } jstring Java_com_panasonic_communicationtest_ParameterSettingFragment_getStringFromJNI( JNIEnv* env, jobject thiz, jstring address ) { const char* address_id = (*env)->GetStringUTFChars(env, address, NULL); if(jniEnv == NULL) { jniEnv = env; } return getString(address_id); } jstring Java_com_panasonic_communicationtest_ParameterSettingFragment_setStringIntoJNI( JNIEnv* env, jobject thiz, jstring address ) { const char* address_id = (*env)->GetStringUTFChars(env, address, NULL); if(jniEnv == NULL) { jniEnv = env; } return setString(address_id); }
JNI C代码
extern long readSerialData(long devFd, unsigned char unitno, unsigned short addr, long *data, long timeout, unsigned char* rcmdReq, unsigned char* rcmdRes) { /* * Test by fansen */ *data = 1; int m = 0; int n = 0; unsigned char test[10] = "0123456789"; //{0xff,0x1f,0x07,0x08}; strcpy(rcmdReq, test); // rcmdReq = test; // for(m = 0; m <= 8; m++){ // rcmdReq[m] = test[m]; // LOGI("test1: %c", test[m]); // } LOGI(rcmdReq); // char test2[10] = {0xff,0x1f,0x07,0x08,0x00,0x87,0x00,0x01}; // __android_log_print(ANDROID_LOG_INFO, "ComTest", "Communication Test 2"); // for(n = 0; n <= 9; n++){ // rcmdReq = test2 ; // } return OK; /* * Test over */
相关文章推荐
- OGNL表达式struts2标签“%,#,$”
- [Java] java中的异常处理
- java ThreadPool判断是否所有任务都完成的方法
- 菜鸟使用SSM框架搭建web服务器实现登录功能(Spring+SpringMVC+Mybatis)
- Java学习笔记【内部类】
- java中sleep和wait的异同
- Java JDBC方式连接Access数据库
- java Static 的使用。
- eclipse中文乱码
- 使用EMMA统计Java代码功能测试覆盖率
- Java之Concurrent(并发)包
- Javaweb 学习笔记之文件上传和下载-01
- java web 编解码
- java.lang.NumberFormatException 错误及解决办法
- java web开发 高并发处理
- test7.11
- maven安装以及eclipse配置maven
- javaweb project create
- spring-3-mvc-hello-world-example
- javaEE__jsp自定义标签