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
分享到:
相关推荐
正点原子Mini开发板 CAN总线通信实验移植CAN总线通信实验的代码。 正点原子Mini开发板 CAN总线通信实验移植。 正点原子Mini开发板 CAN总线通信实验的代码。这段代码是从战舰开发板的程序中移植过来的。硬件上需要另...
正点原子Mini开发板 CAN总线通信实验的代码。这段代码是从战舰开发板的程序中移植过来的。硬件上需要另购一个CAN收发器TJA1054或VP230的模块。RXD与TXD对接在Mini板上即可。有问题欢迎留言
本资源是stm32单片机can总线移植源代码,canopen资料,CANopen 协议 (CANfestival移植需要实现的函数)
Avr单片机 At90can32 CAN 总线通信原代码,使用,可移植
STM32单片机CAN经典例程,程序参数配置、注释清晰,代码移植性高。
行 CAN2.0B 规范并提供一个直接从 SJA1000 独立 CAN 控制器的软件移植路径 扩充特性 其中包括增强型验收滤波器 支持系统维护 诊断 系统优化以及接收 具有非常广泛的应用领域 了 P8xC591 与CAN 相关的应用项目 要想...
附件为汽车电子设计中常用的基于CAN总线的UDS诊断服务协议栈C语言源代码,实际工程中采用的是STM32F4xx系列单片机和ucosII系统搭建的测试环境。此段代码已经在实际工程中验证通过,可以移植到任何采用C编程的项目中...
1.包含一个EPP-CAN板的Linux操作系统驱动,先用make命令编译目标代码(cangate),再运行install,安装该驱动。 2.一个EPP-CAN接口板的驱动及调试程序,包含所有的源代码。操作系统是Windows 98,开发平台:VC。可以...
can总线移植测试代码,jni代码和java代码
将CAN总线的数据截取到内存buff上,利用DMA+UART方式将buff数据发送至电脑。 本资源可以学习总线驱动(CAN,LIN,SPI,I2C,UART),DMA,及OS相关知识(task的创建及运行等)。也可以用于项目base。
主要用于实现CAN2总线上的收发,无任何过滤,用于检验CAN信号,适合新手入门。 只要是在CAN2的信号线上都可以实现,不局限于开发板,本人移植到F103亲测成功!
| |--7,CAN学习资料---------------------------------------CAN总线学习资料 | |--8,WAV文件格式说明-----------------------------------WAV文件格式学习参考资料 | |--9,AVI学习资料----------------------...
7.4.2 CAN总线硬件特征182 7.4.3 CAN控制器驱动184 实验7.4 CAN总线实验186 第8章 嵌入式系统硬件设计基础与标准189 8.1 嵌入式系统的硬件组成189 8.1.1 嵌入式微处理器189 8.1.2 存储器189 8.1.3 ...
2.2.2 CAN总线接口 2.2.3 RS485总线接口 2.2.4 其他总线接口 2.3 硬件设计要点 2.3.1 电磁兼容问题 2.3.2 信号完整性 2.3.3 电源完整性 第3章 开发环境 3.1 开发环境及搭建 3.1.1 常见开发环境 3.1.2 IAR EWARM安装 ...
随着电动车窗的普及和CAN总线广泛应用,车窗智能控制系统开发面临市场机遇。介绍基于CAN总线轿车车窗智能控制系统的设计方案。该系统通过检测车窗电机电流实现防夹功能,同时增加在发生意外事故时车窗的强制打开和...
通过CAN总线接口保留了系统功能扩展的可能性 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 1、该...
了解 U-Boot-1.3.1 的代码结构,掌握其移植方法。 【实验环境】 1、Ubuntu 7.0.4发行版 2、u-boot-1.3.1 3、FS2410平台 4、交叉编译器 arm-softfloat-linux-gnu-gcc-3.4.5 【实验步骤】 一、建立自己的平台...
介绍:CANopen是一种架构在控制局域网路(Controller Area Network, CAN)上的高层通讯协定,包括通讯子协定及设备子协定常在嵌入式系统中使用,也是工业控制常用到的一种现场总线。CANopen 协议坚持开放、免费、非...
鉴于这些差别,240x系列DSP的CAN总线模块的代码不能直接应用到eCAN总线上。但是,eCAN模块和240x系列DSP的CAN模块的寄存器(两者都有的寄存器)在结构和功能上都是相同的。这样即便是代码不能完全兼容,在移植上还是...
FPGA实现CAN总线控制器源码.rar FPGA语音通信平台设计实例.zip IP camera的开源系统.zip LCD IP CORE.zip LCD12864 在Spartan-3E实现代码.zip PCI Express IP核应用参考设计.zip PCI Express标准概述.zip PCIE DMA...