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 = ; if(jniEnv == NULL) {
jniEnv = env;
} jclass class;
jfieldID send_instruction_record;
jfieldID receive_instruction_record;
class = (*env)->GetObjectClass(env, thiz);
if (class == NULL)
{
return -;
}
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 -;
} unsigned char* rcmdReq = malloc(*sizeof(jchar));
unsigned char* rcmdRes = malloc(*sizeof(jchar)); if(readSerialData(, , , &dataTest, , rcmdReq, rcmdRes) == ){ 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 ;
}
(*env)->SetObjectField(env, thiz, send_instruction_record, jstr1);
(*env)->SetObjectField(env, thiz, receive_instruction_record, jstr2); return dataTest;
} return -;
} 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[];
unsigned char rcmdRes[]; return readSerialData(devFd, unitno, addr, data, , rcmdReq[], rcmdRes[]);
} 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[];
unsigned char rcmdRes[]; return writeSerialData(devFd, unitno, addr, data, , rcmdReq[], rcmdRes[]);
} 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 = ;
int m = ;
int n = ;
unsigned char test[] = ""; //{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[n] = test2[n];
// } return OK; /*
* Test over
*/

JNI 从C文件向Java文件传递多个参数的更多相关文章

  1. jni.h头文件详解二

    作者:左少华 博客:http://blog.csdn.net/shaohuazuo/article/details/42932813 转载请注明出处:http://blog.csdn.net/shao ...

  2. jni.h头文件详解一

    1.jni.h头文件路径: /usr/lib/jvm/jdk_1.6.0_43/include/jni.h 2.jni.h头文件组成分析图: 3.下面通过上图进行分析讲解jni.h头文件. 一. jn ...

  3. 【转】 jni.h头文件详解(二)

    原文网址:http://blog.csdn.net/shaohuazuo/article/details/42932813 作者:左少华 博客:http://blog.csdn.net/shaohua ...

  4. JNI调用native方法出现 java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod()异常的解决办法

    昨天拿到JNI的Android工程Demo,然后把demo整合到开发的主线工程上,发现调用JNI方法一直抛同一个异常 java.lang.UnsatisfiedLinkError: XXXclass. ...

  5. Android的NDK开发(5)————Android JNI层实现文件的read、write与seek操作

    1. 在Android的Java层实现文件的读写操作是非常简单的,可以参看之前写的博文:http://blog.csdn.net/conowen/article/details/7296121 在JN ...

  6. Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)

     Eclipse.MinGW.JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法) 问题背景:之前的JNI编程都是基于And ...

  7. JNI通过线程c回调java层的函数

    1.参看博客:http://www.jianshu.com/p/e576c7e1c403 Android JNI 篇 - JNI回调的三种方法(精华篇) 2.参看博客: JNI层线程回调Java函数关 ...

  8. Linux学习心得之 jnlp的文件和java应用程序安全设置

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 jnlp的文件和java应用程序安全设置 1.前言2. jnlp的文件打开3.java应用程 ...

  9. 使用XML文件和Java代码控制UI界面

    Android推荐使用XML文件设置UI界面,然后用Java代码控制逻辑部分,这体现了MVC思想. MVC全名是Model View Controller,是模型(model)-视图(view)-控制 ...

随机推荐

  1. Ubuntu下VIM(GVIM)环境配置

    GVIM安装( Ubuntu自带VIM ): 通过应用商店安装或者通过以下安装. sudo apt-get install vim-gnome GVIM配置: 在 家目录 ( ~/ ) 下建立 .vi ...

  2. 数据库开发 MySQL

    MySQL是Web世界中使用最广泛的数据库服务器.SQLite的特点是轻量级.可嵌入,但不能承受高并发访问,适合桌面和移动应用.而MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也 ...

  3. linux环境下安装php扩展

    本文只提供源码安装的方法(已安装pcntl为例) 其他方法请参考:http://doc3.workerman.net/appendices/install-extension.html 1.利用php ...

  4. web前端必须掌握的localStorage

    先自我介绍一下,本人男,27岁,单身,web前端程序员一枚,长期潜伏在幕后,只学不教(貔貅么?),其实主要是工作太忙了,每天忙到11点左右,没有时间写东西,洗洗就睡了.最近赶巧,后端那边出技术瓶颈了, ...

  5. 这 30 类 CSS 选择器,你必须理解!

    CSS 选择器是一种模式,用于选择需要添加样式的元素.平时使用最多也是最简单的就是 #id..class 和标签选择器,在 CSS 中还有很多更加强大更加灵活的选择方式,尤其是在 CSS3 中,增加了 ...

  6. Linux grep和find的区别

    这是两个不同的命令,关于grep:Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressi ...

  7. 使用ajax和history.pushState无刷新改变页面URL onpopstate(转)

    Javascript代码 var htmlData1 = $.ajax(    {    url: "/getXXXResponse",    async: false }).re ...

  8. NET Portability Analyzer

    NET Portability Analyzer 分析迁移dotnet core 大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易 ...

  9. WebApp开发:ajax请求跨域问题的解决

    服务端:PHP 客户端:Andorid, HTML5, jQuery, ajax 现象:本想通过jQuery的ajax功能从服务器取回数据存到手机的缓存里,结果总是错误,后来想到可能是跨域问题,所以查 ...

  10. visual studio 2010 出现问题,不能设置断点调试了,一运行就未响应,然后程序退出

    经网络查找原因,怀疑是插件问题: 解决方案: 1.工具->扩展管理 2.禁用或卸载VS2010的插件(扩展程序)