Plan
The goal of this is to generate an OpenSource equivalent to something like the BearTooth, or the Gotenna.
OSI Layers
Layer 1/2
- SDR
- Hardware
- Full Duplex
- BladeRF
- LimeSDR
- Half Duplex
- YARD Stick One
- TI CC1111 - 300-348 MHz, 391-464 MHz and 782-928 MHz, in modulations: ASK, OOK, GFSK, 2-FSK, 4-FSK and MSK.
- CDMA Data:
- Wifi: github.com/bastible/gr-ieee802-11
- FHSS/DSSS: github.com/DaulPavid/gr-spread
- Full Duplex
- Location:
- GNURadio GlobalPositioningSystem
- gnss-sdr
- GNSS:
- GPS
- GLONASS
- Galileo
- IRNSS
- Compass/Beidou
- GDPS
- SBAS - Satellite Based Augmentation Services
- Current
- WAAS
- US - DOT/FAA - Works with GPS
- EGNOS - Europe - Works with Galileo
- MSAS - Japan
- WAAS
- Under development
- GAGAN - India
- SDCM - Russia
- SNAS - China
- Current
- LORAN-C (decomissioned)
- Plane location: Mode-S/ADS-B radio
- Hardware
- Layer 2/3
- IPv4
- IPv6 (Neighbor Discovery using zeroconf)
- Meshed VPN
- tinc
- tinc 1.1 Parameters: Ed25519 crypto public/private keypair, Neighbors
- MANET / OLSR / MDP
- OLSR
- ProjectSPAN:
- https://www.mitre.org/research/technology-transfer/open-source-software/smartphone-ad-hoc-networking-span
- https://github.com/TeamJedi/ProjectSPAN
- https://github.com/TeamJedi/SPAN
- https://www.mitre.org/sites/default/files/pdf/12_2943.pdf
- Defcon 20 - Off-Grid Communications with Android: Meshing the Mobile World
- https://www.youtube.com/watch?v=sTpJuWcCsR0
- https://github.com/TeamJedi/SPAN/tree/master/docs/DefCon%2020
- DerbyCon - SPAN Preso
- https://github.com/TeamJedi/SPAN/blob/master/docs/DerbyCon%202/DerbyCon-SPAN_Preso.pdf
- ServalProject:
- http://www.servalproject.org/
- https://github.com/servalproject
- https://github.com/servalproject/ServalMaps
- https://github.com/servalproject/lbard
- http://developer.servalproject.org/dokuwiki/doku.php?id=content:tech:rhizome
- B.A.T.M.A.N / BMX6 / BMX7
- Project Byzantium
- Freifunk
- Babel
- Battlemesh
- Libertas OLPC MESH - Marvell 88W8388 USB
- “802.11s”
- https://en.wikipedia.org/wiki/IEEE_802.11s
- https://github.com/o11s/open80211s/wiki/HOWTO
- https://wireless.wiki.kernel.org/en/developers/documentation/ieee80211/802.11s
- https://wiki.openwrt.org/doc/howto/mesh.80211s
- https://wiki.freebsd.org/WifiMesh
- http://wiki.laptop.org/go/Mesh_Network_Details - OLPC
- “802.11ah” - HaLow - Meshed 900MHz wifi for IoT
- 902-928 MHz in the US (26 MHz bandwidth)
- 863-868 MHz in Europe (5 MHz bandwidth)
- 916.5-927.5 MHz in Japan (11 MHz bandwidth)
- “802.11af” - TV Spectrum - Meshed 54MHz - 790MHz in “whitespaces”
- https://github.com/NELOUNI/gr-ieee-802-11af
- Native Android IBSS adhoc on cyanogenmod 10/11/12:
- http://www.thinktube.com/android-tech/46-android-wifi-ibss
- mdns Neighbor Discovery?
- avahi (mdns zeroconf)
- Layer 4/5
- Neighbor Discovery and Crypto
- Peergos w/ipfs.io: https://github.com/Peergos/Peergos/blob/master/README.md
- Parameters: public/private keypair, unique random namespace
- Neighbor Discovery and Crypto
- Layer 7
- Android
- Web (Cordova)
- Offline Map with self and neighbor location
- Free
- OpenStreetMaps
- https://github.com/digidem/osm-p2p-db
- http://trevorpowell.com/2015/02/20/mapbox-gl-js-with-offline-vector-tiles-on-cordova/
- https://github.com/trevorpowell/mapbox-gl-js-cordova-offline
- https://github.com/trevorpowell/mapbox-gl-js-cordova-offline-example
- https://github.com/afsuarez/mapsforge-cordova-plugin
- https://github.com/robotnic/mapsforge-cordova-plugin-example
- EON Maps
- https://github.com/pubnub/eon
- Leaflet Maps
- https://github.com/perliedman/leaflet-realtime
- Commercial
- Cesium.js - https://cesiumjs.org/ (Bing!)
- https://cesiumjs.org/demos/LiveTrack24.html
- https://cesiumjs.org/demos/TacMap.html
- MapBox - https://github.com/Telerik-Verified-Plugins/Mapbox
- https://github.com/systemed/tilemaker
- https://github.com/klokantech/osm-vector-cordova
- Cesium.js - https://cesiumjs.org/ (Bing!)
- OpenStreetMaps
- Free
- WebRTC
- Communicate with neighbors using text, voice, video
- https://github.com/crosswalk-project/cordova-plugin-crosswalk-webview
- Offline Map with self and neighbor location
- Web (Cordova)
- Android
Hardware
For a SDR capable “base-station”, there are two potential ways to approach this:
- Root an Android phone and run the SDR directly.
- Use an embedded controller like a raspberry pi 3 to make a Jed set “base station” using on-board wifi or bluetooth tethering.
An rtlsdr isn’t going to do 2.4ghz sniffing, and is receive only. A hackrf is half-duplex and can only transmit or receive at any given time.
For full-duplex SDR, the two primary contenders are:
- Nuand BladeRF: https://github.com/Nuand/bladeRF
- LimeSDR: http://www.limemicro.com/
Alternatively, two half-duplex devices would suffice.
For half-duplex, he did look at the TI cc1111 based devices:
- http://www.ti.com/lit/ds/symlink/cc1110-cc1111.pdf
Such as:
- https://github.com/greatscottgadgets/yardstick/wiki/YARD-Stick-One
- http://gollumrf.com/
- http://int3.cc/collections/usb/products/rfcat
Those do top out at 1Ghz, however.
Other promising TI chipsets that also support 2.4Ghz are the CC1310 and CC1350:
- http://www.ti.com/tool/launchxl-cc1310
- http://www.ti.com/tool/launchxl-cc1350
- http://processors.wiki.ti.com/index.php/CC13xx_CC26xx_Tools_Overview#CC1350_Launchpad
- http://dev.ti.com/tirex/content/tirtos_cc13xx_cc26xx_2_20_00_06/resources/cc1350LaunchPad/project0/images/cc1350_launchpad_explained.PNG
Of these, LimeSDR looks like it will not ship in time (end of this month).
I have two Nuand BladeRF devices for developing and testing SDR. One with the amplifier, one without.
Final note on Android network peering:
https://android-developers.googleblog.com/2017/07/announcing-nearby-connections-20-fully.html
“Nearby Connections uses WiFi, Bluetooth LE & Classic Bluetooth under the hood to discover and establish connections to nearby devices. It abstracts away the inherent complexity of these radios by leveraging the strengths of each, while circumventing their respective weaknesses. Aside from the obvious advantage of sidestepping the pain of dealing with the vagaries of these radios across different OS versions and devices, this abstraction enables seamlessly upgrading the bandwidth of a connection by switching between the radios as and when it makes sense, as well as getting invisible over-the-air updates to use new radio technology as it becomes available – with no change whatsoever in the application code.”
Going forward, you may want to look into using that abstraction layer instead.