SocketCANSharp 0.11.0
dotnet add package SocketCANSharp --version 0.11.0
NuGet\Install-Package SocketCANSharp -Version 0.11.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SocketCANSharp" Version="0.11.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SocketCANSharp --version 0.11.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: SocketCANSharp, 0.11.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install SocketCANSharp as a Cake Addin #addin nuget:?package=SocketCANSharp&version=0.11.0 // Install SocketCANSharp as a Cake Tool #tool nuget:?package=SocketCANSharp&version=0.11.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
SocketCAN# (SocketCANSharp)
SocketCAN# is a .NET managed wrapper for the Linux CAN subsystem (SocketCAN). SocketCAN# enables developers to create either object-oriented or procedural style applications that leverage SocketCAN.
Raw CAN Support
CanNetworkInterface vcan0 = CanNetworkInterface.GetAllInterfaces(true).First(iface => iface.Name.Equals("vcan0"));
using (var rawCanSocket = new RawCanSocket())
{
rawCanSocket.Bind(vcan0);
int bytesWritten = rawCanSocket.Write(new CanFrame(0x123, new byte[] { 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }));
int bytesRead = receiverSocket.Read(out CanFrame frame);
}
ISO 15765-2 (ISO-TP) Support
CanNetworkInterface vcan0 = CanNetworkInterface.GetAllInterfaces(true).First(iface => iface.Name.Equals("vcan0"));
using (var testerSocket = new IsoTpCanSocket())
{
testerSocket.BaseOptions = new CanIsoTpOptions()
{
Flags = IsoTpFlags.CAN_ISOTP_TX_PADDING | IsoTpFlags.CAN_ISOTP_WAIT_TX_DONE,
};
testerSocket.Bind(vcan0, 0x600, 0x700);
int bytesWritten = testerSocket.Write(new byte[] { 0x3e, 0x00 });
var receiveBuffer = new byte[4095];
int bytesRead = testerSocket.Read(receiveBuffer);
}
SAE J1939 Support
var vcan0 = CanNetworkInterface.GetAllInterfaces(true).FirstOrDefault(iface => iface.Name.Equals("vcan0"));
using (var j1939Socket = new J1939CanSocket())
{
j1939Socket.EnableBroadcast = true;
j1939Socket.SendPriority = 3;
j1939Socket.Bind(vcan0, SocketCanConstants.J1939_NO_NAME, 0x0F004, 0x01);
var destAddr = new SockAddrCanJ1939(vcan0.Index)
{
Name = SocketCanConstants.J1939_NO_NAME,
PGN = 0x0F004,
Address = SocketCanConstants.J1939_NO_ADDR,
};
j1939Socket.WriteTo(new byte[] { 0xFF, 0xFF, 0xFF, 0x6C, 0x50, 0xFF, 0xFF, 0xFF }, MessageFlags.None, destAddr);
}
Broadcast Manager (BCM) Support
CanNetworkInterface vcan0 = CanNetworkInterface.GetAllInterfaces(true).First(iface => iface.Name.Equals("vcan0"));
using (var bcmCanSocket = new BcmCanSocket())
{
bcmCanSocket.Connect(vcan0);
var canFrame = new CanFrame(0x333, new byte[] { 0xDE, 0xAD, 0xBE, 0xEF });
var frames = new CanFrame[] { canFrame };
var config = new BcmCyclicTxTaskConfiguration()
{
Id = 0x333,
StartTimer = true,
SetInterval = true,
InitialIntervalConfiguration = new BcmInitialIntervalConfiguration(10, new BcmTimeval(0, 5000)), // 10 messages at 5 ms
PostInitialInterval = new BcmTimeval(0, 100000), // Then at 100 ms
};
int nBytes = bcmCanSocket.CreateCyclicTransmissionTask(config, frames);
}
CAN Gateway (CGW) Support
var vcan0 = CanNetworkInterface.GetAllInterfaces(true).FirstOrDefault(iface => iface.Name.Equals("vcan0"));
var vcan1 = CanNetworkInterface.GetAllInterfaces(true).FirstOrDefault(iface => iface.Name.Equals("vcan1"));
using (var cgwSocket = new CanGatewaySocket())
{
cgwSocket.ReceiveTimeout = 1000;
cgwSocket.SendTimeout = 1000;
cgwSocket.Bind(new SockAddrNetlink(0, 0));
var rule = new CgwCanToCanRule(CgwCanFrameType.ClassicalCAN)
{
SourceIndex = (uint)vcan0.Index,
DestinationIndex = (uint)vcan1.Index,
EnableLocalCanSocketLoopback = true,
ReceiveFilter = new CanFilter(0x123, 0x7FF),
SetModifier = new ClassicalCanGatewayModifier(CanGatewayModificationType.CGW_MOD_LEN, new CanFrame(0x000, new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00 })),
ChecksumXorConfiguration = new CgwChecksumXor(0, 3, 4, 0xCC),
UpdateIdentifier = 0xFFEEEEDD,
};
cgwSocket.AddOrUpdateCanToCanRule(rule);
var data = new byte[8192];
int bytesRead = cgwSocket.Read(data);
var realData = data.Take(bytesRead).ToArray();
NetlinkMessageHeader header = NetlinkUtils.PeekAtHeader(realData);
if (header.MessageType == NetlinkMessageType.NLMSG_ERROR)
{
NetlinkMessageError nlMsgErr = NetlinkMessageError.FromBytes(realData);
if (nlMsgErr.Error == 0)
{
Console.WriteLine("Successfully added CGW Rule!");
}
}
}
Links
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- No dependencies.
NuGet packages (2)
Showing the top 2 NuGet packages that depend on SocketCANSharp:
Package | Downloads |
---|---|
Ahsoka.Core.Can
Package Description |
|
Ahsoka.Extensions.Can
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.