Initial commit of files
This commit is contained in:
BIN
Imager/imager_1.4.exe
Normal file
BIN
Imager/imager_1.4.exe
Normal file
Binary file not shown.
BIN
Imager/imager_1.4_amd64.deb
Normal file
BIN
Imager/imager_1.4_amd64.deb
Normal file
Binary file not shown.
139
Projects/ADS-B/99-rtl-sdr.rules
Normal file
139
Projects/ADS-B/99-rtl-sdr.rules
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
#
|
||||||
|
# Copyright 2012-2013 Osmocom rtl-sdr project
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
# original RTL2832U vid/pid (hama nano, for example)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2832", MODE:="0666"
|
||||||
|
|
||||||
|
# RTL2832U OEM vid/pid, e.g. ezcap EzTV668 (E4000), Newsky TV28T (E4000/R820T) etc.
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", MODE:="0666"
|
||||||
|
|
||||||
|
# DigitalNow Quad DVB-T PCI-E card (4x FC0012?)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0413", ATTRS{idProduct}=="6680", MODE:="0666"
|
||||||
|
|
||||||
|
# Leadtek WinFast DTV Dongle mini D (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0413", ATTRS{idProduct}=="6f0f", MODE:="0666"
|
||||||
|
|
||||||
|
# Genius TVGo DVB-T03 USB dongle (Ver. B)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0458", ATTRS{idProduct}=="707f", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec Cinergy T Stick Black (rev 1) (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00a9", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec NOXON rev 1 (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b3", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec Deutschlandradio DAB Stick (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b4", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec NOXON DAB Stick - Radio Energy (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b5", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec Media Broadcast DAB Stick (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b7", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec BR DAB Stick (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b8", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec WDR DAB Stick (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b9", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec MuellerVerlag DAB Stick (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00c0", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec Fraunhofer DAB Stick (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00c6", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec Cinergy T Stick RC (Rev.3) (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d3", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec T Stick PLUS (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d7", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec NOXON rev 2 (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00e0", MODE:="0666"
|
||||||
|
|
||||||
|
# PixelView PV-DT235U(RN) (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1554", ATTRS{idProduct}=="5020", MODE:="0666"
|
||||||
|
|
||||||
|
# Astrometa DVB-T/DVB-T2 (R828D)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="15f4", ATTRS{idProduct}=="0131", MODE:="0666"
|
||||||
|
|
||||||
|
# Compro Videomate U620F (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0620", MODE:="0666"
|
||||||
|
|
||||||
|
# Compro Videomate U650F (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0650", MODE:="0666"
|
||||||
|
|
||||||
|
# Compro Videomate U680F (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0680", MODE:="0666"
|
||||||
|
|
||||||
|
# GIGABYTE GT-U7300 (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d393", MODE:="0666"
|
||||||
|
|
||||||
|
# DIKOM USB-DVBT HD
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d394", MODE:="0666"
|
||||||
|
|
||||||
|
# Peak 102569AGPK (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d395", MODE:="0666"
|
||||||
|
|
||||||
|
# KWorld KW-UB450-T USB DVB-T Pico TV (TUA9001)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d397", MODE:="0666"
|
||||||
|
|
||||||
|
# Zaapa ZT-MINDVBZP (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d398", MODE:="0666"
|
||||||
|
|
||||||
|
# SVEON STV20 DVB-T USB & FM (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d39d", MODE:="0666"
|
||||||
|
|
||||||
|
# Twintech UT-40 (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3a4", MODE:="0666"
|
||||||
|
|
||||||
|
# ASUS U3100MINI_PLUS_V2 (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3a8", MODE:="0666"
|
||||||
|
|
||||||
|
# SVEON STV27 DVB-T USB & FM (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3af", MODE:="0666"
|
||||||
|
|
||||||
|
# SVEON STV21 DVB-T USB & FM
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3b0", MODE:="0666"
|
||||||
|
|
||||||
|
# Dexatek DK DVB-T Dongle (Logilink VG0002A) (FC2580)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1101", MODE:="0666"
|
||||||
|
|
||||||
|
# Dexatek DK DVB-T Dongle (MSI DigiVox mini II V3.0)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1102", MODE:="0666"
|
||||||
|
|
||||||
|
# Dexatek DK 5217 DVB-T Dongle (FC2580)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1103", MODE:="0666"
|
||||||
|
|
||||||
|
# MSI DigiVox Micro HD (FC2580)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1104", MODE:="0666"
|
||||||
|
|
||||||
|
# Sweex DVB-T USB (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="a803", MODE:="0666"
|
||||||
|
|
||||||
|
# GTek T803 (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="b803", MODE:="0666"
|
||||||
|
|
||||||
|
# Lifeview LV5TDeluxe (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="c803", MODE:="0666"
|
||||||
|
|
||||||
|
# MyGica TD312 (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d286", MODE:="0666"
|
||||||
|
|
||||||
|
# PROlectrix DV107669 (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d803", MODE:="0666"
|
||||||
12
Projects/ADS-B/ads-b.sh
Executable file
12
Projects/ADS-B/ads-b.sh
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
ADSB=$HOME/ProbeStar/pi_tools/Projects/ADS-B/dump1090
|
||||||
|
|
||||||
|
if [ -d $ADSB ]; then
|
||||||
|
cd $ADSB
|
||||||
|
if [ ! -d /run/dump1090-fa ]; then
|
||||||
|
sudo mkdir -p /run/dump1090-fa
|
||||||
|
sudo chmod a+rwx /run/dump1090-fa
|
||||||
|
fi
|
||||||
|
./dump1090 --interactive --net --write-json /run/dump1090-fa/
|
||||||
|
fi
|
||||||
125
Projects/ADS-B/config.js
Normal file
125
Projects/ADS-B/config.js
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
// --------------------------------------------------------
|
||||||
|
//
|
||||||
|
// This file is to configure the configurable settings.
|
||||||
|
// Load this file before script.js file at gmap.html.
|
||||||
|
//
|
||||||
|
// --------------------------------------------------------
|
||||||
|
|
||||||
|
// -- Title Settings --------------------------------------
|
||||||
|
// Show number of aircraft and/or messages per second in the page title
|
||||||
|
PlaneCountInTitle = true;
|
||||||
|
MessageRateInTitle = false;
|
||||||
|
|
||||||
|
// -- Output Settings -------------------------------------
|
||||||
|
// The DisplayUnits setting controls whether nautical (ft, NM, knots),
|
||||||
|
// metric (m, km, km/h) or imperial (ft, mi, mph) units are used in the
|
||||||
|
// plane table and in the detailed plane info. Valid values are
|
||||||
|
// "nautical", "metric", or "imperial".
|
||||||
|
DisplayUnits = "nautical";
|
||||||
|
|
||||||
|
// -- Map settings ----------------------------------------
|
||||||
|
// These settings are overridden by any position information
|
||||||
|
// provided by dump1090 itself. All positions are in decimal
|
||||||
|
// degrees.
|
||||||
|
|
||||||
|
// Default center of the map.
|
||||||
|
DefaultCenterLat = 42.522230;
|
||||||
|
DefaultCenterLon = -83.23768;
|
||||||
|
// The google maps zoom level, 0 - 16, lower is further out
|
||||||
|
DefaultZoomLvl = 10;
|
||||||
|
|
||||||
|
// Center marker. If dump1090 provides a receiver location,
|
||||||
|
// that location is used and these settings are ignored.
|
||||||
|
|
||||||
|
SiteShow = false; // true to show a center marker
|
||||||
|
SiteLat = 42.522230; // position of the marker
|
||||||
|
SiteLon = -83.23768;
|
||||||
|
SiteName = "Proberts"; // tooltip of the marker
|
||||||
|
|
||||||
|
// -- Marker settings -------------------------------------
|
||||||
|
|
||||||
|
// These settings control the coloring of aircraft by altitude.
|
||||||
|
// All color values are given as Hue (0-359) / Saturation (0-100) / Lightness (0-100)
|
||||||
|
ColorByAlt = {
|
||||||
|
// HSL for planes with unknown altitude:
|
||||||
|
unknown : { h: 0, s: 0, l: 40 },
|
||||||
|
|
||||||
|
// HSL for planes that are on the ground:
|
||||||
|
ground : { h: 15, s: 80, l: 20 },
|
||||||
|
|
||||||
|
air : {
|
||||||
|
// These define altitude-to-hue mappings
|
||||||
|
// at particular altitudes; the hue
|
||||||
|
// for intermediate altitudes that lie
|
||||||
|
// between the provided altitudes is linearly
|
||||||
|
// interpolated.
|
||||||
|
//
|
||||||
|
// Mappings must be provided in increasing
|
||||||
|
// order of altitude.
|
||||||
|
//
|
||||||
|
// Altitudes below the first entry use the
|
||||||
|
// hue of the first entry; altitudes above
|
||||||
|
// the last entry use the hue of the last
|
||||||
|
// entry.
|
||||||
|
h: [ { alt: 2000, val: 20 }, // orange
|
||||||
|
{ alt: 10000, val: 140 }, // light green
|
||||||
|
{ alt: 40000, val: 300 } ], // magenta
|
||||||
|
s: 85,
|
||||||
|
l: 50,
|
||||||
|
},
|
||||||
|
|
||||||
|
// Changes added to the color of the currently selected plane
|
||||||
|
selected : { h: 0, s: -10, l: +20 },
|
||||||
|
|
||||||
|
// Changes added to the color of planes that have stale position info
|
||||||
|
stale : { h: 0, s: -10, l: +30 },
|
||||||
|
|
||||||
|
// Changes added to the color of planes that have positions from mlat
|
||||||
|
mlat : { h: 0, s: -10, l: -10 }
|
||||||
|
};
|
||||||
|
|
||||||
|
// For a monochrome display try this:
|
||||||
|
// ColorByAlt = {
|
||||||
|
// unknown : { h: 0, s: 0, l: 40 },
|
||||||
|
// ground : { h: 0, s: 0, l: 30 },
|
||||||
|
// air : { h: [ { alt: 0, val: 0 } ], s: 0, l: 50 },
|
||||||
|
// selected : { h: 0, s: 0, l: +30 },
|
||||||
|
// stale : { h: 0, s: 0, l: +30 },
|
||||||
|
// mlat : { h: 0, s: 0, l: -10 }
|
||||||
|
// };
|
||||||
|
|
||||||
|
// Outline color for aircraft icons with an ADS-B position
|
||||||
|
OutlineADSBColor = '#000000';
|
||||||
|
|
||||||
|
// Outline color for aircraft icons with a mlat position
|
||||||
|
OutlineMlatColor = '#4040FF';
|
||||||
|
|
||||||
|
SiteCircles = true; // true to show circles (only shown if the center marker is shown)
|
||||||
|
// In miles, nautical miles, or km (depending settings value 'DisplayUnits')
|
||||||
|
SiteCirclesDistances = new Array(100,150,200);
|
||||||
|
|
||||||
|
// Controls page title, righthand pane when nothing is selected
|
||||||
|
PageName = "PiAware SkyAware";
|
||||||
|
|
||||||
|
// Show country flags by ICAO addresses?
|
||||||
|
ShowFlags = true;
|
||||||
|
|
||||||
|
// Path to country flags (can be a relative or absolute URL; include a trailing /)
|
||||||
|
FlagPath = "flags-tiny/";
|
||||||
|
|
||||||
|
// Set to true to enable the ChartBundle base layers (US coverage only)
|
||||||
|
ChartBundleLayers = false;
|
||||||
|
|
||||||
|
// Provide a Bing Maps API key here to enable the Bing imagery layer.
|
||||||
|
// You can obtain a free key (with usage limits) at
|
||||||
|
// https://www.bingmapsportal.com/ (you need a "basic key")
|
||||||
|
//
|
||||||
|
// Be sure to quote your key:
|
||||||
|
// BingMapsAPIKey = "your key here";
|
||||||
|
//
|
||||||
|
BingMapsAPIKey = null;
|
||||||
|
|
||||||
|
// Turn on display of extra Mode S EHS / ADS-B v1/v2 data
|
||||||
|
// This is not polished yet (and so is disabled by default),
|
||||||
|
// currently it's just a data dump of the new fields with no UX work.
|
||||||
|
ExtendedData = false;
|
||||||
1
Projects/ADS-B/dump1090
Symbolic link
1
Projects/ADS-B/dump1090
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
/home/pi/src/dump1090/
|
||||||
17
Projects/ADS-B/dump1090-fa.conf
Normal file
17
Projects/ADS-B/dump1090-fa.conf
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#Alias /dump1090 /var/www/html/dump1090/
|
||||||
|
#Alias ^/dump1090-fa$ /dump1090-fa/
|
||||||
|
|
||||||
|
Alias /dump1090/data /tmp/dump1090-fa/
|
||||||
|
Alias /data /tmp/dump1090-fa/
|
||||||
|
|
||||||
|
<Directory “/var/www/html/dump1090/”>
|
||||||
|
Options All
|
||||||
|
AllowOverride All
|
||||||
|
SetEnvIf Request_URI “/dump1090/data/..json$" Header set “Access-Control-Allow-Origin” "”
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
<Directory “/run/dump1090-fa/”>
|
||||||
|
Options All
|
||||||
|
AllowOverride All
|
||||||
|
SetEnvIf Request_URI “/dump1090/data/..json$" Header set “Access-Control-Allow-Origin” "”
|
||||||
|
</Directory>
|
||||||
31
Projects/ADS-B/setup.sh
Executable file
31
Projects/ADS-B/setup.sh
Executable file
@ -0,0 +1,31 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# install software
|
||||||
|
sudo apt-get install apache2 rtl-sdr python-gi-cairo
|
||||||
|
|
||||||
|
# script
|
||||||
|
mkdir -p ~/bin
|
||||||
|
cp ads-b.sh ~/bin
|
||||||
|
|
||||||
|
# rules
|
||||||
|
sudo cp *.rules /etc/udev/rules.d
|
||||||
|
sudo service udev restart
|
||||||
|
|
||||||
|
# apache setup
|
||||||
|
sudo cp dump1090-fa.conf /etc/apache2/conf-enabled/
|
||||||
|
sudo service apache2 restart
|
||||||
|
|
||||||
|
# dump1090 build and install
|
||||||
|
mkdir -p ~/src
|
||||||
|
pushd ~/src/dump1090
|
||||||
|
git clone https://github.com/flightaware/dump1090
|
||||||
|
make
|
||||||
|
sudo mkdir -p /var/www/html/dump1090-fa
|
||||||
|
sudo cp -a public_html/* /var/www/html/dump1090-fa
|
||||||
|
popd
|
||||||
|
ln -fs ~/src/dump1090
|
||||||
|
|
||||||
|
# dump1090 config
|
||||||
|
sudo cp config.js /var/www/html/dump1090-fa
|
||||||
|
cd /var/www/html/dump1090-fa
|
||||||
|
sudo ln -fs /run/dump1090-fa data
|
||||||
14
Projects/GPS/etc/default/gpsd
Normal file
14
Projects/GPS/etc/default/gpsd
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Default settings for the gpsd init script and the hotplug wrapper.
|
||||||
|
|
||||||
|
# Start the gpsd daemon automatically at boot time
|
||||||
|
START_DAEMON="true"
|
||||||
|
|
||||||
|
# Use USB hotplugging to add new USB devices automatically to the daemon
|
||||||
|
USBAUTO="true"
|
||||||
|
|
||||||
|
# Devices gpsd should collect to at boot time.
|
||||||
|
# They need to be read/writeable, either by user gpsd or the group dialout.
|
||||||
|
DEVICES="/dev/ttyACM0"
|
||||||
|
|
||||||
|
# Other options you want to pass to gpsd
|
||||||
|
GPSD_OPTIONS="-G"
|
||||||
BIN
Projects/GPS/python/alert.wav
Normal file
BIN
Projects/GPS/python/alert.wav
Normal file
Binary file not shown.
3
Projects/GPS/python/setup.sh
Executable file
3
Projects/GPS/python/setup.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
sudo -H pip3 install gps serial pynmea2
|
||||||
24
Projects/GPS/python/test.py
Executable file
24
Projects/GPS/python/test.py
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
#! /usr/bin/python3
|
||||||
|
|
||||||
|
from gps import *
|
||||||
|
import time
|
||||||
|
|
||||||
|
gpsd = gps(mode=WATCH_ENABLE|WATCH_NEWSTYLE)
|
||||||
|
print('latitude\tlongitude\ttime utc\t\taltitude\tepv\tept\tspeed\tclimb') # '\t' = TAB to try and output the data in columns.
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
|
||||||
|
while True:
|
||||||
|
report = gpsd.next() #
|
||||||
|
if report['class'] == 'TPV':
|
||||||
|
out = ""
|
||||||
|
for i in ['lat','lon','time','alt','epv','ept','speed','climb']:
|
||||||
|
out += str(getattr(report,i,0.0)) + "\t"
|
||||||
|
print(out)
|
||||||
|
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
except (KeyboardInterrupt, SystemExit): #when you press ctrl+c
|
||||||
|
print("Done.\nExiting.")
|
||||||
|
|
||||||
1
Projects/GPS/python/test1.csv
Normal file
1
Projects/GPS/python/test1.csv
Normal file
@ -0,0 +1 @@
|
|||||||
|
42.521985, -83.237700, 10, 0
|
||||||
|
234
Projects/GPS/python/waypoint_alert.py
Executable file
234
Projects/GPS/python/waypoint_alert.py
Executable file
@ -0,0 +1,234 @@
|
|||||||
|
#! /usr/bin/python3
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import getopt
|
||||||
|
import csv
|
||||||
|
|
||||||
|
from math import *
|
||||||
|
from gps import *
|
||||||
|
from time import strftime, sleep
|
||||||
|
|
||||||
|
import RPi.GPIO as GPIO
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# sound stuff
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
import os
|
||||||
|
from sys import platform as _platform
|
||||||
|
|
||||||
|
sound_args = ""
|
||||||
|
|
||||||
|
def play_sound(file):
|
||||||
|
if _platform == "win32" or _platform == "win64" or _platform == "cygwin":
|
||||||
|
cmd = "wmplayer " + '"' + file + '"'
|
||||||
|
else:
|
||||||
|
cmd = "aplay -N " + sound_args + " " + file + " &"
|
||||||
|
os.system(cmd)
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# buzzer stuff
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
# https://www.instructables.com/Raspberry-Pi-Tutorial-How-to-Use-a-Buzzer/
|
||||||
|
|
||||||
|
buzzer=23
|
||||||
|
seconds=3
|
||||||
|
|
||||||
|
def buzzer_init():
|
||||||
|
GPIO.setwarnings(0)
|
||||||
|
GPIO.setmode(GPIO.BCM)
|
||||||
|
GPIO.setup(buzzer, GPIO.OUT)
|
||||||
|
|
||||||
|
def buzzer_on():
|
||||||
|
GPIO.output(buzzer, GPIO.HIGH)
|
||||||
|
play_sound("alert.wav")
|
||||||
|
|
||||||
|
def buzzer_off():
|
||||||
|
GPIO.output(buzzer, GPIO.LOW)
|
||||||
|
|
||||||
|
def buzzer_run():
|
||||||
|
global seconds
|
||||||
|
sec = seconds
|
||||||
|
while (sec):
|
||||||
|
buzzer_on()
|
||||||
|
sleep(0.5)
|
||||||
|
buzzer_off()
|
||||||
|
sleep(0.5)
|
||||||
|
sec = sec - 1
|
||||||
|
|
||||||
|
buzzer_init()
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# gps stuff
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
# https://ozzmaker.com/using-python-with-a-gps-receiver-on-a-raspberry-pi/
|
||||||
|
|
||||||
|
gpsd = gps(mode=WATCH_ENABLE|WATCH_NEWSTYLE)
|
||||||
|
|
||||||
|
#
|
||||||
|
# GPS receiver is ublox from V2V-MD at 10x seconds
|
||||||
|
#
|
||||||
|
|
||||||
|
# http://www.movable-type.co.uk/scripts/latlong.html
|
||||||
|
|
||||||
|
earth_flatening = 1.0/298.257223563
|
||||||
|
earth_radius = 6378137.0
|
||||||
|
|
||||||
|
def haversine(lat1, lon1, lat2, lon2):
|
||||||
|
"""
|
||||||
|
Calculate the great circle distance between two points
|
||||||
|
on the earth (specified in decimal degrees)
|
||||||
|
"""
|
||||||
|
# convert decimal degrees to radians
|
||||||
|
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
|
||||||
|
|
||||||
|
# haversine formula
|
||||||
|
dlon = lon2 - lon1
|
||||||
|
dlat = lat2 - lat1
|
||||||
|
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
|
||||||
|
c = 2 * asin(sqrt(a))
|
||||||
|
|
||||||
|
# 6367 km is the radius of the Earth
|
||||||
|
return earth_radius * c
|
||||||
|
|
||||||
|
def roydistance(lat1, lon1, lat2, lon2):
|
||||||
|
"""
|
||||||
|
Calculate the great circle distance between two points
|
||||||
|
on the earth (specified in decimal degrees)
|
||||||
|
"""
|
||||||
|
# convert decimal degrees to radians
|
||||||
|
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
|
||||||
|
|
||||||
|
# Roy's method
|
||||||
|
f1 = (1.0 - earth_flatening)
|
||||||
|
|
||||||
|
top = (pow((lon2-lon1), 2) * pow(cos(lat1), 2)) + pow(lat2-lat1, 2)
|
||||||
|
bot = pow(sin(lat1), 2) + (pow(f1, 2) * pow(cos(lat1), 2))
|
||||||
|
|
||||||
|
dist = f1 * earth_radius * sqrt(top/bot)
|
||||||
|
|
||||||
|
return dist
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# virtual cones
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
# node from csv (each line is lat, long, distance, next code# (optional)):
|
||||||
|
# 42.522040, -83.237594, 5, 1
|
||||||
|
|
||||||
|
def read_csv(csv_file):
|
||||||
|
file_csv = open(csv_file)
|
||||||
|
data_csv = csv.reader(file_csv)
|
||||||
|
virtual_cones = list(data_csv)
|
||||||
|
total_cones = len(virtual_cones)
|
||||||
|
print(csv_file, total_cones)
|
||||||
|
# print(virtual_cones)
|
||||||
|
return virtual_cones
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# main
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
def main(argv):
|
||||||
|
virtual_list = [[],[],[],[],[],[],[],[],[]]
|
||||||
|
virtual_count = 0
|
||||||
|
current_cone = [0,0,0,0,0,0,0,0]
|
||||||
|
total_cones = [0,0,0,0,0,0,0,0]
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.mkdir("logs")
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
log = open(strftime("logs/way-%Y%m%d-%H%M.log"), 'a')
|
||||||
|
log.write("Time,Latitude,Longitude,Heading,Speed,Description\n")
|
||||||
|
|
||||||
|
try:
|
||||||
|
opts, args = getopt.getopt(argv,"",["",""])
|
||||||
|
except getopt.GetoptError:
|
||||||
|
print(sys.argv[0], '<csvfile>')
|
||||||
|
sys.exit(2)
|
||||||
|
# for opt, arg in opts:
|
||||||
|
# nop
|
||||||
|
|
||||||
|
# slurp in files for each list
|
||||||
|
for arg in args:
|
||||||
|
virtual_cones = read_csv(arg)
|
||||||
|
current_cone[virtual_count] = 0
|
||||||
|
total_cones[virtual_count] = 0
|
||||||
|
virtual_list[virtual_count] = virtual_cones
|
||||||
|
virtual_count = virtual_count + 1
|
||||||
|
|
||||||
|
# print(virtual_list)
|
||||||
|
buzz_no = 0
|
||||||
|
max_buzz = 3
|
||||||
|
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
report = gpsd.next() #
|
||||||
|
if report['class'] == 'TPV':
|
||||||
|
|
||||||
|
time = getattr(report, 'time', 0.0)
|
||||||
|
lat = getattr(report, 'lat', 0.0)
|
||||||
|
lon = getattr(report, 'lon', 0.0)
|
||||||
|
heading = getattr(report, 'track', 0.0)
|
||||||
|
speed = getattr(report, 'speed', 0.0)
|
||||||
|
|
||||||
|
log.write(time+","+str(lat)+","+str(lon)+","+str(heading)+","+str(speed))
|
||||||
|
# print("Position: %f, %f, %d" % (lat, lon, speed))
|
||||||
|
|
||||||
|
# walk through each list
|
||||||
|
for i in range(0, virtual_count):
|
||||||
|
# end of list?
|
||||||
|
if current_cone[i] >= total_cones[i]:
|
||||||
|
current_cone[i] = 0
|
||||||
|
|
||||||
|
# check first node for reset
|
||||||
|
if current_cone[i]:
|
||||||
|
# node from csv (each line is lat, long, distance, next code#)
|
||||||
|
row = virtual_list[i][0]
|
||||||
|
cone_lat = float(row[0])
|
||||||
|
cone_lon = float(row[1])
|
||||||
|
cone_dist = float(row[2])
|
||||||
|
dist = haversine(lat, lon, cone_lat, cone_lon) / 1000.0
|
||||||
|
if dist < cone_dist:
|
||||||
|
current_cone[i] = 0
|
||||||
|
|
||||||
|
# node from csv (each line is lat, long, distance, next code#)
|
||||||
|
row = virtual_list[i][current_cone[i]]
|
||||||
|
cone_lat = float(row[0])
|
||||||
|
cone_lon = float(row[1])
|
||||||
|
cone_dist = float(row[2])
|
||||||
|
|
||||||
|
# next cone
|
||||||
|
cone_next = current_cone[i] + 1
|
||||||
|
try:
|
||||||
|
cone_next = int(row[3])
|
||||||
|
except:
|
||||||
|
cone_next = 0
|
||||||
|
|
||||||
|
# distance between vehicle and cone
|
||||||
|
# dist = haversine(lat, lon, cone_lat, cone_lon)
|
||||||
|
dist = roydistance(lat, lon, cone_lat, cone_lon)
|
||||||
|
|
||||||
|
# check distance trigger
|
||||||
|
if (dist < cone_dist and buzz_no < max_buzz):
|
||||||
|
log.write(".Waypoint="+str(i)+":"+str(current_cone[i]))
|
||||||
|
print("Waypoint %d:%d reached: %f, %f, %d" % (i, current_cone[i], lat, lon, speed))
|
||||||
|
buzzer_run()
|
||||||
|
current_cone[i] = cone_next
|
||||||
|
buzz_no = buzz_no + 1
|
||||||
|
else:
|
||||||
|
buzz_no = 0
|
||||||
|
log.write("\n")
|
||||||
|
|
||||||
|
# time.sleep(0.2)
|
||||||
|
|
||||||
|
except (KeyboardInterrupt, SystemExit): #when you press ctrl+c
|
||||||
|
log.close()
|
||||||
|
print("Done.\nExiting.")
|
||||||
|
|
||||||
|
main(sys.argv[1:])
|
||||||
5
Projects/GPS/setup.sh
Executable file
5
Projects/GPS/setup.sh
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
sudo apt-get install -y gpsd gpsd-clients gpsbabel libgps-dev python-gps
|
||||||
|
|
||||||
|
sudo cp etc/default/gpsd /etc/default/gpsd
|
||||||
Binary file not shown.
BIN
Radio/Pi-Star/3.4/Pi-Star_Config_25-Nov-2020.zip
Normal file
BIN
Radio/Pi-Star/3.4/Pi-Star_Config_25-Nov-2020.zip
Normal file
Binary file not shown.
BIN
Radio/Pi-Star/3.4/Pi-Star_Config_nano-spot_29-Feb-2020.zip
Normal file
BIN
Radio/Pi-Star/3.4/Pi-Star_Config_nano-spot_29-Feb-2020.zip
Normal file
Binary file not shown.
Binary file not shown.
BIN
Radio/Pi-Star/4.1/Pi-Star_Config_30-Nov-2020.zip
Normal file
BIN
Radio/Pi-Star/4.1/Pi-Star_Config_30-Nov-2020.zip
Normal file
Binary file not shown.
15
Radio/Pi-Star/wpa_supplicant.conf
Normal file
15
Radio/Pi-Star/wpa_supplicant.conf
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
|
||||||
|
update_config=1
|
||||||
|
ap_scan=1
|
||||||
|
fast_reauth=1
|
||||||
|
country=US
|
||||||
|
|
||||||
|
network={
|
||||||
|
#ssid="HamGate"
|
||||||
|
ssid=48616d47617465
|
||||||
|
#psk="Roughnecks Ho"
|
||||||
|
psk=3a631133a09e414b21a433ecef9be7cb09fa8442e15e4b4eb21ce156ab44bcf4
|
||||||
|
id_str="0"
|
||||||
|
priority=100
|
||||||
|
}
|
||||||
|
|
||||||
139
Radio/RTL-SDR/99-rtl-sdr.rules
Normal file
139
Radio/RTL-SDR/99-rtl-sdr.rules
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
#
|
||||||
|
# Copyright 2012-2013 Osmocom rtl-sdr project
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
# original RTL2832U vid/pid (hama nano, for example)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2832", MODE:="0666"
|
||||||
|
|
||||||
|
# RTL2832U OEM vid/pid, e.g. ezcap EzTV668 (E4000), Newsky TV28T (E4000/R820T) etc.
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", MODE:="0666"
|
||||||
|
|
||||||
|
# DigitalNow Quad DVB-T PCI-E card (4x FC0012?)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0413", ATTRS{idProduct}=="6680", MODE:="0666"
|
||||||
|
|
||||||
|
# Leadtek WinFast DTV Dongle mini D (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0413", ATTRS{idProduct}=="6f0f", MODE:="0666"
|
||||||
|
|
||||||
|
# Genius TVGo DVB-T03 USB dongle (Ver. B)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0458", ATTRS{idProduct}=="707f", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec Cinergy T Stick Black (rev 1) (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00a9", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec NOXON rev 1 (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b3", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec Deutschlandradio DAB Stick (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b4", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec NOXON DAB Stick - Radio Energy (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b5", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec Media Broadcast DAB Stick (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b7", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec BR DAB Stick (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b8", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec WDR DAB Stick (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b9", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec MuellerVerlag DAB Stick (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00c0", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec Fraunhofer DAB Stick (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00c6", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec Cinergy T Stick RC (Rev.3) (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d3", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec T Stick PLUS (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d7", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec NOXON rev 2 (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00e0", MODE:="0666"
|
||||||
|
|
||||||
|
# PixelView PV-DT235U(RN) (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1554", ATTRS{idProduct}=="5020", MODE:="0666"
|
||||||
|
|
||||||
|
# Astrometa DVB-T/DVB-T2 (R828D)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="15f4", ATTRS{idProduct}=="0131", MODE:="0666"
|
||||||
|
|
||||||
|
# Compro Videomate U620F (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0620", MODE:="0666"
|
||||||
|
|
||||||
|
# Compro Videomate U650F (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0650", MODE:="0666"
|
||||||
|
|
||||||
|
# Compro Videomate U680F (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0680", MODE:="0666"
|
||||||
|
|
||||||
|
# GIGABYTE GT-U7300 (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d393", MODE:="0666"
|
||||||
|
|
||||||
|
# DIKOM USB-DVBT HD
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d394", MODE:="0666"
|
||||||
|
|
||||||
|
# Peak 102569AGPK (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d395", MODE:="0666"
|
||||||
|
|
||||||
|
# KWorld KW-UB450-T USB DVB-T Pico TV (TUA9001)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d397", MODE:="0666"
|
||||||
|
|
||||||
|
# Zaapa ZT-MINDVBZP (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d398", MODE:="0666"
|
||||||
|
|
||||||
|
# SVEON STV20 DVB-T USB & FM (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d39d", MODE:="0666"
|
||||||
|
|
||||||
|
# Twintech UT-40 (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3a4", MODE:="0666"
|
||||||
|
|
||||||
|
# ASUS U3100MINI_PLUS_V2 (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3a8", MODE:="0666"
|
||||||
|
|
||||||
|
# SVEON STV27 DVB-T USB & FM (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3af", MODE:="0666"
|
||||||
|
|
||||||
|
# SVEON STV21 DVB-T USB & FM
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3b0", MODE:="0666"
|
||||||
|
|
||||||
|
# Dexatek DK DVB-T Dongle (Logilink VG0002A) (FC2580)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1101", MODE:="0666"
|
||||||
|
|
||||||
|
# Dexatek DK DVB-T Dongle (MSI DigiVox mini II V3.0)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1102", MODE:="0666"
|
||||||
|
|
||||||
|
# Dexatek DK 5217 DVB-T Dongle (FC2580)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1103", MODE:="0666"
|
||||||
|
|
||||||
|
# MSI DigiVox Micro HD (FC2580)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1104", MODE:="0666"
|
||||||
|
|
||||||
|
# Sweex DVB-T USB (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="a803", MODE:="0666"
|
||||||
|
|
||||||
|
# GTek T803 (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="b803", MODE:="0666"
|
||||||
|
|
||||||
|
# Lifeview LV5TDeluxe (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="c803", MODE:="0666"
|
||||||
|
|
||||||
|
# MyGica TD312 (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d286", MODE:="0666"
|
||||||
|
|
||||||
|
# PROlectrix DV107669 (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d803", MODE:="0666"
|
||||||
12
bin/ads-b.sh
Executable file
12
bin/ads-b.sh
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
ADSB=$HOME/ProbeStar/pi_tools/Projects/ADS-B/dump1090-fa
|
||||||
|
|
||||||
|
if [ -d $ADSB ]; then
|
||||||
|
cd $ADSB
|
||||||
|
if [ ! -d /run/dump1090-fa ]; then
|
||||||
|
sudo mkdir -p /run/dump1090-fa
|
||||||
|
sudo chmod a+rwx /run/dump1090-fa
|
||||||
|
fi
|
||||||
|
./dump1090 --interactive --net --write-json /run/dump1090-fa/
|
||||||
|
fi
|
||||||
9
bin/os-update.sh
Executable file
9
bin/os-update.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
sudo apt update
|
||||||
|
sudo apt full-upgrade
|
||||||
|
|
||||||
|
sudo apt purge -y bluealsa pimixer
|
||||||
|
sudo apt install -y pulseaudio-module-bluetooth
|
||||||
|
|
||||||
|
sudo reboot
|
||||||
Reference in New Issue
Block a user