PJON Versions Save

PJON (Padded Jittering Operative Network) is an experimental, arduino-compatible, multi-master, multi-media network protocol.

9.0

6 years ago

PJON v9.0 is orders of magnitude more reliable and secure than older versions because of some key changes made in its network protocol stack. Its compatibility has been vastly expanded now covering TCP or UDP standard networking on Windows and Linux real time operative systems.

New specifications:

Changelog:

  • Frame separation feature has been added to each data link or strategy to higher reliability and avoid a set of vulnerabilities. Frame separation is obtained, in some cases, like in TSDL or PJDLS using byte-stuffing, in others like PJDL or PJDLR using a unique low level binary symbol
  • An additional CRC8 has been added after the length to avoid the length corruption vulnerability, that is affecting CAN and many other alternatives, providing with higher reliability at the cost of 1 byte of overhead
  • CRC8 0x8c polynomial used in 1-Wire and PJON older versions has been changed with 0x97, this polynomial has the largest possible length (119 bit) at which HD=4 can be achieved with 8-bit CRC, offering higher reliability on longer strings
  • CRC32 is automatically applied if packet length exceeds 15 bytes, packets requesting CRC8 longer than 15 bytes are considered unacceptable to by default higher reliability and avoid a set of vulnerabilities
  • More accurate header consistency check
  • WINX86 support and examples to EthernetTCP, LocalUDP and GlobalUDP enabling PJON to run over the internet on windows computers by @fredilarsen
  • LINUX support and examples to EthernetTCP, LocalUDP and GlobalUDP enabling PJON to run over the internet on linux computers by @fredilarsen
  • ESP8266 support and examples to GlobalUDP by @fredilarsen
  • send_from_id added id parameter to support async ack packet routing
  • OverSampling, AnalogSampling and SoftwareBitBang communication mode names switched to numeric constants, see related specifications
  • ThroughSerial HC-12 wireless module compatibility and related examples added
  • ThroughSerial RS485 related examples added
  • SoftwareBitBang RecursiveAcknowledge example added using the recursive acknowledgment pattern
  • SoftwareBitBang PacketSeparationTest example added able to test frame separation accuracy

Bugfix:

This version is not backward compatible, all devices must be updated!

It is recommended to use VPN and/or other security measures when allowing devices to communicate across the internet.

8.2

6 years ago

