您的位置:首页 > 编程语言

can 总线移植--------代码

2012-03-25 11:40 183 查看
JNI:

#include <jni.h>

#include <stdio.h>

#define LOG_TAG "FLEXCAN"

#include <android/log.h>

JNIEXPORT jobject JNICALL 

Java_com_liujun_can_dump(JNIEnv *env,jobject obj,
jobject frame)

{

/*
struct frame_struct {
long can_id;
int dlc;
jchar buf[8];
};

frame_struct *mFrame ;

mFrame = (frame_struct *)malloc(sizeof(frame_struct));

*/
jint data[] = {11,22,33,44,55};
jint can_id = 10;
jint dlc = 5;

// mFrame->buf = data;

jclass frame_cls = (*env)->FindClass(env,
"com/liujun/frame");
if(frame_cls == NULL)
return NULL;
jmethodID setID = (*env)->GetMethodID(env,frame_cls,
"setID","(I)V");
if(setID == NULL)
return NULL;
jmethodID setBuf = (*env)->GetMethodID(env,frame_cls,
"setBuf","([I)V");
if(setBuf == NULL)
return NULL;

jobject myFrame = frame;
if(myFrame == NULL)
return NULL;

(*env)->CallVoidMethod(env,myFrame,setID,can_id);
jintArray arr;
arr = (*env)->NewIntArray(env,5);
if(arr == NULL)
return NULL;
(*env)->SetIntArrayRegion(env,arr,0,5,data);
__android_log_print(ANDROID_LOG_INFO,"JNI","11111");
(*env)->CallVoidMethod(env,myFrame,setBuf,arr);
__android_log_print(ANDROID_LOG_INFO,"JNI","22222");
(*env)->DeleteLocalRef(env,arr);
return myFrame;

}

JNIEXPORT jint JNICALL

Java_com_liujun_can_send(JNIEnv *env,jobject obj,jint dlc, jintArray arr)

{
int BUF_SIZE = (int)dlc;
jint i;
jint buf[BUF_SIZE];
__android_log_print(ANDROID_LOG_INFO,"JNI","buf size : %d\n",BUF_SIZE);  
(*env)->GetIntArrayRegion(env, arr, 0, BUF_SIZE, buf);
for(i=0;i<BUF_SIZE;i++)
__android_log_print(ANDROID_LOG_INFO,"JNI","buf[%d] = %d",(int)i,(int)(buf[i]));  
return 0;

}

jint JNI_OnLoad(JavaVM* vm,void* reserved)

{
void *venv;

// LOGI("JNI_OnLoad!");

if((*vm)->GetEnv(vm, (void**)&venv, JNI_VERSION_1_4) != JNI_OK) {

// LOGE("ERROR: GetEnv failed");
return -1;
}

return JNI_VERSION_1_4;

}

java

package com.liujun;

import android.R.integer;

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

import android.widget.Toast;

public class can extends Activity {
private static final String TAG = "can";
private Button bt_send = null;
private Button bt_dump = null;
private TextView tv = null;
private Context mContext = null;
private frame mFrame ;
static {
System.loadLibrary("can");
}

private native int send(int dlc, int buf[]);
private native frame dump(frame mFrame);

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        mContext = this;

        

        bt_send = (Button)findViewById(R.id.send);

        bt_dump = (Button)findViewById(R.id.dump);

        tv = (TextView)findViewById(R.id.textView);

        

        bt_send.setOnClickListener(new MyButtonListener());

        bt_dump.setOnClickListener(new MyButtonListener());    

    }

    

    class MyButtonListener implements OnClickListener{

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId()==R.id.send){
Toast.makeText(mContext, "sned!!", Toast.LENGTH_SHORT).show();
       int buf[] = {1,2,3,4,5};
       send(buf.length,buf);
       
}
if(v.getId()==R.id.dump){
Toast.makeText(mContext, "dump!!", Toast.LENGTH_SHORT).show();
mFrame = new frame();
Log.d(TAG, "3");
       mFrame = dump(mFrame);

// int data[] = {11,22,33,4,55};

// mFrame.setBuf(data);
       if(mFrame == null)
       
Log.d(TAG, "4");
       Log.d(TAG, "1");
       int _data[] = mFrame.getBuf();
       Log.d(TAG, "2");

       tv.setText("id: "+mFrame.getID()+
       
"\n1."+_data[0]+"\n2."+_data[1]+
       
"\n3."+_data[2]+"\n4."+_data[3]+
       
"\n5."+_data[4]+"\n6."+_data[5]+
       
"\n7."+_data[6]+"\n8."+_data[7]);
}
}

    }

}

下载:

http://download.csdn.net/detail/zhangjie201412/4170702
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jni android struct button null bt