首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dotnet内核中的SocketCAN

dotnet内核中的SocketCAN
EN

Stack Overflow用户
提问于 2018-07-23 14:57:36
回答 2查看 1.1K关注 0票数 0

我正在为Linux上的设备编写软件,该软件应该与CAN接口一起工作。理想情况下,我希望在不从c ++连接第三方库的情况下使用该接口。有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-30 12:07:42

我使用本机函数解决了这个问题。这里以绑定套接字为例,可以读写消息,用本机函数write(或aio_write)和read。CanPublisher in UDSim为例

代码语言:javascript
复制
const int Siocgifindex = 0x8933;
private const int PfCan = 29;
private const int SockRaw = 3;
private const int CanRaw = 1;
private const int CanMtu = 16;

[DllImport("libc", SetLastError = true)]
private static extern int socket(int domain, int type, int protocol);
[DllImport("libc", SetLastError = true)]
private static extern int ioctl(int fd, int request, ref Ifreq mtu);
[DllImport("libc", SetLastError = true)]
private static extern int bind(int fd, ref SockaddrCan addr, int addrlen);


[StructLayout(LayoutKind.Sequential)]
struct SockaddrCan
{
    public ushort can_family;
    public int can_ifindex;
    public uint rx_id;
    public uint tx_id;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
struct Ifreq
{
    public Ifreq(string ifr_name)
    {
        this.ifr_name = ifr_name;
        this.ifr_ifindex = 0; // ifru_ivalue
        this.ifru_mtu = 0;
    }

    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
    public string ifr_name;
    public int ifr_ifindex;
    public uint ifru_mtu;
}

var addr = new SockaddrCan();
var s = socket(PfCan, SockRaw, CanRaw);
var ifr = new Ifreq("vcan0");
var ret = ioctl(s, Siocgifindex, ref ifr);
addr.can_ifindex = ifr.ifr_ifindex;
addr.can_family = PfCan;
ret = bind(s, ref addr, Marshal.SizeOf(addr));
票数 1
EN

Stack Overflow用户

发布于 2018-08-29 02:44:34

您需要查看SocketCAN库,它是Linux的一部分。您还可以使用candump和cansend来帮助您进行开发,还可以查看candump.ccansend.c源文件以获得灵感。

我看到有一个dotnet标签,如果你想在dotnet中使用CAN,我建议你写一个小的C库来处理CAN的东西。然后将其编组到dotnet,一旦你在dotnet中有了访问权,你就可以将东西包装在类中,并创建你需要的任何抽象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51473139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档