Changelog:

  • With AnalogSampling is now possible to communicate wirelessly or through single channel optic fiber cables up to 12658Bd or 1.52kB/s using a single LED for both transmission and reception phases, enabling users to create a wireless bus using only one analog pin and a cheap light emitting diode for each device. The range if used wirelessly is around 5 meters in ideal conditions, much more if used with optic fiber cables
  • Examples are now structured as following: architecture/mode/data-link/example or ARDUINO/local/SoftwareBitBang/Blink
  • devices directory has been added to propose a space where users can share their PJON compatible builds and propose basic implementation examples
  • Early version of the LEDAR proximity sensor device added to devices directory
  • Added dispatched method to avoid async ack response duplications in buffer (https://github.com/gioblu/PJON/commit/58c46724bb6e1453dc7d6ca772695efd347256e4)
  • Reduced CPU load for WINX86 interface using ThroughSerial thanks to @Girgitt (https://github.com/gioblu/PJON/commit/bfe935c68413c1a1ef4d5f986f03895fb45b5c1c)
  • RS485 pin handling for separate RX/TX enable thanks to @ekarlso
  • Added a "timing hack" only for RPI to force flush method to wait for transmission and so enable the nominal use of RS485 transceivers; wiringPi flush method seems broken, not waiting for transmission end, thanks for testing to @ekarlso (https://github.com/gioblu/PJON/commit/30b94d8820e3a3bab0a5b639f4dd374d9b3312a9)

Bugfix:

8.1

6 years ago

Changelog:

  • PJON now supports Windows laptops / desktop computers (for now working only with the ThroughSerial strategy) thanks to the WINX86 interface, proposed and developed by @Girgitt
  • WINX86 examples directory added
  • Raspberry Pi examples directory added
  • Documentation, specification and README enhancement

Bugfix:

8.0

7 years ago

PJON protocol specification v1.1 PJDL data-link specification v1.1 PJDLR data-link specification v1.1

Changelog:

  • Interfaces abstraction added to support cross-compilation and ease portability
  • Raspberry Pi now compatibile with ThroughSerial strategy see wiki example
  • receive_byte has been changed to receive_string to support both a single byte or a byte stream reception, eliminating the need of internal buffers in strategies and reducing program memory. Proposed and implemented by @fredilarsen
  • CRC32 enforced if packet length > 15 bytes (including overhead) to by default higher reliability
  • Added unacceptable or conflicting header configuration handling
  • In case of PJON_CONNECTION_LOST error data contains the id of the packet see error handling
  • Added send_from_id to enable the most basic form of routing or tunneling. Proposed and implemented by @fredilarsen
  • Extender example added by @fredilarsen

Bugfix:

7.1

7 years ago

Changelog:

Bugfix:

7.0

7 years ago

Changelog:

Bugfix:

6.2

7 years ago

This release brings stable the new asynchronous acknowledgment feature, also used in combination with the synchronous acknowledgment (recursive acknowledgment pattern). A lot of work has been done testing, bug fixing and extending documentation. The next phase of development is the abstraction of what is still related to timing in the protocol layer, move it to the strategy or data link layer.

Changelog:

  • SoftwareBitBang, thanks to optimizations made in older versions, is able now to run OVERDRIVE mode on ATmega328 at 4.87kB/s (mandatory update for all devices transmitting in this mode with older versions because timing is changed)
  • ThroughSerial optimized default configuration and can_start method, thanks for the support and extended tests over RS485 to franketto (italian arduino forum user).
  • General documentation extended including also methods returning values
  • Recursive acknowledgment pattern specification enhanced with graphs (https://github.com/gioblu/PJON/commit/fb0b16193929a5ede350431bc02759d3d2daaa7e)
  • OverSampling, SoftwareBitBang and ThroughSerial documentation and codebase comments extended

Bugfix:

6.0

7 years ago

PJON protocol specification released v1.0 PJON acknowledge specification released v0.1 PJON is a trademark.

PJON has been developed at a fast pace, with 15 releases in a little more than a year, but version 6 contains many of the features PJON will have when complete, what will be added in the next releases is the asynchronous acknowledgment and for sure some bug fixes. With this release it is described more clearly how the PJON network protocol stack is organized.

Changelog:

  • Added optional 2 bytes length supporting up to 65535 bytes
  • Added optional CRC32
  • Added optional 2 bytes header
  • Updated documentation stored in documentation directory
  • SoftwareBitBang updated to handle latency and CRC computation time
  • SoftwareBitBang specification update

Bugfix:

  • Fix to EthernetTCP and LocalUDP inclusion and typecasting for portability
  • ThroughSerial complete Stream abstraction and correct inclusion
  • OverSampling can_start bugfix

If using OverSampling or SoftwareBitBang it is suggested to use pull down resistors on data pins to obtain the best performance.

6.1

7 years ago

PJON acknowledge specification fixed v0.1 PJON recursive acknowledgment pattern implemented

Changelog:

Bugfix:

5.2

7 years ago

PJON dynamic addressing specification released v0.1

Changelog:

  • Master-slave and multi-master dynamic addressing features added in PJONMaster and PJONSlave classes to preserve PJON class low memory footprint.
  • EthernetTCP strategy added. Multiple devices with Ethernet ports can use PJON to communicate with each other on a LAN, WAN or across the Internet. Proposed and developed by @fredilarsen
  • LocalUDP strategy added. Multiple devices with Ethernet ports can use PJON to communicate with each other on a local subnet, wired or over WiFi or both. Proposed and developed by @fredilarsen

Bugfix:

  • Removed useless SoftwareSerial inclusion in ThroughSerial, thanks to @fastricker

(EthernetTCP and LocalUDP have to be included before PJON.h or pull master for automatic inclusion)