Example #1
0
        internal CANBusBBB(string CanName, bool CANFD)
        {
            this.CANFD  = CANFD;
            this.Socket = socket(PF_CAN, SOCK_RAW, CAN_RAW);
            if (this.Socket < 0)
            {
                throw new Exception("Error while opening socket. Error code: " + Marshal.GetLastWin32Error());
            }

            unsafe
            {
                IfRequest Req = new IfRequest();
                for (int i = 0; i < CanName.Length; i++)
                {
                    Req.Name[i] = Convert.ToByte(CanName[i]);
                }
                Req.Name[CanName.Length] = 0;
                if (ioctl(Socket, SIOCGIFINDEX, ref Req) < 0)
                {
                    throw new Exception("Error during IO Control. Error code: " + Marshal.GetLastWin32Error());
                }
                SockAddrCan Addr = new SockAddrCan();
                Addr.CanFamily  = AF_CAN;
                Addr.CanIfIndex = Req.IfIndex;
                if (bind(Socket, ref Addr, Marshal.SizeOf(Addr)) < 0)
                {
                    throw new Exception("Error while binding socket. Error code: " + Marshal.GetLastWin32Error());
                }
                ;
                if (CANFD)
                {
                    int FD = CANFD ? 1 : 0;
                    if (setsockopt(Socket, SOL_CAN_RAW, CAN_RAW_FD_FRAMES, ref FD, Marshal.SizeOf(FD)) != 0)
                    {
                        throw new Exception("Failed to enable Extended CAN. Error code: " + Marshal.GetLastWin32Error());
                    }
                }
            }
        }
Example #2
0
 private static extern int bind(int FileDescriptor, ref SockAddrCan Addr, int AddrLen);