hh416052462 发表于 2014-12-16 15:45:32

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

请问有谁解决过这个问题吗?不要论坛里面有过的那个解决方案?
我把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;
}


页: [1]
查看完整版本: android 接收can总线数据?我有c的事例 我看到他用的SocketCan,android的怎么写?