Faactory.Channels.JT808 0.6.1

dotnet add package Faactory.Channels.JT808 --version 0.6.1
                    
NuGet\Install-Package Faactory.Channels.JT808 -Version 0.6.1
                    
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="Faactory.Channels.JT808" Version="0.6.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Faactory.Channels.JT808" Version="0.6.1" />
                    
Directory.Packages.props
<PackageReference Include="Faactory.Channels.JT808" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Faactory.Channels.JT808 --version 0.6.1
                    
#r "nuget: Faactory.Channels.JT808, 0.6.1"
                    
#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.
#:package Faactory.Channels.JT808@0.6.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Faactory.Channels.JT808&version=0.6.1
                    
Install as a Cake Addin
#tool nuget:?package=Faactory.Channels.JT808&version=0.6.1
                    
Install as a Cake Tool

Channels - JT/T 808 Protocol

This project contains a set of Channels adapters to decode data encoded with JT/T 808 protocol.

Although production-ready, this library is a work in progress. Things might change, break, or behave unpredictably. Use at your own risk.

Learn more about Channels.

Getting started

Install the package from NuGet

dotnet add package Faactory.Channels.JT808

To enable decoding of JT808 packets on the input pipeline, we just need to register the respective middleware with the channel pipeline. We do that with an extension method.

IChannelBuilder builder = ...;

builder.AddJT808Middleware();

With the middleware registered, implement your own middleware to handle the decoded messages.

Generally, if there's a specific reader in place, messages are delivered as a Message<T> where T is the model for the specific data.

Unsupported or unknown JT/T 808 message types are forwarded as BinaryMessage, allowing custom adapters or handlers to process proprietary extensions or non-implemented messages.

For non-implemented or custom protocol messages, an adapter should be written and added to the input pipeline, thus adapting a BinaryMessage into something else. This is usually preferred to handling it directly on a handler.

After decoding, the middleware emits the following message types:

  • Message<GeneralResponse>
  • Message<TerminalRegistration>
  • Message<TerminalAuthentication>
  • Message<TerminalLogout>
  • Message<TerminalAttributeResponse>
  • Message<TerminalParameterResponse>
  • Message<LocationInformation>
  • Message<LocationInformationQueryResponse>
  • Message<BatchLocationInformation>
  • Message<UplinkPassthroughData>

All supported inbound messages are acknowledged automatically by the middleware, except for TerminalRegistration and TerminalAuthentication, which must be acknowledged explicitly by the application.

Sending Messages

To send a message to the device, the easiest (and recommended) way is to make use of the IMessageBuilder interface. To obtain an instance, call the GetMessageBuilder() extension method on IChannel or IChannelContext.

public class MyHandler : ChannelHandler<Message<TerminalAuthentication>>
{
    // ...

    public override async Task ExecuteAsync( IChannelContext context, Message<TerminalAuthentication> message )
    {
        // ...

        EncodedMessage acknowledge = context.GetMessageBuilder()
            .Platform.Response( message, OperationResult.Success );

        context.Output.Write( acknowledge.Buffer );

        // ...
    }
}

Message Encapsulation

If a message is encapsulated (split across multiple packages), decoding is deferred until all packages are received. An internal encapsulation service reassembles the packages and pushes a single reconstructed message into the pipeline.

DateTime and Timezones

The JT/T 808 protocol does not specify a default timezone for the dates and times. It also does not specify the timezone of the data sent by the device. This means, unfortunately, that the timestamps cannot be interpreted correctly unless the device timezone is known beforehand.

For this reason, the library decodes the dates and times with an unspecified timezone. It is up to the implementer to determine the correct timezone of the device and convert them accordingly.

A good approach is to add the timezone to the device's registration metadata. This information can then be read by the identity handler and stored in the channel's data. This way, the timezone can be retrieved and used by the other handlers to convert the dates and times to the correct timezone. Naturally, the device's configuration must match the information stored in the registration metadata, otherwise the dates and times will be incorrect.

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.6.1 168 7/17/2026
0.6.0 143 7/9/2026
0.5.6 115 7/8/2026
0.5.5 133 6/23/2026
0.5.4 107 6/23/2026
0.5.3 105 6/23/2026
0.5.2 116 6/23/2026
0.5.1 115 6/22/2026
0.5.0 122 6/22/2026
0.4.0 112 6/16/2026
0.3.8 114 6/1/2026
0.3.7 117 6/1/2026
0.3.6 110 5/26/2026
0.3.5 112 5/25/2026
0.3.4 104 5/25/2026
0.3.3 109 5/19/2026
0.3.2 109 5/18/2026
0.3.1 100 5/18/2026
0.3.0 107 5/18/2026
0.2.1 125 2/25/2026
Loading failed