Android java开发can通信 接收和发送can 信息 标准/扩展帧
1.在工程中添加 CAN 开发库 candev.jar
在工程中添加 CAN 开发库 candev.jar 一下是 方法参数介绍和调用 ⚫ 在程序头部添加引用: import com.cosofteck.Can; import com.cosofteck.CanFrame; ⚫ 控制 CAN0 接口方法 public static int SetBitrate(int bitrate) 功能:设置 CAN 比特率。 参数: bitrate:CAN 比特率值。 返回值:成功返回 0,失败返回-1。 public static int Start() 功能:启动 CAN 服务。 返回值:成功返回 0,失败返回-1。 public static int Stop() 功能:停止 CAN 服务。 返回值:成功返回 0,失败返回-1。 public static int Restart() 功能:重启 CAN 服务。 返回值:成功返回 0,失败返回-1。 public static int RestartDelay(int delay) 功能:延时重启 CAN 服务。 参数: delay:重启 CAN 服务延时的时间,单位毫秒(ms)。 返回值:成功返回 0,失败返回-1。 public static int SetMode(int mode, boolean on) 功能:设置控制模式。 参数: mode:控制模式。0:loopback;1:listen-only;2:triple-sampling; 3:one-shot;4:berr-reporting。 on:true 打开,false 关闭。 返回值:成功返回 0,失败返回-1。 public static int SendInit(int family, int type, int proto) 功能:发送初始化。 参数:使用默认值(29,3,1) 返回值:成功返回 0,失败返回-1。 public static int SendData(byte[] data, int id, boolean rtr, boolean extended) 功能:发送数据。 参数: data:要发送的数据数组。 id:发送帧 ID 号。 rtr:是否发送远程帧格式。 Extended:是否发送扩展帧类型。 返回值:返回发送数据结构的字节数,返回-1 总线错误,返回 0 连接断开。 public static int SendClose() 功能:关闭发送。 返回值:成功返回 0,失败返回-1。 public static int ReadInit(int family, int type, int proto) 功能:接收初始化。 参数:使用默认值(29,3,1) 返回值:成功返回 0,失败返回-1。 public static CanFrame ReadData() 功能:接收数据。 返回值:返回接收到的数据。 public static int ReadClose() 功能:关闭接收。 返回值:成功返回 0,失败返回-1。 ⚫ 控制 CAN1 接口方法 public static int SetBitrateOne(int bitrate) 功能:设置 CAN 比特率。 参数: bitrate:CAN 比特率值。 返回值:成功返回 0,失败返回-1。 public static int StartOne () 功能:启动 CAN 服务。 返回值:成功返回 0,失败返回-1。 public static int StopOne () 功能:停止 CAN 服务。 返回值:成功返回 0,失败返回-1。 public static int RestartOne () 功能:重启 CAN 服务。 返回值:成功返回 0,失败返回-1。 public static int RestartDelayOne (int delay) 功能:延时重启 CAN 服务。 参数: delay:重启 CAN 服务延时的时间,单位毫秒(ms)。 返回值:成功返回 0,失败返回-1。 public static int SetModeOne (int mode, boolean on) 功能:设置控制模式。 参数: mode:控制模式。0:loopback;1:listen-only;2:triple-sampling; 3:one-shot;4:berr-reporting。 on:true 打开,false 关闭。 返回值:成功返回 0,失败返回-1。 public static int SendInitOne (int family, int type, int proto) 功能:发送初始化。 参数:使用默认值(29,3,1) 返回值:成功返回 0,失败返回-1。 public static int SendDataOne (byte[] data, int id, boolean rtr, boolean extended) 功能:发送数据。 参数: data:要发送的数据数组。 id:发送帧 ID 号。 rtr:是否发送远程帧格式。 Extended:是否发送扩展帧类型。 返回值:返回发送数据结构的字节数,返回-1 总线错误,返回 0 连接断开。 public static int SendCloseOne () 功能:关闭发送。 返回值:成功返回 0,失败返回-1。 public static int ReadInitOne (int family, int type, int proto) 功能:接收初始化。 参数:使用默认值(29,3,1) 返回值:成功返回 0,失败返回-1。 public static CanFrame ReadDataOne () 功能:接收数据。 返回值:返回接收到的数据。 public static int ReadCloseOne () 功能:关闭接收。 返回值:成功返回 0,失败返回-1。 ⚫ 数据结构 接收到的数据保存为 CanFrame 对象,包含 3 个数据成员: int mId; 接收到的帧 ID 号。 byte mDlc; 接收到的帧长度。 byte[] mData; 接收到的帧数据。
2.在代码中实际使用
//设置波特率 Can.SetBitrate(500000); //启动 有返回值 System.out.println("can启动" + Can.Start()); //进行读取的初始化 System.out.println("发送初始化" + Can.SendInit(29, 3, 1)); System.out.println("读取初始化" + Can.ReadInit(29, 3, 1));
3.设置can的屏蔽和遮罩
long CAN_EFF_FLAG = 0x80000000; long CAN_SFF_MASK = 0x000007FF; long CAN_EFF_MASK = 0xFFFFFFFF;
4.读取
new Thread() { @Override public void run() { while (true) { CanFrame canFrame = Can.ReadData(); int id; if ((canFrame.mId & CAN_EFF_FLAG) == 0) { Log.d(TAG, "Standard Frame id = " + (canFrame.mId & CAN_SFF_MASK)); id = (int) (canFrame.mId & CAN_SFF_MASK); } else { Log.d(TAG, "Extended Frame id = " + (canFrame.mId & CAN_EFF_MASK)); id = (int) (canFrame.mId & CAN_EFF_MASK); } Log.d(TAG, "dlc = " + canFrame.mDlc); //数据长度 int dlc = canFrame.mDlc; int len = canFrame.mData.length; //解析数据 16 转 10 for (int i = 0; i5.发送
byte testData[] = {10, 0, 0, 0, 0, 0, 0, 0}; new Thread() { @Override public void run() { while (true) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("发送数据" + Can.SendData(testData, 516, false, false)); System.out.println("返回值:返回发送数据结构的字节数,返回-1 总线错误,返回 0连接断开。"); } } }.start();6.如果demo和candev.jar 请在我的资源中下载
(图片来源网络,侵删)
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。