Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
360 commits
Select commit Hold shift + click to select a range
0eed9d9
Documentation index added, minor fix to README
gioblu Jun 26, 2020
16e2eb5
README Flexibility remark minor fix
gioblu Jun 26, 2020
579ad88
README simplified doc and spec index
gioblu Jun 26, 2020
5156a02
PJON protocol specification changelog added
gioblu Jun 28, 2020
241ed55
PJON specification changelog minor fix
gioblu Jun 28, 2020
8fabd71
@fotosettore added to contributors
gioblu Jun 28, 2020
51e8744
PJON specification changelog minor fix
gioblu Jun 28, 2020
78c5b39
new getters and setters keywords added
gioblu Jun 28, 2020
3f1cf9d
Merge pull request #5 from gioblu/master
fredilarsen Jul 6, 2020
7fa31ff
Add bluepill timings.h for modes 1,2,3-4 and fixed arduino uno mode 3…
jcallano Jul 9, 2020
b72640b
Add bluepill timings.h for modes 1,2,3-4 and fixed arduino uno mode 3…
jcallano Jul 9, 2020
1afca01
DualUDP README minor fix (https://github.com/gioblu/PJON/issues/319)
gioblu Jul 10, 2020
b032c36
Update Timing.h
jcallano Jul 10, 2020
8e8a9ed
Merge pull request #357 from jcallano/master
gioblu Jul 11, 2020
0cb115e
removed Dumps and pics
gioblu Jul 11, 2020
abba08a
@jcallano added to contributors' list
gioblu Jul 11, 2020
bc7be77
STM32F1 compatible pins added to SoftwareBitBang compatibility table
gioblu Jul 11, 2020
c7c0f4d
SoftwareBitBang README tables update
gioblu Jul 11, 2020
f2f816b
SoftwareBitBang README minor fix
gioblu Jul 11, 2020
d18f6bd
SoftwareBitBang README minor fix
gioblu Jul 11, 2020
63927c9
SoftwareBitBang mode table update
gioblu Jul 11, 2020
4c23479
removed .DS_Store
gioblu Jul 11, 2020
e97447f
PJON specification acknowledgement remark fixed
gioblu Jul 15, 2020
bbeec6e
Merge pull request #6 from gioblu/master
fredilarsen Jul 16, 2020
fd2c871
PJDL spec added acceptable deviation and acceptable sync duration
gioblu Jul 17, 2020
8c07925
PJDL specification mode table update
gioblu Jul 17, 2020
feea441
PJDL mode table minor fix
gioblu Jul 17, 2020
82fed4c
PJDL spec removed impl details added bit deviation
gioblu Jul 17, 2020
7624255
PJDL v5.0 draft spec and implementation (breaking compatibility)
gioblu Jul 17, 2020
8016b0b
PJDL longer keep-busy bits (breaking compatibility)
gioblu Jul 19, 2020
3f11b87
PJDL spec contributors added to manifest
gioblu Jul 19, 2020
57d43d6
Including Any.h in PJONSwitch.h
fredilarsen Jul 19, 2020
cd83f8a
Merge pull request #358 from fredilarsen/master
gioblu Jul 20, 2020
fe4c1bd
PJDL specification mode pad-data ratio fixed to be 2.5 (breaking comp…
gioblu Jul 20, 2020
bf72efe
Merge branch 'master' of https://github.com/gioblu/PJON
gioblu Jul 20, 2020
5a376ff
PJDL spec minor fix
gioblu Jul 20, 2020
ccab7a9
PJDL specification response latency remark
gioblu Jul 20, 2020
731ffa2
PJDL specification v5.0 is out (breaking compatibility)
gioblu Jul 20, 2020
30cb6ef
PJDL specification removed outdated remark
gioblu Jul 21, 2020
019a31f
PJDL v5.0 specification update docs and READMEs
gioblu Jul 21, 2020
e4bdef2
SoftwareBitBang comments and specification minor fix
gioblu Jul 21, 2020
f91dc96
Network/SoftwareBitBang/NetworkAnalysis compilation error fixed
gioblu Jul 21, 2020
043d171
Strategies README broken links fix
gioblu Jul 21, 2020
c5e6504
Added Serial.flush() to PacketSeparationTest for more accurate results
gioblu Jul 21, 2020
e206d6a
SoftwareBitBang timing update (breaking compatibility)
gioblu Jul 21, 2020
ee88945
SoftwareBitBang README minor fix'
gioblu Jul 22, 2020
ea5b989
SoftwareBitBang REAMDE, added PJDL frame pic and safety remarks
gioblu Jul 22, 2020
3aa9661
PJDL frame image too big
gioblu Jul 22, 2020
fca178f
SoftwareBitBang NetworkAnalysis example added success rate
gioblu Jul 22, 2020
c9120de
SWBB ESP8266, ESP32, STM32F1 timing update to fit in spec
gioblu Jul 22, 2020
006aa84
SoftwareBitBang tests directory added
gioblu Jul 22, 2020
43e32b9
SoftwareBitBang minor fix
gioblu Jul 22, 2020
417a58b
NetworkAnaysis test result table update
gioblu Jul 22, 2020
7ed683c
SoftwareBitBang NetworkAnalysis test update
gioblu Jul 22, 2020
99ed36c
SoftwareBitBang NetworkAnalysis test result update
gioblu Jul 22, 2020
c84836e
SoftwareBitBang NetworkAnalysis test results update
gioblu Jul 22, 2020
e20692d
Merge pull request #7 from gioblu/master
fredilarsen Jul 22, 2020
f7d61b5
SoftwareBitBang better timing for Duemilanove/UNO/Nano
gioblu Jul 23, 2020
b7bde5f
Strategy frame_end method added (breaking compatibility)
gioblu Jul 24, 2020
d010541
PJDL spec update, bus is kept busy by receiver (breaking compatibility)
gioblu Jul 24, 2020
2a08ec7
PJDL specification added missing contributors remark, minor fix
gioblu Jul 24, 2020
75192b5
Merge pull request #8 from gioblu/master
fredilarsen Jul 24, 2020
47258c9
SoftwareBitBang timing and tests update
gioblu Jul 24, 2020
372b42a
send_packet returns PJON_FAIL if the response is not PJON_ACK
gioblu Jul 24, 2020
8756317
random_seed -> _random_seed (now private)
gioblu Jul 24, 2020
c726c87
PJON.h minor fix
gioblu Jul 24, 2020
84b6e80
mode column added to SoftwareBitBang tests
gioblu Jul 25, 2020
4fe9da2
SoftwareBitBang bluepill tests and timing update added thanks to @jca…
gioblu Jul 25, 2020
188ca3b
SoftwareBitBang performance remarks updated with new values
gioblu Jul 25, 2020
698eceb
strategies README minor fix
gioblu Jul 25, 2020
709506f
frame_end strategy method removed
gioblu Jul 27, 2020
79bc1d8
PJDL v5.0 revert to response phase driven by tx
gioblu Jul 27, 2020
6a4e440
PJDL v5.0 keep busy pulse deviation update
gioblu Jul 27, 2020
ea52b3b
SoftwareBitBang NetworkAnalysis test results update
gioblu Jul 27, 2020
768f1a7
SoftwareBitBang NetworkAnalysis bluepill results by @jcallano
gioblu Jul 28, 2020
64c8a8c
Merge pull request #9 from gioblu/master
fredilarsen Jul 29, 2020
79620ae
SoftwareBitBang MODE 2 and 3 timing and tests added
gioblu Jul 29, 2020
1774d91
SoftwareBitBang NetworkAnalysis additional test results added
gioblu Jul 29, 2020
8b6efee
SoftwareBitBang timing removed unused constant
gioblu Jul 30, 2020
69fb85e
SoftwareBitBang NetworkAnalysis test results added
gioblu Jul 30, 2020
cbcea95
SoftwareBitBang added SAMD21 MODE 2 support
gioblu Jul 30, 2020
0933975
SoftwareBitBang ATmega328PB timing update (https://github.com/gioblu/…
gioblu Jul 30, 2020
421e32a
PJDL v5.0 medium access latency remark, sync pulse rising edge remark
gioblu Jul 30, 2020
7d7f11d
PJDL v5.0 frame length limit remark added
gioblu Jul 30, 2020
ada9d0a
PJDL v5.0 added keep busy bit negative deviation
gioblu Jul 30, 2020
77473ff
PJON_IO_PULL_DOWN bug fixed
gioblu Jul 31, 2020
b3d8e55
SoftwareBitBang default timing update
gioblu Jul 31, 2020
3647914
Merge pull request #10 from gioblu/master
fredilarsen Aug 2, 2020
434243e
Added new academic study by @jdaandersj
gioblu Aug 16, 2020
5f9dff4
@jdaandersj added to PJDL header
gioblu Aug 25, 2020
4dfbf9d
zephyr: add support for the ThroughSerial strategy using the tty driver
niclas-ats Feb 19, 2020
c6c4851
pjon: fix returning number of microseconds
niclas-ats Feb 21, 2020
94586cf
zephyr: implement flushing the serial device
niclas-ats Mar 16, 2020
9ac27f6
zephyr: fix usage of tcphelper by not applying unknown socket options
niclas-ats Jun 8, 2020
a53121f
zephyr: fix usage of udphelper by not applying unknown socket options
niclas-ats Jun 8, 2020
0a193fe
zehyr: remove serial flush implementation
niclas-ats Jun 8, 2020
44a3234
zephyr: define PJON_MILLIS
niclas-ats Jun 8, 2020
1f0388d
zephyr: make sleep time unit explicit
niclas-ats Jun 23, 2020
1c48232
pjon: use uart api instead of tty_serial
Jul 1, 2020
54000cc
PJDL specification deviation update
gioblu Aug 27, 2020
9b66312
SoftwareBitBang Arduino UNO/nano and Mega timing update
gioblu Aug 27, 2020
976f46a
SoftwareBitBang SAMD and Leonardo timing tweak and test results
gioblu Aug 29, 2020
db86f94
SoftwareBitBang NetworkAnalysis test results column added
gioblu Aug 29, 2020
dace753
Merge pull request #11 from gioblu/master
fredilarsen Aug 29, 2020
57aa3df
SoftwareBitBang Uno/Nano, ESP8266 and ESP32 timing update
gioblu Sep 2, 2020
e4a7aa8
Merge pull request #12 from gioblu/master
fredilarsen Sep 8, 2020
de972c9
PJDL v5.0 deviation update, SoftwareBitBang timing revert to 12.1
gioblu Sep 8, 2020
fa093b8
Merge pull request #13 from gioblu/master
fredilarsen Sep 8, 2020
cde07ab
Update PJON_IO.h
der-schne Sep 9, 2020
260e1ee
zephyr: add kconfig parameter
Jul 1, 2020
d9f6d39
zephyr: select RING_BUFFER
Jul 8, 2020
1d990e2
zephyr: add support for rs485 txe pin
Aug 4, 2020
82f3fab
zephyr: use a new alias for pjon_txe_pin
Aug 26, 2020
e88c6af
zephyr: implement a simple serial_flush function
Aug 26, 2020
de6bff8
zephyr: add a cpp file for PJON_ZEPHYR_Interface
Sep 1, 2020
d862b38
zephyr: update kconfig file
Sep 1, 2020
c4bc671
Merge pull request #364 from der-schne/patch-1
gioblu Sep 12, 2020
517feca
Improved F() macro redefinition tolerance
fredilarsen Sep 12, 2020
9a75585
Added support for extended leading sync pad width
fredilarsen Sep 12, 2020
2ef40ea
zephyr: TS: increase flush time to ensure that the last byte is corre…
Sep 8, 2020
6d8e44f
zephyr: TS: free allocated memory if serial is close
Sep 11, 2020
b704041
zephyr: run lsp-format on PJON_ZEPHYR_Interface.cpp
Sep 11, 2020
deb0f15
zephyr: remove not needed code
Sep 11, 2020
0a2f512
zephyr: use __ZEPHYR__ to select PJON Zephyr interfaces. This is defi…
Sep 11, 2020
41a52aa
zephyr: add Konfig for TS
Sep 14, 2020
bc75b08
zephyr: built PJON as a zepyhr library and add the TS configurations
Sep 14, 2020
c457fbc
zephyr: add Kconfig options for DualUDP
Sep 14, 2020
e1acc7c
zephyr: revert include path for zephyr posix support;
Sep 14, 2020
6f3901c
zephyr: put the implementation of the zephyr uart into a header to ha…
Sep 16, 2020
458ae33
zephyr: add missing PJON_INCLUDE_DUDP for DualUDP
Sep 16, 2020
987412f
zephyr: remove DUDP_BACKOFF from Kconfig, because it is a macro
Sep 16, 2020
a2d8300
strategy DualUDP: call interface API PJON_MILLIS instead of implement…
Sep 16, 2020
9c76aff
zephyr: add a example for Zephyr using the DualUDP strategy
Sep 16, 2020
0a5bae8
zephyr: move the sample in one directory that only one west update in…
Sep 16, 2020
50f3980
Added upper limit to initial spacer multiplier
fredilarsen Sep 18, 2020
9fafd07
ThroughSerial read failure handling and state machine optimization
gioblu Sep 20, 2020
51a09e3
Merge branch 'master' of https://github.com/gioblu/PJON
gioblu Sep 20, 2020
548361c
ThroughSerial implementation simplified
gioblu Sep 20, 2020
7861efd
SoftwareBitBang removed outdated test results
gioblu Sep 20, 2020
a5bb076
Merge pull request #365 from fredilarsen/master
gioblu Sep 28, 2020
722b008
PJDL v5.0 added preamble, SoftwareBitBang minor code-style fix (https…
gioblu Sep 28, 2020
2f3dbf7
SoftwareBitBang max preamble default config fix
gioblu Sep 28, 2020
34e683f
PJON README simplified
gioblu Sep 28, 2020
b403841
SoftwareBitBang README and comments minor fix
gioblu Sep 28, 2020
8f938ad
Outdated comments removed from SoftwareBitBang examples
gioblu Sep 28, 2020
979d750
Merge pull request #366 from Cimex97/feature/zephyr_support
gioblu Oct 1, 2020
3ba0e66
ZEPHYR config and examples modified to work with master (https://gith…
gioblu Oct 1, 2020
0e94bfe
@der-schne and @Cimex97 added to contributors' list
gioblu Oct 1, 2020
242596e
Merge pull request #14 from gioblu/master
fredilarsen Oct 1, 2020
f94b05f
PJON README updated os support
gioblu Oct 1, 2020
08f3c65
AnalogSampling README minor fix
gioblu Oct 1, 2020
28a4975
Examples inclusion and instantiation update
gioblu Oct 12, 2020
940c929
Zephyr config minor fix as suggested by @Cimex97
gioblu Oct 12, 2020
9e63455
Surrogate and routing examples update
gioblu Oct 13, 2020
16ddb52
interface/linux: delayMicroseconds changed to use select to avoid CPU…
Oct 15, 2020
236120c
LEDAR README minor fix
gioblu Oct 16, 2020
82776a5
Merge pull request #368 from Girgitt/iface-linux-delayusec-cpu-fix
gioblu Oct 18, 2020
2a3a1ca
new delayMicroseconds used instead of usleep in LINUX interface (http…
gioblu Oct 18, 2020
f4e492d
Find correct MAC for ESPNOW
aaron-neal Oct 18, 2020
5694d9c
Merge pull request #370 from Exine-Technology-Ltd/master
gioblu Oct 19, 2020
98836c5
@porkyneal added to contributors list (https://github.com/gioblu/PJON…
gioblu Oct 19, 2020
df4dfe4
ESPNOW code-style minor fix (https://github.com/gioblu/PJON/pull/370)
gioblu Oct 19, 2020
9d458a1
ESPNOW use PJON_NOT_ASSIGNED instead of 255 (https://github.com/giobl…
gioblu Oct 19, 2020
e2db3c2
routing examples update
gioblu Oct 25, 2020
023ee5e
ESPNOW examples update, missing PJON_INCLUDE_MAC error added
gioblu Oct 26, 2020
636ffed
PJONESPNOW.h defines PJON_INCLUDE_MAC (PJON's MAC is used in ESPNOW)
gioblu Oct 26, 2020
e7eb73a
12.1 -> 13.0 in README and comments
gioblu Oct 29, 2020
b764adb
zephyr added to library.json frameworks
gioblu Oct 29, 2020
57dd978
Fix transposed digits
Oct 29, 2020
0dd2b7b
Merge pull request #371 from Mirodin/patch-1
gioblu Oct 30, 2020
a8faaac
Merge pull request #15 from gioblu/master
fredilarsen Oct 31, 2020
4e10062
ThroughSerial README fixed broken BlinkTest example link
gioblu Nov 5, 2020
5706fc9
Merge branch 'master' of https://github.com/gioblu/PJON
gioblu Nov 5, 2020
c6f9cf9
version update
gioblu Nov 10, 2020
c3add3b
PJDL vs. 1-Wire added to SoftwareBitBang README
gioblu Nov 14, 2020
9df0150
Updated the MQTTTranslate strategy to use PJON_Packet_Info
fredilarsen Dec 13, 2020
7ef5378
Merge pull request #373 from fredilarsen/master
gioblu Dec 13, 2020
71353ef
Limited scope of some Windows-specific defines for LocalFile strategy
fredilarsen Dec 17, 2020
9b30f58
Merge pull request #376 from fredilarsen/master
gioblu Dec 17, 2020
c4d4a7f
added links of new publications
gioblu Jan 2, 2021
9813c7d
copyright year update
gioblu Jan 4, 2021
d0b95d0
Merge branch 'master' of https://github.com/gioblu/PJON
gioblu Jan 4, 2021
fd5fa07
add column to 1-wire comparison
jdaandersj Jan 24, 2021
2b79c3c
Merge pull request #383 from electronvoltlimited/master
gioblu Jan 24, 2021
77e968e
data-transmission additional info about functions added
gioblu Jan 30, 2021
e107d76
PJONDefines.h PJON_MASTER_ID default added
gioblu Jan 31, 2021
97f91f3
PJONLocal examples fixed strategy inclusion error
gioblu Jan 31, 2021
3d887fd
trademark property update
gioblu Jan 31, 2021
14a33cf
ThroughSerial README updated info about communication modes
gioblu Jan 31, 2021
706d6a1
ThroughSerial README minor fix
gioblu Jan 31, 2021
627eb10
SoftwareBitBang Surrogate avoid polling for ETCP
gioblu Feb 1, 2021
90a8961
SoftwareBitBang level conversion info added (https://github.com/giobl…
gioblu Mar 5, 2021
abe608c
random seed section added to configuration docs (https://github.com/g…
gioblu Mar 5, 2021
c56328d
Inline LINUX_Interface functions and remove global vars
rainerschoe Mar 13, 2021
c169ea3
Merge pull request #389 from rainerschoe/inlining
gioblu Mar 15, 2021
73baf8e
@rainerschoe added to contributors (https://github.com/gioblu/PJON/is…
gioblu Apr 2, 2021
6c40135
Merge branch 'master' of https://github.com/gioblu/PJON
gioblu Apr 2, 2021
f6b1dba
Biomimetic electronics broken link fixed
gioblu Apr 2, 2021
1f0bf33
documentation/data-transmission forward and forward_blocking added
gioblu Apr 2, 2021
efc0051
documentation index update
gioblu Apr 2, 2021
c7ad326
PJONDefines.h avoid unsafe initialization (https://github.com/gioblu/…
gioblu Apr 5, 2021
f3611f4
README update
gioblu Apr 21, 2021
4dff0bc
fix undefined behavior when using ports #406
rainerschoe Feb 6, 2022
2494f20
Merge pull request #408 from rainerschoe/master
gioblu Feb 10, 2022
4f0aa5f
removed comments
gioblu Feb 10, 2022
1fd1af5
Added PjonHL, removed outdated stuff from README
gioblu Feb 10, 2022
948e79d
obvious paragraph removed
gioblu Feb 10, 2022
3dcdc32
Shorter initial description in README
gioblu Feb 10, 2022
cceb79f
typo fixed in README
gioblu Feb 10, 2022
3634099
Update README.md
gioblu Feb 10, 2022
2db76ac
version update, copyright update
Feb 10, 2022
1be4b15
fixed comments of header bits
gioblu Feb 19, 2022
5f790b3
Missing encryption in ESPNOW activated (https://github.com/gioblu/PJO…
gioblu Apr 25, 2022
ec9dc80
Update ESPNOWHelper.h
Nov 4, 2022
8b3480b
Update README.md
gioblu Nov 24, 2022
5cdc62e
Update library.json
gioblu Nov 24, 2022
9999d34
Update addressing.md
gioblu Nov 24, 2022
0fd6ecf
Update PJON-dynamic-addressing-specification-v3.0.md
gioblu Nov 24, 2022
428d463
Update README.md
gioblu Nov 24, 2022
9fd6d0d
Update README.md
gioblu Nov 24, 2022
519b500
Update README.md
gioblu Nov 24, 2022
856016c
Update library.json
gioblu Nov 24, 2022
401951a
Update README.md
gioblu Dec 29, 2022
f8649dc
Update README.md
gioblu Dec 29, 2022
9945f32
Update README.md
gioblu Dec 29, 2022
38e36bb
Merge pull request #419 from playfultechnology/master
gioblu Dec 29, 2022
1d5854e
LoRa prepare_response sends correct values rather than zeros, added o…
jgOhYeah Jan 3, 2025
73b4f4a
Adding acknowledgement to documentation
jgOhYeah Jan 7, 2025
b0f8140
Merge pull request #434 from jgOhYeah/lora-ack
gioblu Jun 1, 2025
a3c4001
minor docs and codestyle fix
gioblu Jun 1, 2025
0fb7fa4
PJON-protocol-specification-v4.0 minor fix (removed obsolete unaccept…
gioblu Jun 1, 2025
b7a69a7
jgOhYeah acknowledgement added
gioblu Jun 1, 2025
7615fad
Added PJON_IO macros for Uno WiFi Rev 2, Nano Every by @kuchendieb
gioblu Jun 1, 2025
31937fd
typos fixed in various README files
gioblu Nov 7, 2025
2105368
fixed typos in TCPHelper_POSIX.h
gioblu Nov 7, 2025
028abc8
fixed typos in zephyr config
gioblu Nov 7, 2025
787379f
fixed bad english, typos, punctuation in README
gioblu Nov 7, 2025
13c907f
safety warning update
gioblu Nov 7, 2025
f6cc505
README multi-media support revert to list
gioblu Nov 7, 2025
d64b974
README minor change
gioblu Nov 7, 2025
a262588
Fix formatting of hot-swap support feature description
gioblu Nov 7, 2025
2bb20ce
Copyright update
gioblu Nov 8, 2025
a63d691
Merge branch 'master' of https://github.com/gioblu/PJON
gioblu Nov 8, 2025
1fa4131
added 50x50 PJON logo
gioblu Nov 8, 2025
0eec911
remark added to packet transmission section
gioblu Nov 10, 2025
b6a6ebc
minor formatting fix
gioblu Nov 10, 2025
9188f0e
added retransmission remark to packet trasmissions ection
gioblu Nov 10, 2025
ac1f891
Update PJON-protocol-specification-v4.0.md
gioblu Nov 10, 2025
5741076
Simplify PJON description in README
gioblu Nov 21, 2025
3f42e18
Add new academic study reference to README
gioblu Nov 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
All the software included in this project is experimental and it is distributed "AS IS" without any warranty, use it at your own risk. All specifications, all related software implementations and documentation released as a part of this repository are and will always remain free for personal, educational, experimental and commercial purposes.
All the software included in this project is experimental and it is distributed "AS IS" without any warranty, use it at your own risk.

Giovanni Blu Mitolo (gioscarab@gmail.com) Copyright 2010-2020
Giovanni Blu Mitolo (gioscarab@gmail.com) Copyright 2010-2025

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

Expand Down
63 changes: 28 additions & 35 deletions README.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ PJON is still in experimental phase and it distributed "AS IS" without any warra
The security of a system that uses PJON for communication mostly depends on the vulnerabilities exposed by the hardware and by the physical layer used. Consider that **only air-gapped wired local buses are undoubtely secure**. When connecting a local bus to the internet using [ESPNOW](/src/strategies/ESPNOW), [EthernetTCP](/src/strategies/EthernetTCP) or [LocalUDP](/src/strategies/LocalUDP), [GlobalUDP](/src/strategies/GlobalUDP) or [DualUDP](/src/strategies/DualUDP), all connected devices must be considered potentially compromised. It should be considered a good practice not to connect to the internet systems that may cause damage (fire, flood, data-leak) if hacked.

### Safety warning
When installing or maintaining a PJON network, extreme care must be taken to avoid any danger. If devices are connected to AC power you are exposed to a high chance of being electrocuted if hardware is not installed carefully and properly. If you are not experienced enough ask the support of a skilled technician and consider that many countries prohibit uncertified installations. When a [SoftwareBitBang](/src/strategies/SoftwareBitBang) bus is installed [interference mitigation](https://github.com/gioblu/PJON/wiki/Mitigate-interference) and [protective circuitry](https://github.com/gioblu/PJON/wiki/Protective-circuitry) guidelines must be followed. When working with an [AnalogSampling](/src/strategies/AnalogSampling) LED or laser based setup safety glasses must be worn and transceivers must be operated cautiously to avoid potential eye injuries. Before any practical test or a hardware purchase for a wireless [OverSampling](/src/strategies/OverSampling), [ThroughSerial](/src/strategies/ThroughSerial) or [ThroughLoRa](/src/strategies/ThroughLoRa) radio setup, compliance with government requirements and regulations must be ensured.
When testing PJON, take extreme care to avoid any danger. The implementation is experimental and may not behave as expected; use it at your own risk. If devices are connected to AC power, you face a high risk of electrocution unless the hardware is installed carefully and correctly. If you lack sufficient experience, seek assistance from a qualified technician, and be aware that many countries prohibit uncertified installations. When testing a [SoftwareBitBang](/src/strategies/SoftwareBitBang) bus follow [interference-mitigation](https://github.com/gioblu/PJON/wiki/Mitigate-interference) and [protective-circuitry](https://github.com/gioblu/PJON/wiki/Protective-circuitry) guidelines. When experimenting with an AnalogSampling setup, wear safety glasses and operate transceivers cautiously to prevent eye injuries. Before testing [OverSampling](/src/strategies/OverSampling), [ThroughSerial](/src/strategies/ThroughSerial) or [ThroughLoRa](/src/strategies/ThroughLoRa) radio communication, ensure that the frequency, power, and hardware comply with local regulations. When connecting a local bus to the Internet, treat all devices as potentially compromised, manipulated, or remotely actuated against your will. As a best practice, avoid connecting to the internet systems that could cause damage (fire, flood, data leakage) if hacked.

### Reporting a Vulnerability
If you discover a vulnerability in the specification or in the implementation please report it as soon as possible opening an [issue](https://github.com/gioblu/PJON/issues). If you have developed a fix, feel free to open a [pull request](https://github.com/gioblu/PJON/pulls).
4 changes: 2 additions & 2 deletions devices/sensors/LEDAR/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Many LEDARs can be connected to the same [SoftwareBitBang](/src/strategies/Softw

Its detection method is based on two interesting characteristics of LEDs:
- If hit by light, LEDs produce a tiny amount of electricity, thanks to the photo-electric effect
- LEDs used as detectors are generally more sensitive to the frequency they emit if used as emitters, making a couple of identical LEDs generally used for lighting, in two extremely efficient wireless transceivers that can be used for reflectometry or also for wireless communication using the [AnalogSampling](/src/strategies/AnalogSampling/README.md) strategy
- LEDs used as detectors are generally more sensitive to the frequency they emit if used as emitters, so a couple of identical LEDs generally used for lighting can be used successfully as wireless transceivers for reflectometry or optical wireless communication using the [AnalogSampling](/src/strategies/AnalogSampling/README.md) strategy

Its sampling method is based on two different samples:
- Background noise or ambient light sample `B`
Expand Down Expand Up @@ -79,6 +79,6 @@ The case is made by two elements and it has been printed using a customized Prus

Once crafted, ATtiny85 has to be flashed with the [LEDAR](software/LEDAR/LEDAR.ino) sketch using an ISP programmer, see [ATtiny85 interfacing](https://github.com/gioblu/PJON/wiki/ATtiny-interfacing)

LEDAR has been engineered with the strong feeling that, in the future, "smart houses" will not necessarily host a multitude of inefficient and convoluted embedded real-time operative systems, in whatever "thing", consuming a lot of power running Ethernet over WiFi and exposing vulnerabilities also out of the physical boundaries of houses. Otherwise, more probably, will host many dedicated microcontrollers connected to a wired, common, open-source, lightweight and less power consuming communication bus, unhackable without direct physical access to its wiring.
LEDAR has been engineered with the strong feeling that, in the future, "smart houses" will not necessarily host a multitude of inefficient embedded real-time operating systems in whatever "thing" while exposing vulnerabilities out of the physical boundaries of houses. Otherwise, more probably, will host many simple, less power-hungy microcontrollers, connected to a wired communication bus, unhackable without direct physical access to its wiring.

LEDAR should be considered as a general "guideline" on how PJON compatible devices can be published and shared with other PJON users through the [devices](../../README.md) directory. Feel free to make a pull request proposing a new device you have engineered.
12 changes: 10 additions & 2 deletions documentation/README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@

### Documentation index
- [Addressing](/documentation/addressing.md)
- [`set_id`](/documentation/addressing.md#local-mode) [`device_id`](/documentation/addressing.md#local-mode) [`get_bus_id`](/documentation/addressing.md#shared-mode) [`set_bus_id`](/documentation/addressing.md#shared-mode) [`get_mac`](/documentation/addressing.md#get-or-set-hardware-identifier) [`set_mac`](/documentation/addressing.md#get-or-set-hardware-identifier)
- [Configuration](/documentation/configuration.md)
- [`set_communication_mode`](/documentation/configuration.md#communication-mode) [`set_shared_network`](/documentation/configuration.md#network-mode) [`set_router`](/documentation/configuration.md#router-mode) [`include_sender_info`](/documentation/configuration.md#sender-information) [`set_crc_32`](/documentation/configuration.md#crc-configuration) [`set_packet_auto_deletion`](/documentation/configuration.md#packet-handling) [`set_acknowledge`](/documentation/configuration.md#acknowledgement) [`set_packet_id`](/documentation/configuration.md#packet-identification) [`include_port`](/documentation/configuration.md#network-service-identification) [`include_mac`](/documentation/configuration.md#hardware-identification)
- [Data reception](/documentation/data-reception.md)
- [`set_receiver`](/documentation/data-reception.md#data-reception) [`receive`](/documentation/data-reception.md#data-reception)
- [Data structures](/documentation/data-structures.md)
- [`PJON_Endpoint`](/documentation/data-structures.md#pjon_endpoint) [`PJON_Packet_Info`](/documentation/data-structures.md#pjon_packet_info)
- [Data transmission](/documentation/data-transmission.md)
- [`begin`](/documentation/data-transmission.md#begin) [`reply`](/documentation/data-transmission.md#reply) [`reply_blocking`](/documentation/data-transmission.md#reply_blocking) [`send`](/documentation/data-transmission.md#send) [`send_packet`](/documentation/data-transmission.md#send_packet) [`send_packet_blocking`](/documentation/data-transmission.md#send_packet_blocking) [`send_repeatedly`](/documentation/data-transmission.md#send_repeatedly) [`reply`](/documentation/data-transmission.md#reply) [`reply_blocking`](/documentation/data-transmission.md#reply_blocking) [`forward`](/documentation/data-transmission.md#forward) [`forward_blocking`](/documentation/data-transmission.md#forward_blocking)
- [Error handling](/documentation/error-handling.md)
- [IO setup](/documentation/io-setup.md)
- [`set_error`](/documentation/error-handling.md#error-handling)
- [Routing](/documentation/routing.md)

- [`PJONSimpleSwitch`](/documentation/routing.md#simpleswitch) [`PJONSwitch`](/documentation/routing.md#switch) [`PJONRouter`](/documentation/routing.md#router) [`PJONDynamicRouter`](/documentation/routing.md#dynamicrouter) [`PJONInteractiveRouter`](/documentation/routing.md#interactiverouter)
- [IO setup](/documentation/io-setup.md)
- [`strategy`](/documentation/io-setup.md#io-setup)
---

## Documentation
Expand Down
68 changes: 58 additions & 10 deletions documentation/addressing.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,36 @@

### Documentation index
- **[Addressing](/documentation/addressing.md)**
- [`set_id`](/documentation/addressing.md#local-mode) [`device_id`](/documentation/addressing.md#local-mode) [`get_bus_id`](/documentation/addressing.md#shared-mode) [`set_bus_id`](/documentation/addressing.md#shared-mode) [`get_mac`](/documentation/addressing.md#get-or-set-hardware-identifier) [`set_mac`](/documentation/addressing.md#get-or-set-hardware-identifier)
- [Configuration](/documentation/configuration.md)
- [`set_communication_mode`](/documentation/configuration.md#communication-mode) [`set_shared_network`](/documentation/configuration.md#network-mode) [`set_router`](/documentation/configuration.md#router-mode) [`include_sender_info`](/documentation/configuration.md#sender-information) [`set_crc_32`](/documentation/configuration.md#crc-configuration) [`set_packet_auto_deletion`](/documentation/configuration.md#packet-handling) [`set_acknowledge`](/documentation/configuration.md#acknowledgement) [`set_packet_id`](/documentation/configuration.md#packet-identification) [`include_port`](/documentation/configuration.md#network-service-identification) [`include_mac`](/documentation/configuration.md#hardware-identification)
- [Data reception](/documentation/data-reception.md)
- [`set_receiver`](/documentation/data-reception.md#data-reception) [`receive`](/documentation/data-reception.md#data-reception)
- [Data structures](/documentation/data-structures.md)
- [`PJON_Endpoint`](/documentation/data-structures.md#pjon_endpoint) [`PJON_Packet_Info`](/documentation/data-structures.md#pjon_packet_info)
- [Data transmission](/documentation/data-transmission.md)
- [`begin`](/documentation/data-transmission.md#begin) [`reply`](/documentation/data-transmission.md#reply) [`reply_blocking`](/documentation/data-transmission.md#reply_blocking) [`send`](/documentation/data-transmission.md#send) [`send_packet`](/documentation/data-transmission.md#send_packet) [`send_packet_blocking`](/documentation/data-transmission.md#send_packet_blocking) [`send_repeatedly`](/documentation/data-transmission.md#send_repeatedly) [`reply`](/documentation/data-transmission.md#reply) [`reply_blocking`](/documentation/data-transmission.md#reply_blocking) [`forward`](/documentation/data-transmission.md#forward) [`forward_blocking`](/documentation/data-transmission.md#forward_blocking)
- [Error handling](/documentation/error-handling.md)
- [IO setup](/documentation/io-setup.md)
- [`set_error`](/documentation/error-handling.md#error-handling)
- [Routing](/documentation/routing.md)
- [`PJONSimpleSwitch`](/documentation/routing.md#simpleswitch) [`PJONSwitch`](/documentation/routing.md#switch) [`PJONRouter`](/documentation/routing.md#router) [`PJONDynamicRouter`](/documentation/routing.md#dynamicrouter) [`PJONInteractiveRouter`](/documentation/routing.md#interactiverouter)
- [IO setup](/documentation/io-setup.md)
- [`strategy`](/documentation/io-setup.md#io-setup)

---

## Addressing
PJON objects can operate in local or shared mode. The PJON protocol v3.2 in [local](/specification/PJON-protocol-specification-v3.2.md#local-mode) mode supports connectivity for up to 254 devices using a 8bits device identifier, in [shared](/specification/PJON-protocol-specification-v3.2.md#shared-mode) mode supports connectivity for up to 4.294.967.295 buses (groups of devices) and up to 1.090.921.692.930 devices using a 32bits bus identifier and a 8bits device identifier.
PJON objects can operate in local or shared mode. The PJON protocol v4.0 in [local](/specification/PJON-protocol-specification-v4.0.md#local-mode) mode supports connectivity for up to 254 devices using a 8bits device identifier, in [shared](/specification/PJON-protocol-specification-v4.0.md#shared-mode) mode supports connectivity for up to 4.294.967.295 buses (groups of devices) and up to 1.090.921.692.930 devices using a 32bits bus identifier and a 8bits device identifier.

### Local mode

The simples way to instantiate PJON in local mode is the following:
The simplest way to instantiate PJON in local mode is as follows:
```cpp
PJON<SoftwareBitBang> bus;
PJONSoftwareBitBang bus;
```
When the object is instantiated without passing parameters it operates in local mode and the device identifier is set to 255 or `PJON_NOT_ASSIGNED`. PJON objects can be instantiated passing the device identifier:
```cpp
PJON<SoftwareBitBang> bus(44);
PJONSoftwareBitBang bus(44);
```
`bus` receives packets for device identifier 44 and ignores all others.

Expand All @@ -39,21 +48,60 @@ The device identifier of an object can be read after instantiation using `device
```cpp
uint8_t id = bus.device_id(); // Get device id
```
`device_id` returns 255 or `PJON_NOT_ASSIGNED` if the instance is initialised without configuring its device identifier.
`device_id` returns `PJON_NOT_ASSIGNED` or 255 if the instance is initialised without configuring its device identifier.

### Shared mode

if the medium used is private and not accessible from the outside world (wired network in home, business, industry) any bus indexing scheme can be used without worrying about bus id collision; if instead the network uses a shared medium, such as commonly used radio frequencies like LoRa, it is strongly suggested to request a unique PJON bus id [here](http://www.pjon.org/get-bus-id.php) to avoid collisions.
if the medium used is private and not accessible from the outside world (wired network in home, business, industry), bus ids can be used arbitrarily without any risk of collision; if instead the network uses a shared medium, for example on unlicensed radio frequencies with [ThroughLoRa](/src/strategies/ThroughLoRa).

Instantiation in shared mode:
```cpp
uint8_t bus_id[4] = {1, 2, 3, 4};
PJON<SoftwareBitBang> bus(bus_id, 44);
PJONSoftwareBitBang bus(bus_id, 44);
// Device id 44, bus id 1.2.3.4 in shared mode
```
### Get or set bus identifier

The bus id can be read and set after initialisation using `bus_id`:
Use `get_bus_id` to get a pointer to the bus id used by the instance:
```cpp
uint8_t bus_id[4];
memcpy(bus_id, bus.get_bus_id(bus_id), 4); // Copy bus id in bus_id
```

The bus id can be set after initialisation using `set_bus_id`:
```cpp
uint8_t bus_id[4] = {0, 0, 0, 1};
bus.set_bus_id(bus_id); // Set bus id
```

### Hardware identifier

PJON can optionally operate using the MAC address of the device:
```cpp
// Include MAC address feature
#define PJON_INCLUDE_MAC

// MAC address of the device
uint8_t mac[6] = {1, 2, 3, 4, 5, 6};

PJONSoftwareBitBang bus(mac);
// Local mode, device id PJON_NOT_ASSIGNED
```
This instantiation sets the MAC address, the device id set to `PJON_NOT_ASSIGNED` or 255 but can be changed afterwards as required. Packets containing a recipient's MAC address that is not equal to the one configured are discarded. PJON can operate in both local and shared mode while including MAC addresses. The feature can be disabled using `include_mac`:

```cpp
bus.include_mac(false);
```
### Get or set hardware identifier

Use `get_mac` to get a pointer to the mac address used by the instance:
```cpp
uint8_t mac[6];
memcpy(mac, bus.get_mac(mac), 6); // Copy mac in variable
```

The mac address can be set after initialisation using `set_mac`:
```cpp
bus.bus_id; // Get or set bus id
uint8_t mac[6] = {0, 0, 0, 0, 0, 1};
bus.set_mac(mac); // Set mac
```
Loading