Releases: gioblu/PJON
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:
- PJON protocol specification v2.0
- PJON Acknowledge v1.0
- PJON Dynamic addressing v1.0
- PJDL v2.0 - PJDLR v2.0 - PJDLS v1.0 - TSDL v1.0
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 with0x97
, 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
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
orARDUINO/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 inbegin
ofAnalogSampling
,OverSampling
andSoftwareBitBang
, using interface - RPI example bugfix, added missing timeout configuration (e8ab099)
8.1
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:
- Send packet using its original header and not the actual header configuration (d072ced)
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 toreceive_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
errordata
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
Changelog:
SoftwareBitBang
Arduino Mega and Leonardo timing optimization in modeSWBB_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:
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 codebasesdigitalWriteFast
renamed inPJON_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
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 runOVERDRIVE
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 andcan_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
andThroughSerial
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
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
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 timeSoftwareBitBang
specification update
Bugfix:
- Fix to
EthernetTCP
andLocalUDP
inclusion and typecasting for portability ThroughSerial
completeStream
abstraction and correct inclusionOverSampling
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
PJON dynamic addressing specification released v0.1
Changelog:
- Master-slave and multi-master dynamic addressing features added in
PJONMaster
andPJONSlave
classes to preservePJON
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)