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

原创 2012年03月25日 11:40:18

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

相关文章推荐

Android Jni调用浅述

声明:欢迎转载,转载时请注明出处! http://blog.csdn.net/flydream0/article/details/7371692 1 简述     JNI是Java N...

s5p4418 android 驱动 hal 应用之led 串口 rs485 can总线应用(JNI层)

本篇文章用于记录Android开发学习过程中的一些理解和遇到的一些问题解决,以防忘记,好记性不如烂博客,O(∩_∩)O。 本篇相对于前面介绍的led操作增加了串口、485和can的应用。对于led的驱...

imx6q sebrasd can总线移植指南

在imx6q的3.14.52的BSP中已经有了CAN总线的驱动,驱动的源代码在drivers\net\can\flexcan.c 虽然imx6q的BSP里面已经支持了CAN总线的驱动,但是在针对SAB...

CAN总线代码

  • 2015年08月08日 10:25
  • 541KB
  • 下载

CAN总线发送与接收函数

初始化CAN模块 void INIT_CAN0(void) { if(CAN0CTL0_INITRQ==0) // 查询是否进入初始化状态 CAN0CTL0_INIT...

汽车车内CAN总线 网络安全分析及防御措施

汽车车内CAN总线网络安全分析及防御措施智能化和信息化的发展,汽车电气系统变得日益复杂,当前汽车普遍拥有数十个电子控制单元(ECU),一辆高级轿车运行代码接近1亿行,而这些车载信息是通过车内总线实现互...

STM32 CAN总线应用程序,调试通过仅供参考

1、打开STM32 CAN系统工作时钟        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, EN...

用于汽车电子的CAN、LIN、MOST总线

未来汽车电子的整个网络将是CAN、LIN、MOST三网合一的整体。MOST负责音视频,CAN负责重要的电子控制单元,如发动机、ABS、安全气囊等,LIN负责次要的电子控制单元,如门窗、车灯等。 ...
  • yuyin86
  • yuyin86
  • 2014年04月26日 02:43
  • 2848

基于CAN总线智能建筑监控系统的通信协议设计(一)

摘要:从研究CAN2.OB总线规范入手,介绍了CAN总线规范的硬件基础,分析了CAN总线报文格式,通过对报文标识符的分配,设计了应用于该系统的通信协议,并给出了软件设计流程,较好地解决了智能建筑监控系...

CAN总线 远程帧理解和应用

简单的说:如果A需要B节点向你发送数据!A可以用B节点的ID,发送一个remote frame,B收到A ID 的 Remote Frame 之后就发送数据给A!发送的数据就是数据帧!远程帧就像命令,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:can 总线移植--------代码
举报原因:
原因补充:

(最多只允许输入30个字)