天嵌 ARM开发社区

 找回密码
 注册
查看: 1723|回复: 0

android 接收can总线数据?我有c的事例 我看到他用的SocketCan,android的怎么写?

[复制链接]
hh416052462 发表于 2014-12-16 15:45:32 | 显示全部楼层 |阅读模式
请问有谁解决过这个问题吗?  不要论坛里面有过的那个解决方案?
我把c的代码贴出来:
这是接收端的:
#include <string.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <linux/can.h>

#ifndef PF_CAN
#define PF_CAN 29
#endif

#ifndef AF_CAN
#define AF_CAN PF_CAN
#endif

int main()
{
        int s;
        unsigned long nbytes,len;
        struct sockaddr_can addr;
        struct ifreq ifr;
        struct can_frame frame;


        s = socket(PF_CAN,SOCK_RAW,CAN_RAW);

        strcpy(ifr.ifr_name,"can0");
        ioctl(s,SIOCGIFINDEX,&ifr);
        printf("can0 can_ifindex = %x\n",ifr.ifr_ifindex);

        //bind to all enabled can interface
        addr.can_family = AF_CAN;
        addr.can_ifindex =0;
        bind(s,(struct sockaddr*)&addr,sizeof(addr));

        nbytes = recvfrom(s,&frame,sizeof(struct can_frame),0,(struct sockaddr *)&addr,&len);
       
        /*get interface name of the received CAN frame*/
        ifr.ifr_ifindex = addr.can_ifindex;
        ioctl(s,SIOCGIFNAME,&ifr);
        printf("Received a CAN frame from interface %s\n",ifr.ifr_name);
        printf("frame message\n"
                "--can_id = %x\n"
                "--can_dlc = %x\n"
                "--data = %s\n",frame.can_id,frame.can_dlc,frame.data);

        return 0;
}

这是发送端的:
#include <string.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <linux/can.h>

#ifndef PF_CAN
#define PF_CAN 29
#endif

#ifndef AF_CAN
#define AF_CAN PF_CAN
#endif

int main()
{
        int s;
        unsigned long nbytes;
        struct sockaddr_can addr;
        struct ifreq ifr;
        struct can_frame frame;


        s = socket(PF_CAN,SOCK_RAW,CAN_RAW);

        strcpy((char *)(ifr.ifr_name),"can0");
        ioctl(s,SIOCGIFINDEX,&ifr);
        printf("can0 can_ifindex = %x\n",ifr.ifr_ifindex);


        addr.can_family = AF_CAN;
        addr.can_ifindex = ifr.ifr_ifindex;
        bind(s,(struct sockaddr*)&addr,sizeof(addr));


        frame.can_id = 0x123;
        strcpy((char *)frame.data,"hello");
        frame.can_dlc = strlen(frame.data);

        printf("Send a CAN frame from interface %s\n",ifr.ifr_name);

        nbytes = sendto(s,&frame,sizeof(struct can_frame),0,(struct sockaddr*)&addr,sizeof(addr));
       
        return 0;
}


您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-20 06:48 , Processed in 1.015625 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表