Skip to content

Releases: gioblu/PJON

9.0

30 Oct 15:17
Compare
Choose a tag to compare
9.0

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:

  • Fix uninitialized response by @Girgitt (b0d2711)
  • receive length check bugfix (e1b97e2)
  • PJONMaster RID condition bugfix (0f1d265)
  • receive acknowledge condition bugfix (92dcdcd)
  • Avoid async ack response if router (18a5857)

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

01 Aug 15:27
Compare
Choose a tag to compare
8.2

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 (58c4672)
  • Reduced CPU load for WINX86 interface using ThroughSerial thanks to @Girgitt (bfe935c)
  • 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 (30b94d8)

Bugfix:

  • Removed useless buffer and condition from PJON begin method sparing some bytes of memory
  • Fix delay call in begin of AnalogSampling, OverSampling and SoftwareBitBang, using interface
  • RPI example bugfix, added missing timeout configuration (e8ab099)

8.1

29 May 01:55
Compare
Choose a tag to compare
8.1

Changelog:

Bugfix:

  • Send packet using its original header and not the actual header configuration (d072ced)

8.0

08 Apr 02:28
Compare
Choose a tag to compare
8.0

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:

  • In case of CRC error, NAK is not transmitted to avoid third-party exchange disruption if the data-link used does not support strong consistency
  • Attempts counter bugfix repeated async ack packet (4ecc754)
  • Avoid resend packet with asynchronous acknowledge if synchronous acknowledge is requested and received, wait until timeout and in case throw error (0bfb888)
  • Fixed a lot of compilation errors on linux to support Raspberry Pi

7.1

10 Mar 01:58
Compare
Choose a tag to compare
7.1

Changelog:

  • SoftwareBitBang Arduino Mega and Leonardo timing optimization in mode SWBB_FAST (0a1c77e)
  • Now 65534 max packets supported in buffer (65fc82f)
  • Many small changes to ease portability, avoid compilation errors and warnings
  • Fix to documentation titles and links to be better viewed through readthedocs thanks to @zcattacz

Bugfix:

  • Enable ThroughSerial configuration constants predefinitions (dacdd63)
  • Avoid loosing pointer to packet if repeated sending + async ack (ddfd2c1)

7.0

18 Feb 02:14
Compare
Choose a tag to compare
7.0

Changelog:

  • State machine optimization, about -200 bytes program memory (954152e)
  • Back-off is now a property of strategies to more efficiently handle retransmissions
  • AnalogSampling strategy added able to communicate wirelessly with LEDs, lasers and photodiodes.
  • Memory footprint optimization excluding unused strategies by @4ib3r (b5e6f34)
  • OverSampling now supports long range half-duplex communication (#91)
  • ATtiny85 external 16MHz compatible with SoftwareBitBang (c3a77c8)
  • ATmega1280/2560 and ATmega16/32U4 now compatible with OverSampling (9507cfc)
  • PJON_ prefix added to constants and types to avoid naming collision with third-party codebases
  • digitalWriteFast renamed in PJON_IO to avoid collision with older or different versions
  • Documentation updated and expanded

Bugfix:

  • Avoid ATtiny EthernetTCP/LocalUDP inclusion error
  • ESP8266 min/max bugfix by @fredilarsen
  • NodeMCU compilation error (61e7ffd)
  • send_repeatedly async_ack no error bugfix (f573f99)
  • ATmega8 pin handling bugfix (ee2a21c)
  • keyword file bugfix by @pantonvich (fad8c23)

6.2

22 Dec 16:51
Compare
Choose a tag to compare
6.2

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 (fb0b161)
  • OverSampling, SoftwareBitBang and ThroughSerial documentation and codebase comments extended

Bugfix:

  • Asynchronous backoff bugfix (d08a1ec)
  • Added missing mode configuration in SIMPLEX mode examples (#104) thanks to @pacproduct
  • Avoid PJONMaster reset if not receiver or error defined (#106) thanks to @elusive-code

6.1

03 Dec 13:27
Compare
Choose a tag to compare
6.1

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

Changelog:

  • Asynchronous acknowledge implementation (459cb81) and example
  • Backoff change to transmit less times and with a more distributed pattern (attemps ^ 4) (305d6c1)
  • Full extended header definition and support (29d9ac7)
  • Optional ordered sending (459cb81)
  • Configurable random seed pin with its setter (27ac427)
  • Device id is used as a part of the random seed if present (8697169)

Bugfix:

  • Keep busy jittering wave bugfix (964a27a)
  • Fixed EthernetLink ESP8266 compilation error (c107c46) by @fredilarsen
  • Transmission bit transition slope bugfix (120b2c7), it reduces the need of pull down resistor and it generally higher transmission accuracy. Update suggested.

6.0

03 Dec 13:31
Compare
Choose a tag to compare
6.0

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.

5.2

06 Oct 14:13
Compare
Choose a tag to compare
5.2

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)