Compare commits
10 commits
a94c35f665
...
f63b179c43
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f63b179c43 | ||
|
|
b6d612411b | ||
|
|
140412ff78 | ||
|
|
cf44131e18 | ||
| ec4eed475b | |||
| 8cd2b1f737 | |||
| 31a212666b | |||
| b7ed142f00 | |||
| 4cc53facc6 | |||
| abef0122f3 |
81 changed files with 18791 additions and 280 deletions
33
app/cert.pem
Normal file
33
app/cert.pem
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIFqTCCA5GgAwIBAgIUaDekQPmZSXzcQt/QS8T/oqxenYwwDQYJKoZIhvcNAQEL
|
||||
BQAwZDELMAkGA1UEBhMCREUxEDAOBgNVBAgMB0JhdmFyaWExEDAOBgNVBAcMB0tv
|
||||
ZWRpdHoxHDAaBgNVBAoME2luZm9AbGFuZy1kaWV0ZXIuZGUxEzARBgNVBAMMCjEw
|
||||
MC42NC4wLjYwHhcNMjYwODA0MDgzNzAzWhcNMjcwODA0MDgzNzAzWjBkMQswCQYD
|
||||
VQQGEwJERTEQMA4GA1UECAwHQmF2YXJpYTEQMA4GA1UEBwwHS29lZGl0ejEcMBoG
|
||||
A1UECgwTaW5mb0BsYW5nLWRpZXRlci5kZTETMBEGA1UEAwwKMTAwLjY0LjAuNjCC
|
||||
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK7/8wzUdh1QVQIrcPX50tif
|
||||
Mr0GY4UIgF+9d4YaHPLct4MVqkW/Vw4o4zxjkehZdHiXIMxUnS2dnaxEl+HsPUDy
|
||||
Cwr58nunimXqGxSofYLG5AT3lqSE++/be56UZ4sq+gkf3J/HNOoEKrAw5PL8xPNK
|
||||
83hpyjDJ4+t6eEFgbuyUdgZE+AC2ZEZul4PYZ1FpaHTyg87zTO7i5IQdVtaPMBYw
|
||||
vspI9k7p65fH0bPOU/h3LmULJCzDvAmUb0GXhEewDkda3XHHWRyFKvAk6eatW4md
|
||||
ySkvJKgLCKt7JEceS5DNjNVwkWNFGwR2IkWywcG+IAj5mXiNfO2oRXusjDMd+T0v
|
||||
B/lijWSrizsrFaq2ow9Ux/6TriRHsYqvscMlj+6fzK2eVmJ4vbuDRATrL/AP8J+3
|
||||
6r/fdWvZ/11n4mnasO1Z2FpbbQCpLPdQs+vFcZKXYZI5Y0qJ7DjSI6ClmKs+sejS
|
||||
E85Z104LMdm7mkmrsB6UrlpPatbzW0IJOd9XCbtVnDJlVyLmrFku8uIntUqrttt2
|
||||
wEvxfMlwxhqZkD7d6Z1aosV8dVep6wVf+xkd6UeLA60GVG/UOAL8OQTGxxTK+uBe
|
||||
DdqQiTFJPjHYssV/SmReuESpfM/l+prwcLAJqpgSzQWNoDM66pKJqyqPwVpEyU98
|
||||
tmszuNOsmabMh079S1BPAgMBAAGjUzBRMB0GA1UdDgQWBBTT9DOUJio3dT7NuwVh
|
||||
D2CcJzPqTjAfBgNVHSMEGDAWgBTT9DOUJio3dT7NuwVhD2CcJzPqTjAPBgNVHRMB
|
||||
Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQAf/K8i5fHPn+GZEMwSk8Hbakt6
|
||||
/X5qtPommkmTX3QHYi9HwEd26S1841GWAHPlWhdnzucbsHL08r+1Ler3FXL8XlPL
|
||||
Ivu/3PCC0rMlW+6/5goYPeA1Ev5bl0ioGH3DpKzPPVA+qdThZVOE780oRN0T6kFY
|
||||
jK1jOY45tEHTdwCcx9IyFR7bWelQnYeHorSrfLi+ydzoWvD1wPG6/GebdkfCdqNj
|
||||
aBv7T2Tu/kEqrfft/4VH9llD2PtgSZMygsxGLp3sgdjZui2++bm/VdZCwO1zzh07
|
||||
8BmyYjOGs1zxmhFjFVVL8gpwtZX3Eymbm8hqogXDGLIrWAVOisd71deGgnLNHjCf
|
||||
nAbS5IFE1G1sAc3Qq+8Ny1gtsOZNrkdaNV2hrPvA2wiJwssQj5WKXem4er4t0eP6
|
||||
zOxUgmecK5MSKlJ/B0qxj2MDtX0LxgVBeD1tj7rScRlcsnuD7lNtDPx7vy7MmRJF
|
||||
I4Ko88AgvtccAtxLsBa9cb6hTOFbco0eNc2mBnekUY4TDjIvRQza54DyTf0/S528
|
||||
x/jiUUTPCqG6mSNa71FmTzibH9JJLsu3mVpBAKiKd00k4vUls+4AedtD00VuszWg
|
||||
wXuKRC/CqOojFY6eZyXQOuXbR4XKGH8LSaHrl11jkQ3DB4v259t46oKtCo55Abtw
|
||||
sIrfnoH2iDkjjjM+zg==
|
||||
-----END CERTIFICATE-----
|
||||
29
app/config.json
Normal file
29
app/config.json
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"web_port": ":8080",
|
||||
"ssl_cert": "cert.pem",
|
||||
"ssl_key": "key.pem",
|
||||
"i2c_bus": "1",
|
||||
"ads1115_address_1": 72,
|
||||
"ads1115_address_2": 73,
|
||||
"name_adc1_ch0": "23cm",
|
||||
"factor_adc1_ch0": 2.0,
|
||||
"name_adc1_ch1": "13 cm",
|
||||
"factor_adc1_ch1": 2.0,
|
||||
"name_adc1_ch2": "9 cm",
|
||||
"factor_adc1_ch2": 2.0,
|
||||
"name_adc1_ch3": "6 cm",
|
||||
"factor_adc1_ch3": 2.0,
|
||||
"name_adc2_ch0": "3 cm",
|
||||
"factor_adc2_ch0": 2.0,
|
||||
"relais_pins": [
|
||||
{"id": 1, "name": "Relais 1 (230V Hauptschalter)", "gpio": "GPIO12"},
|
||||
{"id": 2, "name": "USB-Relais 1 (Reserve)", "gpio": "USB_CH1"},
|
||||
{"id": 3, "name": "USB-Relais 2 23 cm", "gpio": "USB_CH2"},
|
||||
{"id": 4, "name": "USB-Relais 3 13 cm", "gpio": "USB_CH3"},
|
||||
{"id": 5, "name": "USB-Relais 4 9 cm", "gpio": "USB_CH4"},
|
||||
{"id": 6, "name": "USB-Relais 5 6 cm", "gpio": "USB_CH5"},
|
||||
{"id": 7, "name": "USB-Relais 6 3 cm", "gpio": "USB_CH6"},
|
||||
{"id": 8, "name": "USB-Relais 7 (Reserve)", "gpio": "USB_CH7"},
|
||||
{"id": 9, "name": "USB-Relais 8 (Reserve)", "gpio": "USB_CH8"}
|
||||
]
|
||||
}
|
||||
36
app/install.sh
Executable file
36
app/install.sh
Executable file
|
|
@ -0,0 +1,36 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "🚀 Starte automatische Einrichtung des Spannung-Monitors..."
|
||||
|
||||
# Pfade und Benutzer auf dem aktuellen Pi ermitteln
|
||||
PI_DIR=$(pwd)
|
||||
PI_USER=$(whoami)
|
||||
|
||||
# Architektur des Betriebssystems prüfen
|
||||
ARCH=$(uname -m)
|
||||
if [ "$ARCH" = "aarch64" ]; then
|
||||
BINARY="spannung-arm64"
|
||||
echo "🎯 64-Bit OS erkannt. Nutze: $BINARY"
|
||||
else
|
||||
BINARY="spannung-arm32_7"
|
||||
echo "🎯 32-Bit OS erkannt. Nutze: $BINARY"
|
||||
fi
|
||||
|
||||
# Platzhalter in der Service-Datei direkt auf dem Pi ersetzen
|
||||
sed -i "s|{{TARGET_DIR}}|$PI_DIR|g" spannung.service
|
||||
sed -i "s|{{TARGET_USER}}|$PI_USER|g" spannung.service
|
||||
sed -i "s|{{BINARY}}|$BINARY|g" spannung.service
|
||||
|
||||
echo "📝 Service-Datei wurde erfolgreich für dieser Pi konfiguriert."
|
||||
|
||||
# Service in das Systemverzeichnis kopieren und aktivieren
|
||||
echo "⚙️ Kopiere Service-Datei nach /etc/systemd/system/..."
|
||||
sudo cp spannung.service /etc/systemd/system/spannung.service
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable spannung.service
|
||||
|
||||
echo "▶️ Starte den Dienst..."
|
||||
sudo systemctl restart spannung.service
|
||||
|
||||
echo "✅ Fertig! Der Spannung-Monitor läuft und der Autostart ist aktiv."
|
||||
52
app/key.pem
Normal file
52
app/key.pem
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
-----BEGIN PRIVATE KEY-----
|
||||
MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCu//MM1HYdUFUC
|
||||
K3D1+dLYnzK9BmOFCIBfvXeGGhzy3LeDFapFv1cOKOM8Y5HoWXR4lyDMVJ0tnZ2s
|
||||
RJfh7D1A8gsK+fJ7p4pl6hsUqH2CxuQE95akhPvv23uelGeLKvoJH9yfxzTqBCqw
|
||||
MOTy/MTzSvN4acowyePrenhBYG7slHYGRPgAtmRGbpeD2GdRaWh08oPO80zu4uSE
|
||||
HVbWjzAWML7KSPZO6euXx9GzzlP4dy5lCyQsw7wJlG9Bl4RHsA5HWt1xx1kchSrw
|
||||
JOnmrVuJnckpLySoCwireyRHHkuQzYzVcJFjRRsEdiJFssHBviAI+Zl4jXztqEV7
|
||||
rIwzHfk9Lwf5Yo1kq4s7KxWqtqMPVMf+k64kR7GKr7HDJY/un8ytnlZieL27g0QE
|
||||
6y/wD/Cft+q/33Vr2f9dZ+Jp2rDtWdhaW20AqSz3ULPrxXGSl2GSOWNKiew40iOg
|
||||
pZirPrHo0hPOWddOCzHZu5pJq7AelK5aT2rW81tCCTnfVwm7VZwyZVci5qxZLvLi
|
||||
J7VKq7bbdsBL8XzJcMYamZA+3emdWqLFfHVXqesFX/sZHelHiwOtBlRv1DgC/DkE
|
||||
xscUyvrgXg3akIkxST4x2LLFf0pkXrhEqXzP5fqa8HCwCaqYEs0FjaAzOuqSiasq
|
||||
j8FaRMlPfLZrM7jTrJmmzIdO/UtQTwIDAQABAoICABsOoMYhjWI/5ZIweZvWdLFL
|
||||
KqhLi2nqDsB+xghPvkfAijEe0ZT3c17Rlzy4NRAvJeZv5hbMQwG8Bmu4WUwJiiOh
|
||||
/hoZhifJ7N3lYdWCWDw27dIPc9UGaKuaYap6+JLDDNC0rUMY+kdFE1KVj2M7Dg/Y
|
||||
d/zB9+HY5+qkegu6/LuLGBUlEbvjzMI6XtEi+D/VTodnvasVjBYSslFI9gBg4txI
|
||||
zMma7qufLZlp6t7kQ7BoFkjHfbWGzT/P7u8THaqLKnysLGPnS2cGTJq/olh+V5JX
|
||||
TonAa72oTb6xtey3CZOfFwDN5vS/HmEaC3d/nsc1UwpViSiN+7xaZuUrIFbWR2Qv
|
||||
0wL29RGnG2doBlrYTic6gOIaq8ywpFkvqqFpgVhX74MZYntbb+vHU3HezGGDhFoR
|
||||
SWXh+QP3Po48i1ueslKBby3+V5v0gzJx8JI78lEbDYGVPj2BlrZwC37jZGxGa5hf
|
||||
JwJZMGRRKiBSaWIQV0VPIrCaP4n2uL28R/JXe6/byJIIns0/kyNcaPiPwY35Zny5
|
||||
BToozOCztThGJZA2WwHBEyz79n11V/THU5302gum47pspOghkwyco+7bxHQy9YXc
|
||||
q2iO+cddzsArfr7Q5yagqKcIuIdQ37vpvRDZhxfVfSSRE3qTiq74gb9dN1QMgd0L
|
||||
gmn6ozzhRDA6Kg5Ps6b5AoIBAQDxdqVuwKmf3S5KNOdvO7GeAb8JqfvY3P0/TVNN
|
||||
qwB6cHpapntQihabrwo7H6K7GGH6Xyn2P0+Ma1a5NnlYPw5gyDqEQI3r8B9oUJsQ
|
||||
BpsXlGOgVwjALg/kTv8cGgw9fbaKVmK0MZSYX8hAcpIbYQ5tb9GWJMhNw/gidwky
|
||||
50fHf3DCmwBrfgb+FoAeIM9NLpOJ9LQWwhgkohzL3qT5t05z8a3i6B5BdjEIqkoA
|
||||
7sNOKaqWpNmwPl5WJjV4RjGG7mCuu1uDEGeVlaQ97rQtHNls21TwJSTncnndoats
|
||||
kj0fT+yk4RgEmIo+/iQgTzb2g+KrzZI1qi7w/DOGANKc+FrZAoIBAQC5iPzTGj9a
|
||||
5jImQX/RpGiBnpa6u49aaVWvL/tWWlrHrd7q5tjQKBwWYOzncgEYLgl17P4QAvst
|
||||
1lDwtvEz9DezAAdP/EQDilsMMQBDG5Wv6itkMet/YlcGnd0ZyvYyNR2KUrQhPS0K
|
||||
SDjJjcgaHiKBjDY+1JKUU3RwDCaTjMSbuSS57XVVrtnjk7xit+Nr/rrhzWUhlzz2
|
||||
Cp4008D17CEcjqfCW8inKi7Ekv+znys2N/BYkaqeKF6Ci99lH8J1Pc6IzuncXs/I
|
||||
vADKmQauUn29kj7qDPbh8IorfQHt1mBm5rjfpnHDaDsnDlR9mgg5+TSK9SoQiFq0
|
||||
L4IYxugPLPtnAoIBAQDHfqEbqe36+ICAKslzazxKMWMmltxOxfYt0LMcnkWc40UT
|
||||
lCyZ1Bztr2aihnaqYXDBrNI8cv5EI4LZLxp+QEqex48hKTyYTCGGy+HxEaQdjSnq
|
||||
lT3TmbrjhCjdjN/EBhNEpC6UdcoxQiFurbntCPkkjZf5lpYvOdPOlc5x0gfJ2Y7O
|
||||
GcX1CYC5eNmNCsp7GBophpUroFzWF2H3RhHDhyE4RdrGd8RXjVDhud++eYW/FEmu
|
||||
gLCiHkVOo+7VWhkdQ+F5O65V0L3kJmg2CvutsgIpH+VDK00cM8ZfyGybHQ+GyT/Y
|
||||
0WhIk8bUWKB8WTYt4bTrAMLlt59k1tmywwc/TSmxAoIBADA2PqyEl44BX2q9fn91
|
||||
n4p/MV/YuUmfMZrSdxdbZ1eYAOM9lX2RzqqqCSWjZFFqNR8ltGdovuiMVoAWqdr8
|
||||
TTUAfuX0AaCB5WLnoM/PbThHO3tP1YhGf6LCht/a89rcHo8BKrmwcfHIDqmhZCwV
|
||||
RJYxXy84gdZ1UT6EicmxvK1SkQ6Xe/QF+ay/iSaF7lzz1pAylWMDL94nqDDGDdBZ
|
||||
ycjn8QP6Ycu+lGSUZknAxLPUGWqKf7GVf+mgey6F8DwTEYZPbknLgWcCI5qB5VCL
|
||||
Mw194UdkkwrnPKBMXaH2IRrcPZIwaEOE5Eoj2STCT/zwmwy45HNjW16TMdVKaqb2
|
||||
42UCggEBAJ1wbENrdb7NJlt52AsdAoPEHAgXv0rJXQrtpmOgDJ8SaOq2EWtYDHmL
|
||||
LqGj91Uz1ciexk8RCaP431aqZVHRiYZVhWRb95TS1j29d8dI6+TbheaiMVx7XAZG
|
||||
mX5StASrLqp2caYQi4QofuBmebidFfZJG27bHSMBMR5oh8MgNWaCGA4zRx6AF3dP
|
||||
Ref5JWXs8+yiQWpXRUyZjyHmafHR3kB4YpxTjNAfQNSRnASdNfd6dcfb8Bc/XSe+
|
||||
ZDTRor7NoHXa2pHgLY+jssDOJMvejxbKwXiVYZRu93TjDiYXf9V9iLiG809IErar
|
||||
a7pqwbMVR1jya0Ujochc8hWhyqzgMKA=
|
||||
-----END PRIVATE KEY-----
|
||||
BIN
app/spannung-arm32_7
Executable file
BIN
app/spannung-arm32_7
Executable file
Binary file not shown.
BIN
app/spannung-arm64
Executable file
BIN
app/spannung-arm64
Executable file
Binary file not shown.
26
app/spannung.service
Normal file
26
app/spannung.service
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
[Unit]
|
||||
Description=Spannung Control Service
|
||||
After=network-online.target i2c.service
|
||||
Wants=network-online.target
|
||||
StartLimitIntervalSec=60s
|
||||
StartLimitBurst=3
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
# Vorprüfung ALS ROOT ausführen
|
||||
ExecStartPre=/bin/bash -c 'for i in {1..5}; do /usr/sbin/i2cdetect -y 1 | grep -q 48 && /usr/sbin/i2cdetect -y 1 | grep -q 49 && exit 0; sleep 2; done; exit 1'
|
||||
|
||||
ExecStart={{TARGET_DIR}}/{{BINARY}}
|
||||
WorkingDirectory={{TARGET_DIR}}
|
||||
User={{TARGET_USER}}
|
||||
Restart=on-failure
|
||||
RestartSec=5s
|
||||
|
||||
# KORREKTUR: Verhindert, dass STRG+C über SSH den Dienst beim Beenden des Logs killt
|
||||
KillMode=process
|
||||
|
||||
StandardOutput=append:{{TARGET_DIR}}/spannung.log
|
||||
StandardError=append:{{TARGET_DIR}}/spannung.log
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
10
app/version.json
Normal file
10
app/version.json
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"version": "0.2.2",
|
||||
"build_date": "04.08.2026 um 10:33 by DD1DLH",
|
||||
"description": "Messung von zwei Spannung und Steuerung von Relais",
|
||||
"features": [
|
||||
"ADS1115-Abfrage über go-i2c",
|
||||
"Weboberfläche mit Steuerbuttons für Reilais",
|
||||
"Definiton der GPIO in der config.json"
|
||||
]
|
||||
}
|
||||
97
app/web/server.go
Normal file
97
app/web/server.go
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
package web
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"html/template"
|
||||
"net/http"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type RelaisData struct {
|
||||
ID int `json:"id"`
|
||||
Name string `json:"name"`
|
||||
State bool `json:"state"`
|
||||
}
|
||||
|
||||
type StatusResponse struct {
|
||||
V1 float64 `json:"v1"`
|
||||
V2 float64 `json:"v2"`
|
||||
V3 float64 `json:"v3"`
|
||||
V4 float64 `json:"v4"`
|
||||
V5 float64 `json:"v5"`
|
||||
Names []string `json:"names"` // Neu: Sendet die Namen als Array mit
|
||||
Relais []RelaisData `json:"relais"`
|
||||
Version string `json:"version"`
|
||||
BuildDate string `json:"build_date"`
|
||||
}
|
||||
|
||||
type Server struct {
|
||||
port string
|
||||
readVoltFunc func(channel int) float64
|
||||
toggleFunc func(id int)
|
||||
getRelais func() []RelaisData
|
||||
versionFunc func() (string, string)
|
||||
getNamesFunc func() []string // Neu hinzugefügt
|
||||
}
|
||||
|
||||
func NewServer(port string, readVolt func(int) float64, toggle func(int), getRelais func() []RelaisData, getVersion func() (string, string), getNames func() []string) *Server {
|
||||
return &Server{
|
||||
port: port,
|
||||
readVoltFunc: readVolt,
|
||||
toggleFunc: toggle,
|
||||
getRelais: getRelais,
|
||||
versionFunc: getVersion,
|
||||
getNamesFunc: getNames, // Neu hinzugefügt
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Server) Start(certFile, keyFile string) error {
|
||||
http.HandleFunc("/", s.handleIndex)
|
||||
http.HandleFunc("/api/status", s.handleAPIStatus)
|
||||
http.HandleFunc("/api/toggle", s.handleAPIToggle)
|
||||
return http.ListenAndServeTLS(s.port, certFile, keyFile, nil)
|
||||
}
|
||||
|
||||
func (s *Server) handleIndex(w http.ResponseWriter, r *http.Request) {
|
||||
ver, date := s.versionFunc()
|
||||
tmpl, err := template.ParseFiles("web/static/index.html")
|
||||
if err != nil {
|
||||
http.Error(w, "Template nicht gefunden: "+err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
data := StatusResponse{
|
||||
Names: s.getNamesFunc(), // Namen für das erste Rendern bereitstellen
|
||||
Relais: s.getRelais(),
|
||||
Version: ver,
|
||||
BuildDate: date,
|
||||
}
|
||||
tmpl.Execute(w, data)
|
||||
}
|
||||
|
||||
func (s *Server) handleAPIStatus(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
ver, date := s.versionFunc()
|
||||
resp := StatusResponse{
|
||||
V1: s.readVoltFunc(0),
|
||||
V2: s.readVoltFunc(1),
|
||||
V3: s.readVoltFunc(2),
|
||||
V4: s.readVoltFunc(3),
|
||||
V5: s.readVoltFunc(4),
|
||||
Names: s.getNamesFunc(),
|
||||
Relais: s.getRelais(),
|
||||
Version: ver,
|
||||
BuildDate: date,
|
||||
}
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}
|
||||
|
||||
func (s *Server) handleAPIToggle(w http.ResponseWriter, r *http.Request) {
|
||||
idStr := r.URL.Query().Get("id")
|
||||
id, err := strconv.Atoi(idStr)
|
||||
if err == nil {
|
||||
s.toggleFunc(id)
|
||||
}
|
||||
s.handleAPIStatus(w, r)
|
||||
}
|
||||
148
app/web/static/index.html
Normal file
148
app/web/static/index.html
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Funkstation Steuerung</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<style>
|
||||
body { font-family: 'Segoe UI', Arial, sans-serif; text-align: center; background: #0f172a; color: #f8fafc; padding: 20px; }
|
||||
/* Maximale Breite erhöht, um Platz für das zweispaltige Layout zu bieten */
|
||||
.container { max-width: 1000px; margin: 0 auto; }
|
||||
|
||||
/* Das neue Haupt-Layout: Links Relais, rechts Spannungen */
|
||||
.main-layout {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 20px;
|
||||
align-items: start;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
/* Spalten-Container für korrekte Ausrichtung */
|
||||
.layout-col {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.card { background: #1e293b; padding: 20px; margin: 15px 0; border-radius: 12px; box-shadow: 0 4px 6px -1px rgba(0,0,0,0.3); border: 1px solid #334155; text-align: center; }
|
||||
.val { font-size: 2.5em; color: #38bdf8; font-weight: bold; font-family: monospace; }
|
||||
.grid { display: grid; grid-template-columns: 1fr; gap: 12px; margin-top: 15px; }
|
||||
.btn { width: 100%; padding: 14px; font-size: 1.1em; border: none; border-radius: 8px; cursor: pointer; font-weight: bold; transition: background 0.2s, transform 0.1s; color: white; }
|
||||
.btn:active { transform: scale(0.98); }
|
||||
.btn-on { background: #ef4444; }
|
||||
.btn-on:hover { background: #dc2626; }
|
||||
.btn-off { background: #10b981; }
|
||||
.btn-off:hover { background: #059669; }
|
||||
.footer-nav { margin-top: 25px; font-size: 0.9em; color: #64748b; clear: both; }
|
||||
|
||||
/* Responsive Anpassung: Schaltet auf Smartphones automatisch untereinander um */
|
||||
@media (max-width: 768px) {
|
||||
.main-layout { grid-template-columns: 1fr; gap: 0; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>Funkstations-Monitor</h1>
|
||||
|
||||
<div class="main-layout">
|
||||
<!-- LINKE SPALTE: Relaissteuerung -->
|
||||
<div class="layout-col">
|
||||
<div class="card">
|
||||
<h3>Relaissteuerung</h3>
|
||||
<div class="grid">
|
||||
{{range .Relais}}
|
||||
<button class="btn btn-off" id="relais-btn-{{.ID}}" onclick="toggleRelais({{.ID}})">
|
||||
{{.Name}}: Laden...
|
||||
</button>
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- RECHTE SPALTE: Spannungsanzeigen -->
|
||||
<div class="layout-col">
|
||||
<div class="card">
|
||||
<h3>{{index .Names 0}}</h3>
|
||||
<div class="val" id="v1">--.-- V</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h3>{{index .Names 1}}</h3>
|
||||
<div class="val" id="v2">--.-- V</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h3>{{index .Names 2}}</h3>
|
||||
<div class="val" id="v3">--.-- V</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h3>{{index .Names 3}}</h3>
|
||||
<div class="val" id="v4">--.-- V</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h3>{{index .Names 4}}</h3>
|
||||
<div class="val" id="v5">--.-- V</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer-nav">
|
||||
Live-Aktualisierung aktiv <br>
|
||||
<span style="font-size: 0.8em; color: #475569; margin-top: 5px; display: block;">
|
||||
Version {{.Version}} ({{.BuildDate}})
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function updateUI(data) {
|
||||
document.getElementById('v1').innerText = data.v1.toFixed(2) + ' V';
|
||||
document.getElementById('v2').innerText = data.v2.toFixed(2) + ' V';
|
||||
document.getElementById('v3').innerText = data.v3.toFixed(2) + ' V';
|
||||
document.getElementById('v4').innerText = data.v4.toFixed(2) + ' V';
|
||||
document.getElementById('v5').innerText = data.v5.toFixed(2) + ' V';
|
||||
|
||||
data.relais.forEach(r => {
|
||||
const btn = document.getElementById(`relais-btn-${r.id}`);
|
||||
if (btn) {
|
||||
if (r.name && r.name.toLowerCase().includes('reserve')) {
|
||||
btn.className = 'btn btn-off';
|
||||
btn.innerText = `${r.name}: GESPERRT`;
|
||||
btn.disabled = true;
|
||||
btn.style.opacity = '0.3';
|
||||
btn.style.cursor = 'not-allowed';
|
||||
return;
|
||||
}
|
||||
|
||||
if (r.state) {
|
||||
btn.className = 'btn btn-on';
|
||||
btn.innerText = `${r.name}: AKTIV (Ausschalten)`;
|
||||
} else {
|
||||
btn.className = 'btn btn-off';
|
||||
btn.innerText = `${r.name}: INAKTIV (Einschalten)`;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function loadStatus() {
|
||||
fetch('/api/status')
|
||||
.then(response => response.json())
|
||||
.then(data => updateUI(data))
|
||||
.catch(err => console.error('Fehler beim Laden des Status:', err));
|
||||
}
|
||||
|
||||
function toggleRelais(id) {
|
||||
fetch(`/api/toggle?id=${id}`)
|
||||
.then(response => response.json())
|
||||
.then(data => updateUI(data))
|
||||
.catch(err => console.error('Fehler beim Schalten:', err));
|
||||
}
|
||||
|
||||
loadStatus();
|
||||
setInterval(loadStatus, 2000);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
135
build.sh
135
build.sh
|
|
@ -8,79 +8,122 @@ USER_HOME=$HOME
|
|||
# 2. Version & Datum aus version.json auslesen
|
||||
if [ -f version.json ]; then
|
||||
VERSION=$(jq -r '.version' version.json)
|
||||
DATE=$(jq -r '.date' version.json)
|
||||
DATE=$(jq -r '.build_date' version.json)
|
||||
else
|
||||
VERSION="1.0.0"
|
||||
DATE=$(date +'%Y-%m-%d')
|
||||
fi
|
||||
|
||||
echo "🔧 Baue Spannung-Monitor v$VERSION ($DATE)"
|
||||
echo "🔧 Baue Spannung-Monitor $VERSION ($DATE) für Raspberry Pi 3 & 4"
|
||||
|
||||
# KORREKTUR: Einfache Anführungszeichen fangen die Leerzeichen für den Go-Linker ab
|
||||
LDFLAGS="-X 'main.Version=$VERSION' -X 'main.BuildDate=$DATE'"
|
||||
|
||||
# Multi-Plattform Builds ausführen
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$LDFLAGS" -o spannung-amd64 .
|
||||
echo "✅ Fertig gebaut: ./spannung-amd64"
|
||||
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags "$LDFLAGS" -o spannung-arm64 .
|
||||
echo "✅ Fertig gebaut: ./spannung-arm64"
|
||||
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build -ldflags "$LDFLAGS" -o spannung-arm32_7 .
|
||||
echo "✅ Fertig gebaut: ./spannung-arm32_7"
|
||||
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 go build -ldflags "$LDFLAGS" -o spannung-arm32_6 .
|
||||
echo "✅ Fertig gebaut: ./spannung-arm32_6"
|
||||
|
||||
# Dateiberechtigungen setzen
|
||||
chmod +x ./spannung-*
|
||||
|
||||
# Zielverzeichnis 'app' neu erstellen
|
||||
rm -rf app
|
||||
# Zielverzeichnis 'app' bereinigen und neu erstellen
|
||||
rm -rf app spannung-arm*
|
||||
mkdir app
|
||||
|
||||
# Binaries, Konfiguration und Web-Ordner kopieren
|
||||
cp spannung-* ./app/
|
||||
# --- BUILD-PROZESS MIT CGO ---
|
||||
|
||||
# Definiere die Pfade zu den lokalen sysroots
|
||||
SYSROOT_64="$USER_HOME/spannung/sysroot-arm64"
|
||||
SYSROOT_32="$USER_HOME/spannung/sysroot-arm32"
|
||||
|
||||
# 1. Für 64-Bit Raspberry Pi (Standard bei Pi 4 und neueren Pi 3 OS)
|
||||
echo "📦 Kompiliere für ARM64 (64-Bit)..."
|
||||
CGO_LDFLAGS="-L$SYSROOT_64/lib/aarch64-linux-gnu -L$SYSROOT_64/usr/lib/aarch64-linux-gnu -Wl,-rpath-link=$SYSROOT_64/lib/aarch64-linux-gnu -Wl,-rpath-link=$SYSROOT_64/usr/lib/aarch64-linux-gnu" \
|
||||
CGO_ENABLED=1 GOOS=linux GOARCH=arm64 CC=aarch64-linux-gnu-gcc \
|
||||
go build -ldflags "$LDFLAGS" -o ./app/spannung-arm64 .
|
||||
echo "✅ Fertig gebaut: ./app/spannung-arm64"
|
||||
|
||||
# 2. Für 32-Bit Raspberry Pi (Klassisch für Pi 3 / ältere OS)
|
||||
echo "📦 Kompiliere für ARM32 v7 (32-Bit)..."
|
||||
CGO_LDFLAGS="-L$SYSROOT_32/lib/arm-linux-gnueabihf -L$SYSROOT_32/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link=$SYSROOT_32/lib/arm-linux-gnueabihf -Wl,-rpath-link=$SYSROOT_32/usr/lib/arm-linux-gnueabihf" \
|
||||
CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 CC=arm-linux-gnueabihf-gcc \
|
||||
go build -ldflags "$LDFLAGS" -o ./app/spannung-arm32_7 .
|
||||
echo "✅ Fertig gebaut: ./app/spannung-arm32_7"
|
||||
|
||||
# Dateiberechtigungen im Zielordner setzen
|
||||
chmod +x ./app/spannung-*
|
||||
|
||||
# Konfiguration und Web-Ordner kopieren
|
||||
cp config.json ./app/
|
||||
cp version.json ./app/
|
||||
cp web ./app/ -r
|
||||
|
||||
# 3. Die Service-Datei universell generiert (nutzt systemd %h/%u Specifiers)
|
||||
# 3. Die Service-Datei mit Platzhaltern generieren
|
||||
cat << 'EOF' > ./app/spannung.service
|
||||
# ==============================================================================
|
||||
# KURZANLEITUNG ZUR INSTALLATION UND VERWALTUNG
|
||||
# ==============================================================================
|
||||
# 1. Datei kopieren nach: /etc/systemd/system/spannung.service
|
||||
# 2. Systemd neu laden: sudo systemctl daemon-reload
|
||||
# 3. Autostart aktivieren: sudo systemctl enable spannung.service
|
||||
# 4. Dienst starten: sudo systemctl start spannung.service
|
||||
# ==============================================================================
|
||||
|
||||
[Unit]
|
||||
Description=Spannung Control Service
|
||||
After=network-online.target i2c.service
|
||||
Wants=network-online.target
|
||||
StartLimitIntervalSec=0
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStartPre=/bin/bash -c 'for i in {1..10}; do i2cdetect -y 1 | grep -E "^40:" | grep -q -E "\b48\b" && i2cdetect -y 1 | grep -E "^40:" | grep -q -E "\b49\b" && exit 0; echo "warte auf ADS1115 Module..."; sleep 2; done; exit 1'
|
||||
|
||||
ExecStart=%h/spannung/app/spannung-arm32_7
|
||||
WorkingDirectory=%h/spannung/app
|
||||
User=%u
|
||||
Restart=on-failure
|
||||
RestartSec=5s
|
||||
StartLimitIntervalSec=60s
|
||||
StartLimitBurst=3
|
||||
|
||||
StandardOutput=append:%h/spannung/app/spannung.log
|
||||
StandardError=append:%h/spannung/app/spannung.log
|
||||
[Service]
|
||||
Type=simple
|
||||
# Vorprüfung ALS ROOT ausführen
|
||||
ExecStartPre=/bin/bash -c 'for i in {1..5}; do /usr/sbin/i2cdetect -y 1 | grep -q 48 && /usr/sbin/i2cdetect -y 1 | grep -q 49 && exit 0; sleep 2; done; exit 1'
|
||||
|
||||
ExecStart={{TARGET_DIR}}/{{BINARY}}
|
||||
WorkingDirectory={{TARGET_DIR}}
|
||||
User={{TARGET_USER}}
|
||||
Restart=on-failure
|
||||
RestartSec=5s
|
||||
|
||||
# KORREKTUR: Verhindert, dass STRG+C über SSH den Dienst beim Beenden des Logs killt
|
||||
KillMode=process
|
||||
|
||||
StandardOutput=append:{{TARGET_DIR}}/spannung.log
|
||||
StandardError=append:{{TARGET_DIR}}/spannung.log
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
echo "📝 Service-Datei universell generiert (nutzt systemd %h/%u Specifiers)"
|
||||
|
||||
# 4. Ein automatisches Installations-Skript für den Pi im app-Ordner erstellen
|
||||
cat << 'EOF' > ./app/install.sh
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "🚀 Starte automatische Einrichtung des Spannung-Monitors..."
|
||||
|
||||
# Pfade und Benutzer auf dem aktuellen Pi ermitteln
|
||||
PI_DIR=$(pwd)
|
||||
PI_USER=$(whoami)
|
||||
|
||||
# Architektur des Betriebssystems prüfen
|
||||
ARCH=$(uname -m)
|
||||
if [ "$ARCH" = "aarch64" ]; then
|
||||
BINARY="spannung-arm64"
|
||||
echo "🎯 64-Bit OS erkannt. Nutze: $BINARY"
|
||||
else
|
||||
BINARY="spannung-arm32_7"
|
||||
echo "🎯 32-Bit OS erkannt. Nutze: $BINARY"
|
||||
fi
|
||||
|
||||
# Platzhalter in der Service-Datei direkt auf dem Pi ersetzen
|
||||
sed -i "s|{{TARGET_DIR}}|$PI_DIR|g" spannung.service
|
||||
sed -i "s|{{TARGET_USER}}|$PI_USER|g" spannung.service
|
||||
sed -i "s|{{BINARY}}|$BINARY|g" spannung.service
|
||||
|
||||
echo "📝 Service-Datei wurde erfolgreich für dieser Pi konfiguriert."
|
||||
|
||||
# Service in das Systemverzeichnis kopieren und aktivieren
|
||||
echo "⚙️ Kopiere Service-Datei nach /etc/systemd/system/..."
|
||||
sudo cp spannung.service /etc/systemd/system/spannung.service
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable spannung.service
|
||||
|
||||
echo "▶️ Starte den Dienst..."
|
||||
sudo systemctl restart spannung.service
|
||||
|
||||
echo "✅ Fertig! Der Spannung-Monitor läuft und der Autostart ist aktiv."
|
||||
EOF
|
||||
|
||||
chmod +x ./app/install.sh
|
||||
|
||||
echo "📝 Service-Datei und install.sh generiert."
|
||||
echo "📂 Inhalt des fertigen app-Verzeichnisses:"
|
||||
ls -la app
|
||||
|
|
|
|||
24
config.json
24
config.json
|
|
@ -1,18 +1,20 @@
|
|||
{
|
||||
"web_port": ":8080",
|
||||
"i2c_bus": "1",
|
||||
"ssl_cert": "cert.pem",
|
||||
"ssl_key": "key.pem",
|
||||
"i2c_bus": "1",
|
||||
"ads1115_address_1": 72,
|
||||
"ads1115_address_2": 73,
|
||||
"name_adc1_ch0": "Hauptbatterie (U12V)",
|
||||
"factor_adc1_ch0": 5.0,
|
||||
"name_adc1_ch1": "Backup-Batterie",
|
||||
"factor_adc1_ch1": 5.0,
|
||||
"name_adc1_ch2": "Solar-Eingang",
|
||||
"factor_adc1_ch2": 1.0,
|
||||
"name_adc1_ch3": "Steuerspannung Intern",
|
||||
"factor_adc1_ch3": 1.0,
|
||||
"name_adc2_ch0": "Zusatzakku Funk",
|
||||
"factor_adc2_ch0": 1.0,
|
||||
"name_adc1_ch0": "23cm",
|
||||
"factor_adc1_ch0": 2.0,
|
||||
"name_adc1_ch1": "13 cm",
|
||||
"factor_adc1_ch1": 2.0,
|
||||
"name_adc1_ch2": "9 cm",
|
||||
"factor_adc1_ch2": 2.0,
|
||||
"name_adc1_ch3": "6 cm",
|
||||
"factor_adc1_ch3": 2.0,
|
||||
"name_adc2_ch0": "3 cm",
|
||||
"factor_adc2_ch0": 2.0,
|
||||
"relais_pins": [
|
||||
{"id": 1, "name": "Relais 1 (230V Hauptschalter)", "gpio": "GPIO12"},
|
||||
{"id": 2, "name": "USB-Relais 1 (Reserve)", "gpio": "USB_CH1"},
|
||||
|
|
|
|||
53
deploy.sh
Executable file
53
deploy.sh
Executable file
|
|
@ -0,0 +1,53 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# --- PARAMETER-PRÜFUNG ---
|
||||
if [ $# -lt 2 ]; then
|
||||
echo "❌ Fehler: Fehlende Argumente."
|
||||
echo "Verwendung: $0 <user> <host>"
|
||||
echo "Beispiel: $0 afu 100.64.0.4"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PI_USER="$1"
|
||||
PI_HOST="$2"
|
||||
TARGET_DIR="spannung/app"
|
||||
SERVICE_NAME="spannung.service"
|
||||
|
||||
echo "🚀 Starte Deployment auf $PI_USER@$PI_HOST..."
|
||||
|
||||
# --- ZERTIFIKATE ERZEUGEN ---
|
||||
# Prüfen, ob die Zertifikate bereits im lokalen app-Ordner existieren
|
||||
if [ ! -f ./app/cert.pem ] || [ ! -f ./app/key.pem ]; then
|
||||
echo "🔐 Generiere selbstsignierte SSL-Zertifikate für HTTPS..."
|
||||
openssl req -x509 -newkey rsa:4096 -nodes \
|
||||
-keyout ./app/key.pem \
|
||||
-out ./app/cert.pem \
|
||||
-days 365 \
|
||||
-subj "/C=DE/ST=Bavaria/L=Koeditz/O=info@lang-dieter.de/CN=$PI_HOST" 2>/dev/null
|
||||
echo "✅ SSL-Zertifikate lokal in ./app/ erstellt."
|
||||
else
|
||||
echo "🔒 Bestehende SSL-Zertifikate in ./app/ gefunden. Werden wiederverwendet."
|
||||
fi
|
||||
|
||||
# 1. Altes Zielverzeichnis auf dem Pi löschen und frisch erstellen
|
||||
ssh "$PI_USER@$PI_HOST" "rm -rf \"\$HOME/$TARGET_DIR\" && mkdir -p \"\$HOME/$TARGET_DIR\""
|
||||
|
||||
# 2. Den INHALT des lokal fertig gebauten 'app'-Ordners (inkl. Zertifikate) zum Pi kopieren
|
||||
echo "📦 Übertrage vorkompilierte Anwendung, Webseiten und Zertifikate..."
|
||||
scp -r ./app/* "$PI_USER@$PI_HOST:$TARGET_DIR/"
|
||||
|
||||
# 3. Das Setup-Skript direkt auf dem Pi ausführen
|
||||
ssh -t "$PI_USER@$PI_HOST" "
|
||||
cd \${HOME}/${TARGET_DIR}
|
||||
|
||||
# Windows-Zeilenumbrüche zur Sicherheit entfernen
|
||||
sed -i 's/\r//' ./install.sh
|
||||
sed -i 's/\r//' ./${SERVICE_NAME}
|
||||
|
||||
# Das Installationsskript auf dem Pi ausführen
|
||||
./install.sh
|
||||
"
|
||||
|
||||
echo "✅ Deployment erfolgreich abgeschlossen! Zeige Live-Logs (Beenden mit STRG+C)..."
|
||||
ssh -t "$PI_USER@$PI_HOST" "sudo journalctl -f -u ${SERVICE_NAME}"
|
||||
32
get_lib_ARM.sh
Executable file
32
get_lib_ARM.sh
Executable file
|
|
@ -0,0 +1,32 @@
|
|||
#!/bin/bash
|
||||
cd /tmp || exit
|
||||
|
||||
# ==========================================
|
||||
# 1. ARM64 (64-Bit) verarbeiten
|
||||
# ==========================================
|
||||
echo "Lade libcap2 für ARM64 herunter..."
|
||||
apt download libcap2:arm64
|
||||
dpkg-deb -x libcap2_*_arm64.deb libcap-arm64
|
||||
|
||||
echo "Kopiere ARM64-Dateien..."
|
||||
cp -d libcap-arm64/usr/lib/aarch64-linux-gnu/libcap.so.* /home/dieter/spannung/sysroot-arm64/usr/lib/aarch64-linux-gnu/
|
||||
|
||||
# ==========================================
|
||||
# 2. ARM32 v7 / armhf (32-Bit) verarbeiten
|
||||
# ==========================================
|
||||
echo "Lade libcap2 für ARM32 (armhf) direkt herunter..."
|
||||
# Bereinigung alter Versuche
|
||||
rm -f libcap2_*_armhf.deb
|
||||
rm -rf libcap-armhf
|
||||
|
||||
# Download direkt von den Ubuntu-Servern (Sicherheitsupdates/Main)
|
||||
#wget https://de.archive.ubuntu.com/ubuntu/pool/main/libc/libcap2/libcap2_2.66-5ubuntu2.4_armhf.deb
|
||||
wget http://ports.ubuntu.com/ubuntu-ports/pool/main/libc/libcap2/libcap2_2.66-5ubuntu2.4_armhf.deb
|
||||
|
||||
dpkg-deb -x libcap2_*_armhf.deb libcap-armhf
|
||||
|
||||
echo "Kopiere ARM32-Dateien..."
|
||||
cp -d libcap-armhf/usr/lib/arm-linux-gnueabihf/libcap.so.* /home/dieter/spannung/sysroot-arm32/usr/lib/arm-linux-gnueabihf/
|
||||
|
||||
echo "✅ Fertig! Bereinige temporäre Dateien..."
|
||||
rm -f libcap2_*.deb
|
||||
6
go.mod
6
go.mod
|
|
@ -3,12 +3,8 @@ module spannung
|
|||
go 1.25.0
|
||||
|
||||
require (
|
||||
github.com/google/gousb v1.1.3
|
||||
periph.io/x/conn/v3 v3.7.3
|
||||
periph.io/x/devices/v3 v3.7.4
|
||||
periph.io/x/host/v3 v3.8.5
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/adriankumpf/abacom-relay-board v0.7.1 // indirect
|
||||
github.com/google/gousb v1.1.3 // indirect
|
||||
)
|
||||
|
|
|
|||
2
go.sum
2
go.sum
|
|
@ -1,5 +1,3 @@
|
|||
github.com/adriankumpf/abacom-relay-board v0.7.1 h1:BEq26Z+mstFFO12Anla7QXmi/C5tkZT/8dCqB/vyfwY=
|
||||
github.com/adriankumpf/abacom-relay-board v0.7.1/go.mod h1:j1JZRj26BIUMuxdtiBP1G5dF9piCbX/xQATZB5+CPs4=
|
||||
github.com/google/gousb v1.1.3 h1:xt6M5TDsGSZ+rlomz5Si5Hmd/Fvbmo2YCJHN+yGaK4o=
|
||||
github.com/google/gousb v1.1.3/go.mod h1:GGWUkK0gAXDzxhwrzetW592aOmkkqSGcj5KLEgmCVUg=
|
||||
github.com/jonboulle/clockwork v0.5.0 h1:Hyh9A8u51kptdkR+cqRpT1EebBwTn1oK9YfGYbdFz6I=
|
||||
|
|
|
|||
73
install.sh
Normal file
73
install.sh
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
# 3. Die Service-Datei mit Platzhaltern generieren
|
||||
cat << 'EOF' > ./app/spannung.service
|
||||
[Unit]
|
||||
Description=Spannung Control Service
|
||||
After=network-online.target i2c.service
|
||||
Wants=network-online.target
|
||||
StartLimitIntervalSec=0
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStartPre=/bin/bash -c 'for i in {1..10}; do i2cdetect -y 1 | grep -E "40:" | grep -q -E "\b48\b" && i2cdetect -y 1 | grep -E "40:" | grep -q -E "\b49\b" && exit 0; echo "warte auf ADS1115 Module..."; sleep 2; done; exit 1'
|
||||
|
||||
# Diese Platzhalter werden beim Installieren auf dem Pi automatisch ersetzt:
|
||||
ExecStart={{TARGET_DIR}}/{{BINARY}}
|
||||
WorkingDirectory={{TARGET_DIR}}
|
||||
User={{TARGET_USER}}
|
||||
Restart=on-failure
|
||||
RestartSec=5s
|
||||
StartLimitIntervalSec=60s
|
||||
StartLimitBurst=3
|
||||
|
||||
StandardOutput=append:{{TARGET_DIR}}/spannung.log
|
||||
StandardError=append:{{TARGET_DIR}}/spannung.log
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
# 4. Ein automatisches Installations-Skript für den Pi im app-Ordner erstellen
|
||||
cat << 'EOF' > ./app/install.sh
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "🚀 Starte automatische Einrichtung des Spannung-Monitors..."
|
||||
|
||||
# Pfade und Benutzer auf dem aktuellen Pi ermitteln
|
||||
PI_DIR=$(pwd)
|
||||
PI_USER=$(whoami)
|
||||
|
||||
# Architektur des Betriebssystems prüfen
|
||||
ARCH=$(uname -m)
|
||||
if [ "$ARCH" = "aarch64" ]; then
|
||||
BINARY="spannung-arm64"
|
||||
echo "🎯 64-Bit OS erkannt. Nutze: $BINARY"
|
||||
else
|
||||
BINARY="spannung-arm32_7"
|
||||
echo "🎯 32-Bit OS erkannt. Nutze: $BINARY"
|
||||
fi
|
||||
|
||||
# Platzhalter in der Service-Datei direkt auf dem Pi ersetzen
|
||||
sed -i "s|{{TARGET_DIR}}|$PI_DIR|g" spannung.service
|
||||
sed -i "s|{{TARGET_USER}}|$PI_USER|g" spannung.service
|
||||
sed -i "s|{{BINARY}}|$BINARY|g" spannung.service
|
||||
|
||||
echo "📝 Service-Datei wurde erfolgreich für diesen Pi konfiguriert."
|
||||
|
||||
# Service in das Systemverzeichnis kopieren und aktivieren
|
||||
echo "⚙️ Kopiere Service-Datei nach /etc/systemd/system/..."
|
||||
sudo cp spannung.service /etc/systemd/system/spannung.service
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable spannung.service
|
||||
|
||||
echo "▶️ Starte den Dienst..."
|
||||
sudo systemctl restart spannung.service
|
||||
|
||||
echo "✅ Fertig! Der Spannung-Monitor läuft und der Autostart ist aktiv."
|
||||
EOF
|
||||
|
||||
chmod +x ./app/install.sh
|
||||
|
||||
echo "📝 Service-Datei und install.sh generiert."
|
||||
echo "📂 Inhalt des fertigen app-Verzeichnisses:"
|
||||
ls -la app
|
||||
BIN
libudev1_255.4-1ubuntu8.5_arm64.deb.1
Normal file
BIN
libudev1_255.4-1ubuntu8.5_arm64.deb.1
Normal file
Binary file not shown.
105
main.go
105
main.go
|
|
@ -5,7 +5,10 @@ import (
|
|||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"spannung/web" // Importiert Ihr eigenes web-Paket
|
||||
|
||||
|
|
@ -20,6 +23,8 @@ import (
|
|||
|
||||
type Config struct {
|
||||
WebPort string `json:"web_port"`
|
||||
SSLCert string `json:"ssl_cert"`
|
||||
SSLKey string `json:"ssl_key"`
|
||||
I2CBus string `json:"i2c_bus"`
|
||||
ADS1115Address1 uint16 `json:"ads1115_address_1"`
|
||||
ADS1115Address2 uint16 `json:"ads1115_address_2"`
|
||||
|
|
@ -92,29 +97,55 @@ func main() {
|
|||
log.Fatalf("ADS1115 #2 Init fehlgeschlagen: %v", err)
|
||||
}
|
||||
|
||||
// 6. GPIO-Pins registrieren (ID 1 ist der 230V Hauptschalter am Raspberry Pi)
|
||||
for i, r := range config.Relais {
|
||||
// 6. Internen Software-Zustand für ALLE Relais VORAB auf AUS (false) setzen
|
||||
for i := range config.Relais {
|
||||
config.Relais[i].State = false
|
||||
}
|
||||
|
||||
// 7. GPIO-Pins registrieren (ID 1 ist der 230V Hauptschalter am Raspberry Pi)
|
||||
for _, r := range config.Relais {
|
||||
if r.ID == 1 {
|
||||
pin := gpioreg.ByName(r.GPIO)
|
||||
if pin == nil {
|
||||
log.Fatalf("GPIO-Pin %s existiert nicht", r.GPIO)
|
||||
}
|
||||
// Hauptschalter hardwareseitig sofort sicher ausschalten
|
||||
if err := pin.Out(gpio.Low); err != nil {
|
||||
log.Fatalf("Pin-Konfiguration für %s fehlgeschlagen: %v", r.GPIO, err)
|
||||
}
|
||||
relaisMap[r.ID] = pin
|
||||
}
|
||||
config.Relais[i].State = false
|
||||
}
|
||||
|
||||
// 7. Beim Start alle USB-Relais initial auswerfen
|
||||
updateUsbRelays()
|
||||
// 8. SICHERHEITS-START: Alle USB-Relais initial zwingend ausschalten
|
||||
if err := updateUsbRelaysStrict(); err != nil {
|
||||
log.Fatalf("[❌] KRITISCHER FEHLER: USB-Relais-Reset beim Start fehlgeschlagen! Programm gestoppt: %v", err)
|
||||
}
|
||||
|
||||
// 8. Instanziierung des Webservers mit Übergabe der Callback-Funktionen
|
||||
server := web.NewServer(config.WebPort, readVoltageCallback, toggleRelaisCallback, getRelaisStateCallback, callbackGetVersion, getVoltNamesCallback)
|
||||
// NEU: Signal-Handling für sauberes Herunterfahren einrichten
|
||||
sigChan := make(chan os.Signal, 1)
|
||||
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
|
||||
|
||||
go func() {
|
||||
<-sigChan
|
||||
fmt.Println("\n[⚠️] Programm-Abbruch erkannt! Schalte Relais 1 (Hauptschalter) sicher aus...")
|
||||
mutex.Lock()
|
||||
if pin, exists := relaisMap[1]; exists {
|
||||
_ = pin.Out(gpio.Low)
|
||||
}
|
||||
mutex.Unlock()
|
||||
os.Exit(0)
|
||||
}()
|
||||
|
||||
fmt.Printf("Webserver gestartet auf Port %s\n", config.WebPort)
|
||||
log.Fatal(server.Start())
|
||||
// 9. Instanziierung des Webservers mit Übergabe der Callback-Funktionen
|
||||
server := web.NewServer(config.WebPort, readVoltageCallback,
|
||||
toggleRelaisCallback, getRelaisStateCallback, callbackGetVersion,
|
||||
getVoltNamesCallback)
|
||||
|
||||
fmt.Printf("Verschlüsselter HTTPS-Webserver gestartet auf Port %s...\n", config.WebPort)
|
||||
|
||||
// ÜBERGABE DER ZERTIFIKATE AUS DER CONFIG AN DIE NEUE START-METHODE
|
||||
log.Fatal(server.Start(config.SSLCert, config.SSLKey))
|
||||
}
|
||||
|
||||
// Hilfsfunktion zum Laden der version.json
|
||||
|
|
@ -169,7 +200,6 @@ func readVoltageCallback(channel int) float64 {
|
|||
return 0.0
|
||||
}
|
||||
|
||||
// Pin-Instanz erzeugen und auslesen (periph.io API Standard)
|
||||
pin, err := targetDevice.PinForChannel(adsChannel, physic.Volt*4096/1000, 128*physic.Hertz, 0)
|
||||
if err != nil {
|
||||
fmt.Printf("Fehler beim Erzeugen des Pins für Kanal %v: %v\n", channel, err)
|
||||
|
|
@ -183,6 +213,11 @@ func readVoltageCallback(channel int) float64 {
|
|||
}
|
||||
|
||||
voltValue := float64(sample.V) / 1000000000.0
|
||||
|
||||
//Unterdrückt Rauschen und negative Restspannungen bis einschließlich -0.01 V sowie kleine positive Offsets
|
||||
if voltValue >= -0.011 && voltValue <= 0.011 {
|
||||
return 0.0
|
||||
}
|
||||
return voltValue * factor
|
||||
}
|
||||
|
||||
|
|
@ -193,10 +228,18 @@ func toggleRelaisCallback(id int) {
|
|||
|
||||
for i := range config.Relais {
|
||||
if config.Relais[i].ID == id {
|
||||
|
||||
// 1. Sperre: Prüfen auf das Wort "Reserve"
|
||||
if strings.Contains(strings.ToLower(config.Relais[i].Name), "reserve") {
|
||||
fmt.Printf("[⚠️] Schalten blockiert: '%s' (ID %d) ist als Reserve geschützt!\n", config.Relais[i].Name, id)
|
||||
return
|
||||
}
|
||||
|
||||
// Zustand des ausgewählten Relais umkehren
|
||||
config.Relais[i].State = !config.Relais[i].State
|
||||
|
||||
if id == 1 {
|
||||
// Hardware-Schaltung Raspberry Pi GPIO
|
||||
// Hardware-Schaltung Raspberry Pi GPIO (Hauptschalter bleibt unabhängig)
|
||||
pin, exists := relaisMap[id]
|
||||
if exists {
|
||||
if config.Relais[i].State {
|
||||
|
|
@ -206,28 +249,38 @@ func toggleRelaisCallback(id int) {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
// Hardware-Schaltung über Abacom USB-Karte via Schieberegister-Emulation
|
||||
updateUsbRelays()
|
||||
// ERWEITERUNG: Gegenseitige Verriegelung für USB-Relais
|
||||
if config.Relais[i].State {
|
||||
for j := range config.Relais {
|
||||
if config.Relais[j].ID != id && config.Relais[j].ID >= 2 {
|
||||
config.Relais[j].State = false
|
||||
}
|
||||
}
|
||||
fmt.Printf("[🔄] Exklusiv-Modus: Relais ID %d aktiviert. Alle anderen USB-Relais wurden ausgeschaltet.\n", id)
|
||||
}
|
||||
|
||||
// Standard-Schaltvorgang (Fehler werfen im UI-Log, blockiert aber nicht den Server)
|
||||
if err := updateUsbRelaysStrict(); err != nil {
|
||||
fmt.Printf("[❌] Fehler beim Schalten der USB-Relais: %v\n", err)
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Hilfsfunktion: Schaltet die Abacom-Karte über exakte Schieberegister-Logik (Bit-Banging)
|
||||
func updateUsbRelays() {
|
||||
// Optimierte Hilfsfunktion: Schaltet die Abacom-Karte und gibt Fehler an den Aufrufer zurück
|
||||
func updateUsbRelaysStrict() error {
|
||||
fmt.Println("\n--- [USB ABACOM SCHALTVORGANG] ---")
|
||||
ctx := gousb.NewContext()
|
||||
defer ctx.Close()
|
||||
|
||||
dev, err := ctx.OpenDeviceWithVIDPID(0x1a86, 0x5512)
|
||||
if err != nil {
|
||||
fmt.Printf("[❌] USB-Fehler beim Öffnen des Geräts: %v\n", err)
|
||||
return
|
||||
return fmt.Errorf("USB-Fehler beim Öffnen des Geräts: %w", err)
|
||||
}
|
||||
if dev == nil {
|
||||
fmt.Println("[❌] Hardware-Fehler: Abacom-Karte wurde am USB-Port nicht gefunden!")
|
||||
return
|
||||
return fmt.Errorf("Abacom-Karte wurde am USB-Port nicht gefunden")
|
||||
}
|
||||
defer dev.Close()
|
||||
|
||||
|
|
@ -235,22 +288,19 @@ func updateUsbRelays() {
|
|||
|
||||
cfg, err := dev.Config(1)
|
||||
if err != nil {
|
||||
fmt.Printf("[❌] Konfigurationsfehler: %v\n", err)
|
||||
return
|
||||
return fmt.Errorf("Konfigurationsfehler: %w", err)
|
||||
}
|
||||
defer cfg.Close()
|
||||
|
||||
intf, err := cfg.Interface(0, 0)
|
||||
if err != nil {
|
||||
fmt.Printf("[❌] Interface-Fehler: %v\n", err)
|
||||
return
|
||||
return fmt.Errorf("Interface-Fehler: %w", err)
|
||||
}
|
||||
defer intf.Close()
|
||||
|
||||
outEP, err := intf.OutEndpoint(2)
|
||||
if err != nil {
|
||||
fmt.Printf("[❌] Endpunkt-Fehler: %v\n", err)
|
||||
return
|
||||
return fmt.Errorf("Endpunkt-Fehler: %w", err)
|
||||
}
|
||||
|
||||
// Bitmaske berechnen (ID 2 -> Bit 0 bis ID 9 -> Bit 7)
|
||||
|
|
@ -286,11 +336,10 @@ func updateUsbRelays() {
|
|||
|
||||
fmt.Printf("[⚙️] Sende Bitmaske an Schieberegister: %08b\n", bitmask)
|
||||
|
||||
// --- Protokoll-Sequenz (Analog zu Python) ---
|
||||
// --- Protokoll-Sequenz ---
|
||||
sendOutput(0x00) // Latch initial auf Low halten
|
||||
|
||||
for i := 0; i < 8; i++ {
|
||||
// MSB first (Bit 7 bis 0 prüfen)
|
||||
if (bitmask & (1 << (7 - i))) != 0 {
|
||||
sendOutput(DATA)
|
||||
sendOutput(CLK | DATA)
|
||||
|
|
@ -303,12 +352,12 @@ func updateUsbRelays() {
|
|||
}
|
||||
sendOutput(0x00) // Leitungen leeren
|
||||
|
||||
// Übernahme-Register per Latch freischalten
|
||||
sendOutput(LATCH)
|
||||
sendOutput(0x00)
|
||||
|
||||
fmt.Println("[✅] ERFOLG! Signal-Bytes an Schieberegister übergeben.")
|
||||
fmt.Println("--- [USB DEBUG ENDE] ---\n")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Callback: Wird vom Webserver aufgerufen, um den aktuellen UI-Status abzufragen
|
||||
|
|
|
|||
48
relais.py
48
relais.py
|
|
@ -1,48 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
import sys
|
||||
import usb.core
|
||||
import usb.util
|
||||
|
||||
# Abacom CH341A IDs
|
||||
VENDOR_ID = 0x1a86
|
||||
PRODUCT_ID = 0x5512
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print("Nutzung: python3 relais.py <Wert_0_bis_255>")
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
data_value = int(sys.argv[1])
|
||||
if not (0 <= data_value <= 255):
|
||||
raise ValueError
|
||||
except ValueError:
|
||||
print("Fehler: Bitte eine Zahl zwischen 0 und 255 eingeben.")
|
||||
sys.exit(1)
|
||||
|
||||
# Gerät suchen
|
||||
dev = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)
|
||||
if dev is None:
|
||||
print("Relaiskarte nicht gefunden! USB-Verbindung prüfen.")
|
||||
sys.exit(1)
|
||||
|
||||
# Kernel-Treiber lösen, falls aktiv
|
||||
if dev.is_kernel_driver_active(0):
|
||||
dev.detach_kernel_driver(0)
|
||||
|
||||
# Konfiguration setzen
|
||||
dev.set_configuration()
|
||||
|
||||
# CH341 Befehl zum Schreiben von IO-Pins (Abacom-Protokoll)
|
||||
# Befehl 0xA6 setzt die Ausgänge beim CH341
|
||||
# Das Format ist oft: [0xA6, Schalter-Byte, 0x00] oder direkte Control-Transfers
|
||||
try:
|
||||
# Steuerbefehl direkt an den Chip senden (CH341 spezifisch)
|
||||
# 0x40 = Vendor-Write, 0x9a = CH341_REQ_WRITE_REG
|
||||
dev.ctrl_transfer(0x40, 0x9a, 0x2525, data_value)
|
||||
print(f"Erfolgreich geschaltet. Wert: {data_value} (Binär: {data_value:08b})")
|
||||
except Exception as e:
|
||||
print(f"Fehler beim Senden: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
56
relais2.py
56
relais2.py
|
|
@ -1,56 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
import sys
|
||||
import usb.core
|
||||
import usb.util
|
||||
|
||||
VENDOR_ID = 0x1a86
|
||||
PRODUCT_ID = 0x5512
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print("Nutzung: sudo python3 relais2.py <Wert_0_bis_255>")
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
data_value = int(sys.argv[1])
|
||||
if not (0 <= data_value <= 255):
|
||||
raise ValueError
|
||||
except ValueError:
|
||||
print("Fehler: Bitte eine Zahl zwischen 0 und 255 eingeben.")
|
||||
sys.exit(1)
|
||||
|
||||
dev = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)
|
||||
if dev is None:
|
||||
print("Relaiskarte nicht gefunden! USB-Verbindung prüfen.")
|
||||
sys.exit(1)
|
||||
|
||||
if dev.is_kernel_driver_active(0):
|
||||
try:
|
||||
dev.detach_kernel_driver(0)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
dev.set_configuration()
|
||||
|
||||
try:
|
||||
# CH341A GPIO-Befehl (0x5a)
|
||||
# Aufbau des Pakets:
|
||||
# Byte 0: 0x5a (Befehl für GPIO-Steuerung)
|
||||
# Byte 1: 0x51 (Sub-Befehl für I/O-Wechsel)
|
||||
# Byte 2: Richtungsmaske/Enable für die Pins (0xff = Alle Pins D0-D7 auf Ausgang)
|
||||
# Byte 3: Datenwert für Pins D0-D7 (deine Relais 0-255)
|
||||
# Byte 4: Richtung/Enable für obere Pins (0x00 = nicht genutzt)
|
||||
# Byte 5: Datenwert für obere Pins (0x00)
|
||||
|
||||
cmd_packet = bytes([0x5a, 0x51, 0xff, data_value, 0x00, 0x00])
|
||||
|
||||
# Senden an den Standard-Bulk-Ausgang (Endpoint 0x02)
|
||||
dev.write(0x02, cmd_packet, 1000)
|
||||
|
||||
print(f"Befehl gesendet. Wert: {data_value} (Binär: {data_value:08b})")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Fehler beim Senden: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
23
server.crt
Normal file
23
server.crt
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIID1TCCAr2gAwIBAgIUffKgdkPBvX0QynTQ84kpWQU05xUwDQYJKoZIhvcNAQEL
|
||||
BQAwejELMAkGA1UEBhMCREUxEDAOBgNVBAgMB0JhdmFyaWExEjAQBgNVBAcMCUvD
|
||||
g8K2ZGl0ejEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMSIwIAYJ
|
||||
KoZIhvcNAQkBFhNpbmZvQGxhbmctZGlldGVyLmRlMB4XDTI2MDgwMzA4MDE1OVoX
|
||||
DTI3MDgwMzA4MDE1OVowejELMAkGA1UEBhMCREUxEDAOBgNVBAgMB0JhdmFyaWEx
|
||||
EjAQBgNVBAcMCUvDg8K2ZGl0ejEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ
|
||||
dHkgTHRkMSIwIAYJKoZIhvcNAQkBFhNpbmZvQGxhbmctZGlldGVyLmRlMIIBIjAN
|
||||
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtf+D266GoYOYSJsQOal248PHrYey
|
||||
3bfIun/Xx8MQPUw8aZJ4Zv8N3SZJh5/9Vx18TJfS8fQALxNushP7ofPmIqqjO4tk
|
||||
13U9ITWGeOIreJ2HUAOAFVYk3TMCzsHK1Bb3f6WG0kx/q7Avp1jYVRUqIb0Et2+M
|
||||
K8obYP+w05Vid32w3RrA+bF0sV233vfD/OkRuApg8ae2pHoVZtIm7PmrrndlynQU
|
||||
s9Y2aCJR54kinR31HXUQVnJZFm2QEY0RpjQo9d+AF3Qzc6Kb9IcAMWw13t4yATBU
|
||||
vDCnY6iXh7DhakOlPUBr3xm6ZZ3hW7Jq3E2+o65gfmu5IKv0ZK8TGvVzEQIDAQAB
|
||||
o1MwUTAdBgNVHQ4EFgQUxxZZxiIHt7u9s7plRyOUUokpbgIwHwYDVR0jBBgwFoAU
|
||||
xxZZxiIHt7u9s7plRyOUUokpbgIwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B
|
||||
AQsFAAOCAQEAoujOIzroc1afSY9QO+Fv8uj1dbmZgciK+3yatV9cHD0gkhbUcb89
|
||||
iNdLyGR9DARU3OwBSSxF71bnP/xJ1Hul6QQxivuFaLDy/fmJiV8U5GYzP8CB1aqZ
|
||||
dGyx/oTrXIjGEgve2oDwo91EQhDoqGSGTFa2rRxZY7763Nx+tCS/2WVItvhKdfXw
|
||||
Bqleyev6S8833ePpAO2jeRsQl4hulUrJQNeryEnkhX6wf/3sBUbZ5EQGjGDYjZ87
|
||||
LxiXPUJ6sLslrwJIStE/kiSxaUkcIQQMmTsH/LuGr8ubCwOmlf2d3fqtjAKerhoG
|
||||
A2vBEpaqN9zJ5tMws/VQgWDjOUWH44UpzA==
|
||||
-----END CERTIFICATE-----
|
||||
28
server.key
Normal file
28
server.key
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC9CUywq5QuxlDG
|
||||
5hBJEI9Bpo3Te3+iT7EzAoqRXCKA856YzGYfA3gmk02NhdPpdp+TzTYiOF/4Coa6
|
||||
E++PRnmwFn/BC0SmsYZ+3iwioDV9EeuSsp9eBrCF1Ve40A8v1qSClWjm3MiO2BMB
|
||||
V2YMFtNrtY3v4grWBk1LI4qrkx6VJdWX09lSJJvsTYM8E18XCN+5T6aw8JjH/iFy
|
||||
yyLKw/KJwPEtt4NqyIpEryH8QBT8UwVc7n8HbpaSlb93JWATnXz2T/dfeP/d4UrO
|
||||
EsN/DzhH9UUZfqJH2h5wJx0q3m6blwRIgTzTIDuL24z4riH2CPN7VVAum1pvgNcf
|
||||
NmkphwXVAgMBAAECggEABmOVEveJl5ceTcqizEViAh8F9hrbcnntDENOuaD6jY8u
|
||||
Ug2+edfdLLiXy2u1gNOAizdJWBi9rZ11dj6MPzRrkncANF8UH+oqGImbxkPR6vs7
|
||||
Egc1ebESMEPIpjdp+/zuLHeuRvc5VBKbedUhXtE6rg5B0NS79wXZgOufmTLsuq+w
|
||||
p6ivRn5uHlODDvQzvricRkwl3FvGfe/H/N50K6q+vQfAB/d3B7x97kfxvHpXw/LJ
|
||||
BXwgchxJXWo371k/ks1z5mbdyjpol/Lu9KEVe4w6p3pR+0bdkvA4H8Y3FY1yDZ3c
|
||||
olDsJTPBnBpGwJqvK+zzdHxt2uRmpRlVuea2QqIn1QKBgQD82fZ2YUp3i4vARzkw
|
||||
+aER6PSPtAmlvMxe8s+dzkP7r/4sp8LbeqlgaF3RBfyt786SxRKjhFXRCrQOCrjH
|
||||
tf+A/pnS6qrmeXZQtHlpwE8LXWNm/kdNs0leRcpTuEb+2zX+DBr0f8kbCxc+AtVy
|
||||
y6DL+lI0zcgTTOtdOm1c7RUFpwKBgQC/Y+hfrx+l2c6pXEMoWE7XEhHL67ky3/AB
|
||||
h3GiGPDzSzMZnqGsTnyWS/pmwchm5lBTlnRs4PmgdyvaJ/t0pZ4iWwSYmU3UsvLK
|
||||
EjKXRh+AgubDOUiRgugAxeNVUitNpkTLgMGIr8/s22QqkVxZzORap0fzWhei9b4t
|
||||
0VFoiobAIwKBgQCd3Ca3eb5YLFMv1Eesf+1DlUE6hpiPVPPzQ3zDdQeUlygFESfi
|
||||
hw5AFmicGzTKEzHRCCC+3dwGCrynF6KNbN771fiLad8QzTxE3qf+kgXHfqKUpqQ1
|
||||
qn1f0gqjgiUw8AMhfMVHaJBRxfbYzEQey2q0bq/sL51+D0PSjKvCnHHHeQKBgFms
|
||||
wy1KDacVBbre6uyVa+NjqQkGGtFWkcr1nm2YCBXGz1uasx/b6o41bU8GTxK/qTVx
|
||||
En4Nb4kbLWXbQ/ukuhJY2S9y7T/S1OWPXzr39TyumNcyGOltD62FCv5oMLgCRsuf
|
||||
OY8E6YSOS0GSuFWvJfO/23uPY/HL+N7Y667y8S5HAoGBAL62NT4KM4jYCp7Jys1+
|
||||
8OeoQMbSG2C02SnJT32iYqC2Au0lTVjKwOfiICvy37SAZtWqixj6TjpXoqNbel/i
|
||||
FdaNV4wihIvmtUdh5UbEuEoPDgxsHKbQm3HXYf7RA356RV19KKmV524XYJV9/I5K
|
||||
na9lXbV/90Jbmpjbm/tV9r+F
|
||||
-----END PRIVATE KEY-----
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
# ==============================================================================
|
||||
# KURZANLEITUNG ZUR INSTALLATION UND VERWALTUNG
|
||||
# ==============================================================================
|
||||
# 1. Datei kopieren nach: /etc/systemd/system/spannung.service
|
||||
# 2. Systemd neu laden: sudo systemctl daemon-reload
|
||||
# 3. Autostart aktivieren: sudo systemctl enable spannung.service
|
||||
# 4. Dienst starten: sudo systemctl start spannung.service
|
||||
#
|
||||
# Befehle zur Steuerung:
|
||||
# - Status prüfen: sudo systemctl status spannung.service
|
||||
# - Live-Logs einsehen: sudo journalctl -u spannung.service -f
|
||||
# - Dienst stoppen: sudo systemctl stop spannung.service
|
||||
# - Dienst neu starten: sudo systemctl restart spannung.service
|
||||
# ==============================================================================
|
||||
#
|
||||
# gewohnter rsync-Befehl (Beispiel)
|
||||
# rsync -avz ./app/ pi@raspirotor:~/spannung/
|
||||
# 2. Den Dienst auf dem Pi remote aktualisieren und neu starten
|
||||
# ssh -t afu@raspirotor "sudo cp ~/spannung/app/spannung.service /etc/systemd/system/ && sudo systemctl daemon-reload && sudo systemctl restart spannung.service"
|
||||
|
||||
[Unit]
|
||||
Description=Spannung Control Service
|
||||
After=network-online.target i2c.service
|
||||
Wants=network-online.target
|
||||
StartLimitIntervalSec=0
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
# Die ExecStartPre-Zeile muss bei 32-Bit auskommentiert werden, da kein i2cdetect verfügbar ist
|
||||
ExecStartPre=/bin/bash -c 'for i in {1..10}; do i2cdetect -y 1 | grep -q "48" && exit 0; echo "warte auf ADS1115..."; sleep 2; done; exit 1'
|
||||
ExecStart=/home/afu/spannung/spannung
|
||||
WorkingDirectory=/home/afu/spannung
|
||||
User=afu
|
||||
#Restart=always
|
||||
Restart=on-failure # Startet den Dienst nur bei Fehlern neu
|
||||
RestartSec=5s # Wartet 5 Sekunden vor dem nächsten Versuch
|
||||
StartLimitIntervalSec=60s # Innerhalb von 60 Sekunden
|
||||
StartLimitBurst=3 # Maximal 3 Versuche in diesem Intervall
|
||||
|
||||
StandardOutput=append:/home/afu/spannung/spannung.log
|
||||
StandardError=append:/home/afu/spannung/spannung.log
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
BIN
spannung_app.zip
Normal file
BIN
spannung_app.zip
Normal file
Binary file not shown.
511
sysroot-arm32/index.html
Normal file
511
sysroot-arm32/index.html
Normal file
|
|
@ -0,0 +1,511 @@
|
|||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>Launchpad</title>
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/@@/apple-touch-icon.png?v=2022" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/@@/favicon-32x32.png?v=2022" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/@@/favicon-16x16.png?v=2022" />
|
||||
<link rel="manifest" href="/@@/site.webmanifest?v=2022" />
|
||||
<link rel="mask-icon" href="/@@/safari-pinned-tab.svg?v=2022" color="#e9531f" />
|
||||
<link rel="shortcut icon" href="/@@/favicon.ico?v=2022" />
|
||||
<meta name="msapplication-TileColor" content="#da532c" />
|
||||
<meta name="msapplication-config" content="/@@/browserconfig.xml?v=2022" />
|
||||
<meta name="theme-color" content="#ffffff" />
|
||||
|
||||
|
||||
<link rel="alternate" type="application/atom+xml" href="http://feeds.launchpad.net/announcements.atom" title="All Announcements" />
|
||||
|
||||
|
||||
|
||||
|
||||
<link type="text/css" rel="stylesheet" media="screen, print" href="/+icing/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/combo.css" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<meta property="og:title" content="Launchpad" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:image" content="/@@/launchpad-og-image.png" />
|
||||
<meta property="og:url" content="https://launchpad.net/index.html" />
|
||||
<meta property="og:site_name" content="Launchpad" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
var LP = {
|
||||
cache: {},
|
||||
links: {}
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">var cookie_scope = '; Path=/; Secure; Domain=.launchpad.net';</script>
|
||||
|
||||
<script type="text/javascript" src="/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?yui/yui/yui-min.js&lp/meta.js&yui/loader/loader-min.js"></script>
|
||||
<script type="text/javascript">
|
||||
var raw = null;
|
||||
if (LP.devmode) {
|
||||
raw = 'raw';
|
||||
}
|
||||
YUI.GlobalConfig = {
|
||||
combine: true,
|
||||
comboBase: '/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?',
|
||||
root: 'yui/',
|
||||
filter: raw,
|
||||
debug: false,
|
||||
fetchCSS: false,
|
||||
maxURLLength: 2000,
|
||||
groups: {
|
||||
lp: {
|
||||
combine: true,
|
||||
base: '/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?lp/',
|
||||
comboBase: '/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?',
|
||||
root: 'lp/',
|
||||
// comes from including lp/meta.js
|
||||
modules: LP_MODULES,
|
||||
fetchCSS: false
|
||||
}
|
||||
}
|
||||
}</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
// we need this to create a single YUI instance all events and code
|
||||
// talks across. All instances of YUI().use should be based off of
|
||||
// LPJS instead.
|
||||
var LPJS = new YUI();
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<script id="base-layout-load-scripts" type="text/javascript">
|
||||
//<![CDATA[
|
||||
LPJS.use('base', 'node', 'console', 'event',
|
||||
'oop', 'lp', 'lp.app.foldables','lp.app.sorttable',
|
||||
'lp.app.inlinehelp', 'lp.app.links',
|
||||
'lp.bugs.bugtask_index', 'lp.bugs.subscribers',
|
||||
'lp.app.ellipsis', 'lp.code.branchmergeproposal.diff',
|
||||
'lp.views.global',
|
||||
function(Y) {
|
||||
|
||||
Y.on("domready", function () {
|
||||
var global_view = new Y.lp.views.Global();
|
||||
global_view.render();
|
||||
|
||||
Y.lp.app.sorttable.SortTable.init();
|
||||
Y.lp.app.inlinehelp.init_help();
|
||||
Y.lp.activate_collapsibles();
|
||||
Y.lp.app.foldables.activate();
|
||||
Y.lp.app.links.check_valid_lp_links();
|
||||
});
|
||||
|
||||
Y.on('lp:context:web_link:changed', function(e) {
|
||||
window.location = e.new_value;
|
||||
});
|
||||
});
|
||||
//]]>
|
||||
</script>
|
||||
<script id="base-helper-functions" type="text/javascript">
|
||||
//<![CDATA[
|
||||
// This code is pulled from lp.js that needs to be available on every
|
||||
// request. Pulling here to get it outside the scope of the YUI block.
|
||||
function setFocusByName(name) {
|
||||
// Focus the first element matching the given name which can be focused.
|
||||
var nodes = document.getElementsByName(name);
|
||||
var i, node;
|
||||
for (i = 0; i < nodes.length; i++) {
|
||||
node = nodes[i];
|
||||
if (node.focus) {
|
||||
try {
|
||||
// Trying to focus a hidden element throws an error in IE8.
|
||||
if (node.offsetHeight !== 0) {
|
||||
node.focus();
|
||||
}
|
||||
} catch (e) {
|
||||
LPJS.use('console', function(Y) {
|
||||
Y.log('In setFocusByName(<' +
|
||||
node.tagName + ' type=' + node.type + '>): ' + e);
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function selectWidget(widget_name, event) {
|
||||
if (event && (event.keyCode === 9 || event.keyCode === 13)) {
|
||||
// Avoid firing if user is tabbing through or simply pressing
|
||||
// enter to submit the form.
|
||||
return;
|
||||
}
|
||||
document.getElementById(widget_name).checked = true;
|
||||
}
|
||||
//]]>
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="/+icing/vanilla-framework-version-4.7.0.min.css" />
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body id="document" itemscope="" itemtype="http://schema.org/WebPage" class="tab-unknown
|
||||
main_only
|
||||
public
|
||||
yui3-skin-sam">
|
||||
|
||||
|
||||
|
||||
<div class="yui-d0">
|
||||
<div id="locationbar" class="login-logout">
|
||||
|
||||
|
||||
<div id="logincontrol"><a href="https://launchpad.net/+login">Log in / Register</a></div>
|
||||
|
||||
|
||||
|
||||
</div><!--id="locationbar"-->
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="maincontent" class="yui-main">
|
||||
<div class="yui-b" dir="ltr">
|
||||
<div class="context-publication">
|
||||
|
||||
|
||||
|
||||
<div id="registration" class="registering">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="request-notifications">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
|
||||
|
||||
<!-- Is your project registered yet? -->
|
||||
|
||||
<div id="homepage" class="homepage">
|
||||
|
||||
<div class="top-portlet">
|
||||
<img src="/@@/launchpad-logo-and-name.svg" class="homepage__logo" id="launchpad-logo-and-name" alt="Launchpad logo and name" />
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div class="u-fixed-width">
|
||||
<form id="homepage-searchform" class="p-form p-form--inline" xml:lang="en" lang="en" dir="ltr" method="get" accept-charset="UTF-8" action="https://launchpad.net/+search">
|
||||
<div class="p-form__group p-form--search">
|
||||
<label for="search-input" class="u-off-screen">Search</label>
|
||||
<div class="p-form__control u-clearfix">
|
||||
<input id="search-input" type="search" name="field.text" value="" autofocus="">
|
||||
</div>
|
||||
</div>
|
||||
<button id="search" class="p-button--positive" type="submit" value="Search Launchpad">Search</button>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
LPJS.use('lp', function () {
|
||||
setFocusByName('field.text');
|
||||
});
|
||||
</script>
|
||||
<div id="homepage-stats" class="u-text--muted">
|
||||
<strong>49,106</strong> projects,
|
||||
<strong>2,108,367</strong> bugs,
|
||||
<strong>1,009,234</strong> branches,
|
||||
<strong>119,025</strong> Git repositories,
|
||||
<strong>3,185,634</strong> translations,
|
||||
<strong>822,311</strong> answers,
|
||||
<strong>76,426</strong> blueprints,
|
||||
and counting...
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div class="homepage-whatslaunchpad">
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<h2>Launchpad</h2>
|
||||
<h4>A software collaboration platform that provides</h4>
|
||||
</div>
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<div class="row p-divider">
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://bugs.launchpad.net/">Bug tracking</a></h4>
|
||||
<p>One place to track bugs across project boundaries and tools</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://code.launchpad.net/">Code hosting</a> using <a href="https://git-scm.com/">Git</a></h4>
|
||||
<p>Easy for anyone to get your project's code using Git</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://documentation.ubuntu.com/launchpad/user/how-to/work-with-code-hosted-on-launchpad/create-and-manage-a-merge-proposal/">Code reviews</a></h4>
|
||||
<p>Full control of who can land code in your project remains with you</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://launchpad.net/ubuntu">Ubuntu package building and hosting</a></h4>
|
||||
<p>Publishing your software is simple with Personal Package Archives</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row p-divider">
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://translations.launchpad.net/">Crowd source translations</a></h4>
|
||||
<p>Build an open community to translate your software into almost any language</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://documentation.ubuntu.com/launchpad/user/Teams/MailingLists">Mailing lists</a></h4>
|
||||
<p>Find and work with the right people by building a social network of individuals and teams around projects</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://answers.launchpad.net/">Answer tracking and FAQs</a></h4>
|
||||
<p>Free software thrives on people helping each other when the unexpected happens</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://blueprints.launchpad.net/">Specification tracking</a></h4>
|
||||
<p>Track ideas and chunks of work as “blueprints”</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div id="homepage-getstarted">
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<h2 class="u-float-left">Get started</h2>
|
||||
</div>
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<span>
|
||||
Learn more about Launchpad in the
|
||||
<a href="https://documentation.ubuntu.com/launchpad/">user guide</a>.
|
||||
</span>
|
||||
If you're ready, you can:
|
||||
|
||||
<ul class="p-matrix">
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" src="/@@/add-homepage.png" alt="add">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/+login">Create an account</a></h4>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" src="/@@/tour-homepage.png" alt="tour">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/+tour">Take the tour</a></h4>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" src="/@@/question-homepage.png" alt="question">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="https://answers.launchpad.net/">Find answers</a></h4>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div id="homepage-featured">
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<h2 class="u-float-left">Featured projects</h2>
|
||||
</div>
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<ul class="p-matrix featured-projects-list">
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Beautiful Soup" src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/beautifulsoup">Beautiful Soup</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>A program designed for screen-scraping HTML. The discussion group is at: http://groups.google.com...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Inkscape" src="https://launchpadlibrarian.net/66795469/ink-lp-logo.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/inkscape">Inkscape</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Inkscape is an SVG-based graphics editor featuring alpha
|
||||
blending, node editing, SVG to PNG exp...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Launchpad itself" src="https://launchpadlibrarian.net/600817174/Canonical_Launchpad_icon_64px.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/launchpad">Launchpad itself</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Launchpad is a set of Web services to help software developers collaborate.</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="launchpadlib " src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/launchpadlib">launchpadlib </a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Python client library for Launchpad's web service</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="OpenMW" src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/openmw">OpenMW</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>OpenMW is an attempt to reimplement the popular role playing game Morrowind. It aims to be a full...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="OpenShot Video Editor" src="https://launchpadlibrarian.net/250357498/OpenShot-2-Logo.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/openshot">OpenShot Video Editor</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>OpenShot Video Editor is a free, open-source, non-linear video editor. It can create and edit vid...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="OpenStack" src="https://launchpadlibrarian.net/52042558/os64.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/openstack">OpenStack</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>The OpenStack Open Source Cloud Mission: to produce the ubiquitous Open Source Cloud Computing pl...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="txpkgupload" src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/txpkgupload">txpkgupload</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Package upload server used by Launchpad.</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Ubuntu" src="https://launchpadlibrarian.net/606381979/CoF%2064px.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/ubuntu">Ubuntu</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Ubuntu is a complete Linux-based operating system, freely available with both community and profe...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="horizontal">
|
||||
<li>
|
||||
<strong><a href="/projects">Browse all
|
||||
49106
|
||||
projects</a>!</strong>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div><!-- homepage -->
|
||||
</div>
|
||||
|
||||
|
||||
</div><!-- yui-b -->
|
||||
</div><!-- yui-main -->
|
||||
|
||||
|
||||
<!-- yui-b side -->
|
||||
|
||||
<!-- yui-t4 -->
|
||||
|
||||
|
||||
<div id="footer" class="footer">
|
||||
|
||||
|
||||
<div class="colophon">
|
||||
© 2004
|
||||
<a href="http://canonical.com/">Canonical Ltd.</a>
|
||||
•
|
||||
<a href="https://ubuntu.com/legal/launchpad-terms-of-service">Terms of use</a>
|
||||
•
|
||||
<a href="https://www.ubuntu.com/legal/dataprivacy">Data privacy</a>
|
||||
•
|
||||
<a href="/feedback">Contact Launchpad Support</a>
|
||||
|
||||
•
|
||||
<a href="http://blog.launchpad.net/">Blog</a>
|
||||
|
||||
•
|
||||
<a href="https://canonical.com/careers">Careers</a>
|
||||
|
||||
•
|
||||
<a href="https://ubuntu.social/@launchpadstatus">System status</a>
|
||||
<span id="lp-version">
|
||||
•
|
||||
b042f2d
|
||||
|
||||
|
||||
(<a href="https://documentation.ubuntu.com/launchpad/developer/how-to/get-source-code/">Get the code!</a>)
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div><!-- yui-d0-->
|
||||
|
||||
|
||||
|
||||
|
||||
<script id="json-cache-script">LP.cache = {"related_features": {}};</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
|
||||
<!--
|
||||
Facet name: unknown
|
||||
Page type: main_only
|
||||
Has global search: True
|
||||
Has application tabs: True
|
||||
Has side portlets: False
|
||||
|
||||
At least 22 queries/external actions issued in 0.12 seconds
|
||||
|
||||
Features: {'profiling.enabled': None, 'hard_timeout': '5000', 'js.yui_version': None, 'app.maintenance_message': None, 'app.mainsite_only.canonical_url': None, 'baselayout.careers_link.disabled': None, 'visible_render_time': None}
|
||||
|
||||
rb042f2d
|
||||
|
||||
-->
|
||||
|
||||
</html>
|
||||
|
||||
511
sysroot-arm32/index.html.1
Normal file
511
sysroot-arm32/index.html.1
Normal file
|
|
@ -0,0 +1,511 @@
|
|||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>Launchpad</title>
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/@@/apple-touch-icon.png?v=2022" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/@@/favicon-32x32.png?v=2022" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/@@/favicon-16x16.png?v=2022" />
|
||||
<link rel="manifest" href="/@@/site.webmanifest?v=2022" />
|
||||
<link rel="mask-icon" href="/@@/safari-pinned-tab.svg?v=2022" color="#e9531f" />
|
||||
<link rel="shortcut icon" href="/@@/favicon.ico?v=2022" />
|
||||
<meta name="msapplication-TileColor" content="#da532c" />
|
||||
<meta name="msapplication-config" content="/@@/browserconfig.xml?v=2022" />
|
||||
<meta name="theme-color" content="#ffffff" />
|
||||
|
||||
|
||||
<link rel="alternate" type="application/atom+xml" href="http://feeds.launchpad.net/announcements.atom" title="All Announcements" />
|
||||
|
||||
|
||||
|
||||
|
||||
<link type="text/css" rel="stylesheet" media="screen, print" href="/+icing/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/combo.css" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<meta property="og:title" content="Launchpad" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:image" content="/@@/launchpad-og-image.png" />
|
||||
<meta property="og:url" content="https://launchpad.net/index.html" />
|
||||
<meta property="og:site_name" content="Launchpad" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
var LP = {
|
||||
cache: {},
|
||||
links: {}
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">var cookie_scope = '; Path=/; Secure; Domain=.launchpad.net';</script>
|
||||
|
||||
<script type="text/javascript" src="/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?yui/yui/yui-min.js&lp/meta.js&yui/loader/loader-min.js"></script>
|
||||
<script type="text/javascript">
|
||||
var raw = null;
|
||||
if (LP.devmode) {
|
||||
raw = 'raw';
|
||||
}
|
||||
YUI.GlobalConfig = {
|
||||
combine: true,
|
||||
comboBase: '/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?',
|
||||
root: 'yui/',
|
||||
filter: raw,
|
||||
debug: false,
|
||||
fetchCSS: false,
|
||||
maxURLLength: 2000,
|
||||
groups: {
|
||||
lp: {
|
||||
combine: true,
|
||||
base: '/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?lp/',
|
||||
comboBase: '/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?',
|
||||
root: 'lp/',
|
||||
// comes from including lp/meta.js
|
||||
modules: LP_MODULES,
|
||||
fetchCSS: false
|
||||
}
|
||||
}
|
||||
}</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
// we need this to create a single YUI instance all events and code
|
||||
// talks across. All instances of YUI().use should be based off of
|
||||
// LPJS instead.
|
||||
var LPJS = new YUI();
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<script id="base-layout-load-scripts" type="text/javascript">
|
||||
//<![CDATA[
|
||||
LPJS.use('base', 'node', 'console', 'event',
|
||||
'oop', 'lp', 'lp.app.foldables','lp.app.sorttable',
|
||||
'lp.app.inlinehelp', 'lp.app.links',
|
||||
'lp.bugs.bugtask_index', 'lp.bugs.subscribers',
|
||||
'lp.app.ellipsis', 'lp.code.branchmergeproposal.diff',
|
||||
'lp.views.global',
|
||||
function(Y) {
|
||||
|
||||
Y.on("domready", function () {
|
||||
var global_view = new Y.lp.views.Global();
|
||||
global_view.render();
|
||||
|
||||
Y.lp.app.sorttable.SortTable.init();
|
||||
Y.lp.app.inlinehelp.init_help();
|
||||
Y.lp.activate_collapsibles();
|
||||
Y.lp.app.foldables.activate();
|
||||
Y.lp.app.links.check_valid_lp_links();
|
||||
});
|
||||
|
||||
Y.on('lp:context:web_link:changed', function(e) {
|
||||
window.location = e.new_value;
|
||||
});
|
||||
});
|
||||
//]]>
|
||||
</script>
|
||||
<script id="base-helper-functions" type="text/javascript">
|
||||
//<![CDATA[
|
||||
// This code is pulled from lp.js that needs to be available on every
|
||||
// request. Pulling here to get it outside the scope of the YUI block.
|
||||
function setFocusByName(name) {
|
||||
// Focus the first element matching the given name which can be focused.
|
||||
var nodes = document.getElementsByName(name);
|
||||
var i, node;
|
||||
for (i = 0; i < nodes.length; i++) {
|
||||
node = nodes[i];
|
||||
if (node.focus) {
|
||||
try {
|
||||
// Trying to focus a hidden element throws an error in IE8.
|
||||
if (node.offsetHeight !== 0) {
|
||||
node.focus();
|
||||
}
|
||||
} catch (e) {
|
||||
LPJS.use('console', function(Y) {
|
||||
Y.log('In setFocusByName(<' +
|
||||
node.tagName + ' type=' + node.type + '>): ' + e);
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function selectWidget(widget_name, event) {
|
||||
if (event && (event.keyCode === 9 || event.keyCode === 13)) {
|
||||
// Avoid firing if user is tabbing through or simply pressing
|
||||
// enter to submit the form.
|
||||
return;
|
||||
}
|
||||
document.getElementById(widget_name).checked = true;
|
||||
}
|
||||
//]]>
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="/+icing/vanilla-framework-version-4.7.0.min.css" />
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body id="document" itemscope="" itemtype="http://schema.org/WebPage" class="tab-unknown
|
||||
main_only
|
||||
public
|
||||
yui3-skin-sam">
|
||||
|
||||
|
||||
|
||||
<div class="yui-d0">
|
||||
<div id="locationbar" class="login-logout">
|
||||
|
||||
|
||||
<div id="logincontrol"><a href="https://launchpad.net/+login">Log in / Register</a></div>
|
||||
|
||||
|
||||
|
||||
</div><!--id="locationbar"-->
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="maincontent" class="yui-main">
|
||||
<div class="yui-b" dir="ltr">
|
||||
<div class="context-publication">
|
||||
|
||||
|
||||
|
||||
<div id="registration" class="registering">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="request-notifications">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
|
||||
|
||||
<!-- Is your project registered yet? -->
|
||||
|
||||
<div id="homepage" class="homepage">
|
||||
|
||||
<div class="top-portlet">
|
||||
<img src="/@@/launchpad-logo-and-name.svg" class="homepage__logo" id="launchpad-logo-and-name" alt="Launchpad logo and name" />
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div class="u-fixed-width">
|
||||
<form id="homepage-searchform" class="p-form p-form--inline" xml:lang="en" lang="en" dir="ltr" method="get" accept-charset="UTF-8" action="https://launchpad.net/+search">
|
||||
<div class="p-form__group p-form--search">
|
||||
<label for="search-input" class="u-off-screen">Search</label>
|
||||
<div class="p-form__control u-clearfix">
|
||||
<input id="search-input" type="search" name="field.text" value="" autofocus="">
|
||||
</div>
|
||||
</div>
|
||||
<button id="search" class="p-button--positive" type="submit" value="Search Launchpad">Search</button>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
LPJS.use('lp', function () {
|
||||
setFocusByName('field.text');
|
||||
});
|
||||
</script>
|
||||
<div id="homepage-stats" class="u-text--muted">
|
||||
<strong>49,106</strong> projects,
|
||||
<strong>2,108,367</strong> bugs,
|
||||
<strong>1,009,234</strong> branches,
|
||||
<strong>119,025</strong> Git repositories,
|
||||
<strong>3,185,634</strong> translations,
|
||||
<strong>822,311</strong> answers,
|
||||
<strong>76,426</strong> blueprints,
|
||||
and counting...
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div class="homepage-whatslaunchpad">
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<h2>Launchpad</h2>
|
||||
<h4>A software collaboration platform that provides</h4>
|
||||
</div>
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<div class="row p-divider">
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://bugs.launchpad.net/">Bug tracking</a></h4>
|
||||
<p>One place to track bugs across project boundaries and tools</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://code.launchpad.net/">Code hosting</a> using <a href="https://git-scm.com/">Git</a></h4>
|
||||
<p>Easy for anyone to get your project's code using Git</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://documentation.ubuntu.com/launchpad/user/how-to/work-with-code-hosted-on-launchpad/create-and-manage-a-merge-proposal/">Code reviews</a></h4>
|
||||
<p>Full control of who can land code in your project remains with you</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://launchpad.net/ubuntu">Ubuntu package building and hosting</a></h4>
|
||||
<p>Publishing your software is simple with Personal Package Archives</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row p-divider">
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://translations.launchpad.net/">Crowd source translations</a></h4>
|
||||
<p>Build an open community to translate your software into almost any language</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://documentation.ubuntu.com/launchpad/user/Teams/MailingLists">Mailing lists</a></h4>
|
||||
<p>Find and work with the right people by building a social network of individuals and teams around projects</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://answers.launchpad.net/">Answer tracking and FAQs</a></h4>
|
||||
<p>Free software thrives on people helping each other when the unexpected happens</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://blueprints.launchpad.net/">Specification tracking</a></h4>
|
||||
<p>Track ideas and chunks of work as “blueprints”</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div id="homepage-getstarted">
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<h2 class="u-float-left">Get started</h2>
|
||||
</div>
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<span>
|
||||
Learn more about Launchpad in the
|
||||
<a href="https://documentation.ubuntu.com/launchpad/">user guide</a>.
|
||||
</span>
|
||||
If you're ready, you can:
|
||||
|
||||
<ul class="p-matrix">
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" src="/@@/add-homepage.png" alt="add">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/+login">Create an account</a></h4>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" src="/@@/tour-homepage.png" alt="tour">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/+tour">Take the tour</a></h4>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" src="/@@/question-homepage.png" alt="question">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="https://answers.launchpad.net/">Find answers</a></h4>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div id="homepage-featured">
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<h2 class="u-float-left">Featured projects</h2>
|
||||
</div>
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<ul class="p-matrix featured-projects-list">
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Beautiful Soup" src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/beautifulsoup">Beautiful Soup</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>A program designed for screen-scraping HTML. The discussion group is at: http://groups.google.com...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Inkscape" src="https://launchpadlibrarian.net/66795469/ink-lp-logo.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/inkscape">Inkscape</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Inkscape is an SVG-based graphics editor featuring alpha
|
||||
blending, node editing, SVG to PNG exp...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Launchpad itself" src="https://launchpadlibrarian.net/600817174/Canonical_Launchpad_icon_64px.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/launchpad">Launchpad itself</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Launchpad is a set of Web services to help software developers collaborate.</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="launchpadlib " src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/launchpadlib">launchpadlib </a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Python client library for Launchpad's web service</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="OpenMW" src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/openmw">OpenMW</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>OpenMW is an attempt to reimplement the popular role playing game Morrowind. It aims to be a full...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="OpenShot Video Editor" src="https://launchpadlibrarian.net/250357498/OpenShot-2-Logo.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/openshot">OpenShot Video Editor</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>OpenShot Video Editor is a free, open-source, non-linear video editor. It can create and edit vid...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="OpenStack" src="https://launchpadlibrarian.net/52042558/os64.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/openstack">OpenStack</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>The OpenStack Open Source Cloud Mission: to produce the ubiquitous Open Source Cloud Computing pl...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="txpkgupload" src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/txpkgupload">txpkgupload</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Package upload server used by Launchpad.</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Ubuntu" src="https://launchpadlibrarian.net/606381979/CoF%2064px.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/ubuntu">Ubuntu</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Ubuntu is a complete Linux-based operating system, freely available with both community and profe...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="horizontal">
|
||||
<li>
|
||||
<strong><a href="/projects">Browse all
|
||||
49106
|
||||
projects</a>!</strong>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div><!-- homepage -->
|
||||
</div>
|
||||
|
||||
|
||||
</div><!-- yui-b -->
|
||||
</div><!-- yui-main -->
|
||||
|
||||
|
||||
<!-- yui-b side -->
|
||||
|
||||
<!-- yui-t4 -->
|
||||
|
||||
|
||||
<div id="footer" class="footer">
|
||||
|
||||
|
||||
<div class="colophon">
|
||||
© 2004
|
||||
<a href="http://canonical.com/">Canonical Ltd.</a>
|
||||
•
|
||||
<a href="https://ubuntu.com/legal/launchpad-terms-of-service">Terms of use</a>
|
||||
•
|
||||
<a href="https://www.ubuntu.com/legal/dataprivacy">Data privacy</a>
|
||||
•
|
||||
<a href="/feedback">Contact Launchpad Support</a>
|
||||
|
||||
•
|
||||
<a href="http://blog.launchpad.net/">Blog</a>
|
||||
|
||||
•
|
||||
<a href="https://canonical.com/careers">Careers</a>
|
||||
|
||||
•
|
||||
<a href="https://ubuntu.social/@launchpadstatus">System status</a>
|
||||
<span id="lp-version">
|
||||
•
|
||||
b042f2d
|
||||
|
||||
|
||||
(<a href="https://documentation.ubuntu.com/launchpad/developer/how-to/get-source-code/">Get the code!</a>)
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div><!-- yui-d0-->
|
||||
|
||||
|
||||
|
||||
|
||||
<script id="json-cache-script">LP.cache = {"related_features": {}};</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
|
||||
<!--
|
||||
Facet name: unknown
|
||||
Page type: main_only
|
||||
Has global search: True
|
||||
Has application tabs: True
|
||||
Has side portlets: False
|
||||
|
||||
At least 22 queries/external actions issued in 0.12 seconds
|
||||
|
||||
Features: {'profiling.enabled': None, 'hard_timeout': '5000', 'js.yui_version': None, 'app.maintenance_message': None, 'app.mainsite_only.canonical_url': None, 'baselayout.careers_link.disabled': None, 'visible_render_time': None}
|
||||
|
||||
rb042f2d
|
||||
|
||||
-->
|
||||
|
||||
</html>
|
||||
|
||||
511
sysroot-arm32/index.html.2
Normal file
511
sysroot-arm32/index.html.2
Normal file
|
|
@ -0,0 +1,511 @@
|
|||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>Launchpad</title>
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/@@/apple-touch-icon.png?v=2022" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/@@/favicon-32x32.png?v=2022" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/@@/favicon-16x16.png?v=2022" />
|
||||
<link rel="manifest" href="/@@/site.webmanifest?v=2022" />
|
||||
<link rel="mask-icon" href="/@@/safari-pinned-tab.svg?v=2022" color="#e9531f" />
|
||||
<link rel="shortcut icon" href="/@@/favicon.ico?v=2022" />
|
||||
<meta name="msapplication-TileColor" content="#da532c" />
|
||||
<meta name="msapplication-config" content="/@@/browserconfig.xml?v=2022" />
|
||||
<meta name="theme-color" content="#ffffff" />
|
||||
|
||||
|
||||
<link rel="alternate" type="application/atom+xml" href="http://feeds.launchpad.net/announcements.atom" title="All Announcements" />
|
||||
|
||||
|
||||
|
||||
|
||||
<link type="text/css" rel="stylesheet" media="screen, print" href="/+icing/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/combo.css" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<meta property="og:title" content="Launchpad" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:image" content="/@@/launchpad-og-image.png" />
|
||||
<meta property="og:url" content="https://launchpad.net/index.html" />
|
||||
<meta property="og:site_name" content="Launchpad" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
var LP = {
|
||||
cache: {},
|
||||
links: {}
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">var cookie_scope = '; Path=/; Secure; Domain=.launchpad.net';</script>
|
||||
|
||||
<script type="text/javascript" src="/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?yui/yui/yui-min.js&lp/meta.js&yui/loader/loader-min.js"></script>
|
||||
<script type="text/javascript">
|
||||
var raw = null;
|
||||
if (LP.devmode) {
|
||||
raw = 'raw';
|
||||
}
|
||||
YUI.GlobalConfig = {
|
||||
combine: true,
|
||||
comboBase: '/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?',
|
||||
root: 'yui/',
|
||||
filter: raw,
|
||||
debug: false,
|
||||
fetchCSS: false,
|
||||
maxURLLength: 2000,
|
||||
groups: {
|
||||
lp: {
|
||||
combine: true,
|
||||
base: '/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?lp/',
|
||||
comboBase: '/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?',
|
||||
root: 'lp/',
|
||||
// comes from including lp/meta.js
|
||||
modules: LP_MODULES,
|
||||
fetchCSS: false
|
||||
}
|
||||
}
|
||||
}</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
// we need this to create a single YUI instance all events and code
|
||||
// talks across. All instances of YUI().use should be based off of
|
||||
// LPJS instead.
|
||||
var LPJS = new YUI();
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<script id="base-layout-load-scripts" type="text/javascript">
|
||||
//<![CDATA[
|
||||
LPJS.use('base', 'node', 'console', 'event',
|
||||
'oop', 'lp', 'lp.app.foldables','lp.app.sorttable',
|
||||
'lp.app.inlinehelp', 'lp.app.links',
|
||||
'lp.bugs.bugtask_index', 'lp.bugs.subscribers',
|
||||
'lp.app.ellipsis', 'lp.code.branchmergeproposal.diff',
|
||||
'lp.views.global',
|
||||
function(Y) {
|
||||
|
||||
Y.on("domready", function () {
|
||||
var global_view = new Y.lp.views.Global();
|
||||
global_view.render();
|
||||
|
||||
Y.lp.app.sorttable.SortTable.init();
|
||||
Y.lp.app.inlinehelp.init_help();
|
||||
Y.lp.activate_collapsibles();
|
||||
Y.lp.app.foldables.activate();
|
||||
Y.lp.app.links.check_valid_lp_links();
|
||||
});
|
||||
|
||||
Y.on('lp:context:web_link:changed', function(e) {
|
||||
window.location = e.new_value;
|
||||
});
|
||||
});
|
||||
//]]>
|
||||
</script>
|
||||
<script id="base-helper-functions" type="text/javascript">
|
||||
//<![CDATA[
|
||||
// This code is pulled from lp.js that needs to be available on every
|
||||
// request. Pulling here to get it outside the scope of the YUI block.
|
||||
function setFocusByName(name) {
|
||||
// Focus the first element matching the given name which can be focused.
|
||||
var nodes = document.getElementsByName(name);
|
||||
var i, node;
|
||||
for (i = 0; i < nodes.length; i++) {
|
||||
node = nodes[i];
|
||||
if (node.focus) {
|
||||
try {
|
||||
// Trying to focus a hidden element throws an error in IE8.
|
||||
if (node.offsetHeight !== 0) {
|
||||
node.focus();
|
||||
}
|
||||
} catch (e) {
|
||||
LPJS.use('console', function(Y) {
|
||||
Y.log('In setFocusByName(<' +
|
||||
node.tagName + ' type=' + node.type + '>): ' + e);
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function selectWidget(widget_name, event) {
|
||||
if (event && (event.keyCode === 9 || event.keyCode === 13)) {
|
||||
// Avoid firing if user is tabbing through or simply pressing
|
||||
// enter to submit the form.
|
||||
return;
|
||||
}
|
||||
document.getElementById(widget_name).checked = true;
|
||||
}
|
||||
//]]>
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="/+icing/vanilla-framework-version-4.7.0.min.css" />
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body id="document" itemscope="" itemtype="http://schema.org/WebPage" class="tab-unknown
|
||||
main_only
|
||||
public
|
||||
yui3-skin-sam">
|
||||
|
||||
|
||||
|
||||
<div class="yui-d0">
|
||||
<div id="locationbar" class="login-logout">
|
||||
|
||||
|
||||
<div id="logincontrol"><a href="https://launchpad.net/+login">Log in / Register</a></div>
|
||||
|
||||
|
||||
|
||||
</div><!--id="locationbar"-->
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="maincontent" class="yui-main">
|
||||
<div class="yui-b" dir="ltr">
|
||||
<div class="context-publication">
|
||||
|
||||
|
||||
|
||||
<div id="registration" class="registering">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="request-notifications">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
|
||||
|
||||
<!-- Is your project registered yet? -->
|
||||
|
||||
<div id="homepage" class="homepage">
|
||||
|
||||
<div class="top-portlet">
|
||||
<img src="/@@/launchpad-logo-and-name.svg" class="homepage__logo" id="launchpad-logo-and-name" alt="Launchpad logo and name" />
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div class="u-fixed-width">
|
||||
<form id="homepage-searchform" class="p-form p-form--inline" xml:lang="en" lang="en" dir="ltr" method="get" accept-charset="UTF-8" action="https://launchpad.net/+search">
|
||||
<div class="p-form__group p-form--search">
|
||||
<label for="search-input" class="u-off-screen">Search</label>
|
||||
<div class="p-form__control u-clearfix">
|
||||
<input id="search-input" type="search" name="field.text" value="" autofocus="">
|
||||
</div>
|
||||
</div>
|
||||
<button id="search" class="p-button--positive" type="submit" value="Search Launchpad">Search</button>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
LPJS.use('lp', function () {
|
||||
setFocusByName('field.text');
|
||||
});
|
||||
</script>
|
||||
<div id="homepage-stats" class="u-text--muted">
|
||||
<strong>49,106</strong> projects,
|
||||
<strong>2,108,367</strong> bugs,
|
||||
<strong>1,009,234</strong> branches,
|
||||
<strong>119,025</strong> Git repositories,
|
||||
<strong>3,185,634</strong> translations,
|
||||
<strong>822,311</strong> answers,
|
||||
<strong>76,426</strong> blueprints,
|
||||
and counting...
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div class="homepage-whatslaunchpad">
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<h2>Launchpad</h2>
|
||||
<h4>A software collaboration platform that provides</h4>
|
||||
</div>
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<div class="row p-divider">
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://bugs.launchpad.net/">Bug tracking</a></h4>
|
||||
<p>One place to track bugs across project boundaries and tools</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://code.launchpad.net/">Code hosting</a> using <a href="https://git-scm.com/">Git</a></h4>
|
||||
<p>Easy for anyone to get your project's code using Git</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://documentation.ubuntu.com/launchpad/user/how-to/work-with-code-hosted-on-launchpad/create-and-manage-a-merge-proposal/">Code reviews</a></h4>
|
||||
<p>Full control of who can land code in your project remains with you</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://launchpad.net/ubuntu">Ubuntu package building and hosting</a></h4>
|
||||
<p>Publishing your software is simple with Personal Package Archives</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row p-divider">
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://translations.launchpad.net/">Crowd source translations</a></h4>
|
||||
<p>Build an open community to translate your software into almost any language</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://documentation.ubuntu.com/launchpad/user/Teams/MailingLists">Mailing lists</a></h4>
|
||||
<p>Find and work with the right people by building a social network of individuals and teams around projects</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://answers.launchpad.net/">Answer tracking and FAQs</a></h4>
|
||||
<p>Free software thrives on people helping each other when the unexpected happens</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://blueprints.launchpad.net/">Specification tracking</a></h4>
|
||||
<p>Track ideas and chunks of work as “blueprints”</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div id="homepage-getstarted">
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<h2 class="u-float-left">Get started</h2>
|
||||
</div>
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<span>
|
||||
Learn more about Launchpad in the
|
||||
<a href="https://documentation.ubuntu.com/launchpad/">user guide</a>.
|
||||
</span>
|
||||
If you're ready, you can:
|
||||
|
||||
<ul class="p-matrix">
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" src="/@@/add-homepage.png" alt="add">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/+login">Create an account</a></h4>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" src="/@@/tour-homepage.png" alt="tour">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/+tour">Take the tour</a></h4>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" src="/@@/question-homepage.png" alt="question">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="https://answers.launchpad.net/">Find answers</a></h4>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div id="homepage-featured">
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<h2 class="u-float-left">Featured projects</h2>
|
||||
</div>
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<ul class="p-matrix featured-projects-list">
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Beautiful Soup" src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/beautifulsoup">Beautiful Soup</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>A program designed for screen-scraping HTML. The discussion group is at: http://groups.google.com...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Inkscape" src="https://launchpadlibrarian.net/66795469/ink-lp-logo.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/inkscape">Inkscape</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Inkscape is an SVG-based graphics editor featuring alpha
|
||||
blending, node editing, SVG to PNG exp...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Launchpad itself" src="https://launchpadlibrarian.net/600817174/Canonical_Launchpad_icon_64px.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/launchpad">Launchpad itself</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Launchpad is a set of Web services to help software developers collaborate.</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="launchpadlib " src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/launchpadlib">launchpadlib </a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Python client library for Launchpad's web service</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="OpenMW" src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/openmw">OpenMW</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>OpenMW is an attempt to reimplement the popular role playing game Morrowind. It aims to be a full...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="OpenShot Video Editor" src="https://launchpadlibrarian.net/250357498/OpenShot-2-Logo.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/openshot">OpenShot Video Editor</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>OpenShot Video Editor is a free, open-source, non-linear video editor. It can create and edit vid...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="OpenStack" src="https://launchpadlibrarian.net/52042558/os64.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/openstack">OpenStack</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>The OpenStack Open Source Cloud Mission: to produce the ubiquitous Open Source Cloud Computing pl...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="txpkgupload" src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/txpkgupload">txpkgupload</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Package upload server used by Launchpad.</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Ubuntu" src="https://launchpadlibrarian.net/606381979/CoF%2064px.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/ubuntu">Ubuntu</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Ubuntu is a complete Linux-based operating system, freely available with both community and profe...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="horizontal">
|
||||
<li>
|
||||
<strong><a href="/projects">Browse all
|
||||
49106
|
||||
projects</a>!</strong>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div><!-- homepage -->
|
||||
</div>
|
||||
|
||||
|
||||
</div><!-- yui-b -->
|
||||
</div><!-- yui-main -->
|
||||
|
||||
|
||||
<!-- yui-b side -->
|
||||
|
||||
<!-- yui-t4 -->
|
||||
|
||||
|
||||
<div id="footer" class="footer">
|
||||
|
||||
|
||||
<div class="colophon">
|
||||
© 2004
|
||||
<a href="http://canonical.com/">Canonical Ltd.</a>
|
||||
•
|
||||
<a href="https://ubuntu.com/legal/launchpad-terms-of-service">Terms of use</a>
|
||||
•
|
||||
<a href="https://www.ubuntu.com/legal/dataprivacy">Data privacy</a>
|
||||
•
|
||||
<a href="/feedback">Contact Launchpad Support</a>
|
||||
|
||||
•
|
||||
<a href="http://blog.launchpad.net/">Blog</a>
|
||||
|
||||
•
|
||||
<a href="https://canonical.com/careers">Careers</a>
|
||||
|
||||
•
|
||||
<a href="https://ubuntu.social/@launchpadstatus">System status</a>
|
||||
<span id="lp-version">
|
||||
•
|
||||
b042f2d
|
||||
|
||||
|
||||
(<a href="https://documentation.ubuntu.com/launchpad/developer/how-to/get-source-code/">Get the code!</a>)
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div><!-- yui-d0-->
|
||||
|
||||
|
||||
|
||||
|
||||
<script id="json-cache-script">LP.cache = {"related_features": {}};</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
|
||||
<!--
|
||||
Facet name: unknown
|
||||
Page type: main_only
|
||||
Has global search: True
|
||||
Has application tabs: True
|
||||
Has side portlets: False
|
||||
|
||||
At least 22 queries/external actions issued in 0.38 seconds
|
||||
|
||||
Features: {'profiling.enabled': None, 'hard_timeout': '5000', 'js.yui_version': None, 'app.maintenance_message': None, 'app.mainsite_only.canonical_url': None, 'baselayout.careers_link.disabled': None, 'visible_render_time': None}
|
||||
|
||||
rb042f2d
|
||||
|
||||
-->
|
||||
|
||||
</html>
|
||||
|
||||
BIN
sysroot-arm32/libudev1_255.4-1ubuntu8_armhf.deb
Normal file
BIN
sysroot-arm32/libudev1_255.4-1ubuntu8_armhf.deb
Normal file
Binary file not shown.
BIN
sysroot-arm32/libusb-1.0-0-dev_1.0.27-1_armhf.deb
Normal file
BIN
sysroot-arm32/libusb-1.0-0-dev_1.0.27-1_armhf.deb
Normal file
Binary file not shown.
BIN
sysroot-arm32/libusb-1.0-0_1.0.27-1_armhf.deb
Normal file
BIN
sysroot-arm32/libusb-1.0-0_1.0.27-1_armhf.deb
Normal file
Binary file not shown.
2311
sysroot-arm32/usr/include/libusb-1.0/libusb.h
Normal file
2311
sysroot-arm32/usr/include/libusb-1.0/libusb.h
Normal file
File diff suppressed because it is too large
Load diff
1
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libcap.so.2
Symbolic link
1
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libcap.so.2
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
libcap.so.2.66
|
||||
BIN
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libcap.so.2.66
Normal file
BIN
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libcap.so.2.66
Normal file
Binary file not shown.
1
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libudev.so
Symbolic link
1
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libudev.so
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../lib/arm-linux-gnueabihf/libudev.so.1
|
||||
1
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libudev.so.1
Symbolic link
1
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libudev.so.1
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
libudev.so.1.7.8
|
||||
BIN
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libudev.so.1.7.8
Normal file
BIN
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libudev.so.1.7.8
Normal file
Binary file not shown.
BIN
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libusb-1.0.a
Normal file
BIN
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libusb-1.0.a
Normal file
Binary file not shown.
1
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libusb-1.0.so
Symbolic link
1
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libusb-1.0.so
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
libusb-1.0.so.0.4.0
|
||||
1
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libusb-1.0.so.0
Symbolic link
1
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libusb-1.0.so.0
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
libusb-1.0.so.0.4.0
|
||||
BIN
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libusb-1.0.so.0.4.0
Normal file
BIN
sysroot-arm32/usr/lib/arm-linux-gnueabihf/libusb-1.0.so.0.4.0
Normal file
Binary file not shown.
|
|
@ -0,0 +1,11 @@
|
|||
prefix=/usr
|
||||
exec_prefix=${prefix}
|
||||
libdir=${prefix}/lib/arm-linux-gnueabihf
|
||||
includedir=${prefix}/include
|
||||
|
||||
Name: libusb-1.0
|
||||
Description: C API for USB device access from Linux, Mac OS X, Windows, OpenBSD/NetBSD and Solaris userspace
|
||||
Version: 1.0.27
|
||||
Libs: -L${libdir} -lusb-1.0
|
||||
Libs.private: -ludev
|
||||
Cflags: -I${includedir}/libusb-1.0
|
||||
BIN
sysroot-arm32/usr/share/doc/libudev1/NEWS.Debian.gz
Normal file
BIN
sysroot-arm32/usr/share/doc/libudev1/NEWS.Debian.gz
Normal file
Binary file not shown.
BIN
sysroot-arm32/usr/share/doc/libudev1/changelog.Debian.gz
Normal file
BIN
sysroot-arm32/usr/share/doc/libudev1/changelog.Debian.gz
Normal file
Binary file not shown.
287
sysroot-arm32/usr/share/doc/libudev1/copyright
Normal file
287
sysroot-arm32/usr/share/doc/libudev1/copyright
Normal file
|
|
@ -0,0 +1,287 @@
|
|||
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: systemd
|
||||
Upstream-Contact: systemd-devel@lists.freedesktop.org
|
||||
Source: https://www.freedesktop.org/wiki/Software/systemd/
|
||||
|
||||
Files: *
|
||||
Copyright: 2008-2015 Kay Sievers <kay@vrfy.org>
|
||||
2010-2015 Lennart Poettering
|
||||
2012-2015 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
|
||||
2013-2015 Tom Gundersen <teg@jklm.no>
|
||||
2013-2015 Daniel Mack
|
||||
2010-2015 Harald Hoyer
|
||||
2013-2015 David Herrmann
|
||||
2013, 2014 Thomas H.P. Andersen
|
||||
2013, 2014 Daniel Buch
|
||||
2014 Susant Sahani
|
||||
2009-2015 Intel Corporation
|
||||
2000, 2005 Red Hat, Inc.
|
||||
2009 Alan Jenkins <alan-jenkins@tuffmail.co.uk>
|
||||
2010 ProFUSION embedded systems
|
||||
2010 Maarten Lankhorst
|
||||
1995-2004 Miquel van Smoorenburg
|
||||
1999 Tom Tromey
|
||||
2011 Michal Schmidt
|
||||
2012 B. Poettering
|
||||
2012 Holger Hans Peter Freyther
|
||||
2012 Dan Walsh
|
||||
2012 Roberto Sassu
|
||||
2013 David Strauss
|
||||
2013 Marius Vollmer
|
||||
2013 Jan Janssen
|
||||
2013 Simon Peeters
|
||||
License: LGPL-2.1+
|
||||
|
||||
Files: src/basic/siphash24.h
|
||||
src/basic/siphash24.c
|
||||
Copyright: 2012 Jean-Philippe Aumasson <jeanphilippe.aumasson@gmail.com>
|
||||
2012 Daniel J. Bernstein <djb@cr.yp.to>
|
||||
License: CC0-1.0
|
||||
|
||||
Files: src/shared/linux/*
|
||||
src/basic/linux/*
|
||||
Copyright: 2004-2009 Red Hat, Inc.
|
||||
2011-2014 PLUMgrid
|
||||
2001-2003 Sistina Software (UK) Limited.
|
||||
2008 Ian Kent <raven@themaw.net>
|
||||
1998 David S. Miller >davem@redhat.com>
|
||||
2001 Jeff Garzik <jgarzik@pobox.com>
|
||||
2006-2010 Johannes Berg <johannes@sipsolutions.net
|
||||
2008 Michael Wu <flamingice@sourmilk.net>
|
||||
2008 Luis Carlos Cobo <luisca@cozybit.com>
|
||||
2008 Michael Buesch <m@bues.ch>
|
||||
2008, 2009 Luis R. Rodriguez <lrodriguez@atheros.com>
|
||||
2008 Jouni Malinen <jouni.malinen@atheros.com>
|
||||
2008 Colin McCabe <colin@cozybit.com>
|
||||
2018-2019 Intel Corporation
|
||||
2007 Oracle.
|
||||
2009 Wolfgang Grandegger <wg@grandegger.com>
|
||||
1999 Thomas Davis <tadavis@lbl.gov>
|
||||
2015 Sabrina Dubroca <sd@queasysnail.net>
|
||||
1999-2000 Maxim Krasnyansky <max_mk@yahoo.com>
|
||||
2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>
|
||||
License: GPL-2 with Linux-syscall-note exception
|
||||
|
||||
Files: src/basic/sparse-endian.h
|
||||
Copyright: 2012 Josh Triplett <josh@joshtriplett.org>
|
||||
License: Expat
|
||||
|
||||
Files: src/basic/MurmurHash2.c
|
||||
src/basic/MurmurHash2.h
|
||||
src/libsystemd/sd-journal/lookup3.c
|
||||
src/libsystemd/sd-journal/lookup3.h
|
||||
Copyright: none
|
||||
License: public-domain
|
||||
You can use this free for any purpose. It's in the public domain. It has no
|
||||
warranty.
|
||||
|
||||
Files: src/udev/ata_id/ata_id.c
|
||||
src/udev/cdrom_id/cdrom_id.c
|
||||
src/udev/dmi_memory_id/dmi_memory_id.c
|
||||
src/udev/mtd_probe/mtd_probe.c
|
||||
src/udev/mtd_probe/mtd_probe.h
|
||||
src/udev/mtd_probe/probe_smartmedia.c
|
||||
src/udev/scsi_id/scsi.h
|
||||
src/udev/scsi_id/scsi_id.c
|
||||
src/udev/scsi_id/scsi_id.h
|
||||
src/udev/scsi_id/scsi_serial.c
|
||||
src/udev/udevadm.c
|
||||
src/udev/udevadm-control.c
|
||||
src/udev/udevadm.h
|
||||
src/udev/udevadm-info.c
|
||||
src/udev/udevadm-monitor.c
|
||||
src/udev/udevadm-settle.c
|
||||
src/udev/udevadm-test-builtin.c
|
||||
src/udev/udevadm-test.c
|
||||
src/udev/udevadm-trigger.c
|
||||
src/udev/udevadm-util.c
|
||||
src/udev/udevadm-util.h
|
||||
src/udev/udev-builtin-blkid.c
|
||||
src/udev/udev-builtin.h
|
||||
src/udev/udev-builtin-input_id.c
|
||||
src/udev/udev-builtin-kmod.c
|
||||
src/udev/udev-builtin-path_id.c
|
||||
src/udev/udev-builtin-uaccess.c
|
||||
src/udev/udev-builtin-usb_id.c
|
||||
src/udev/udev-ctrl.h
|
||||
src/udev/udevd.c
|
||||
src/udev/udevd.h
|
||||
src/udev/udev-event.c
|
||||
src/udev/udev-event.h
|
||||
src/udev/udev-node.c
|
||||
src/udev/udev-node.h
|
||||
src/udev/udev-rules.c
|
||||
src/udev/udev-rules.h
|
||||
src/udev/udev-watch.c
|
||||
src/udev/udev-watch.h
|
||||
src/udev/v4l_id/v4l_id.c
|
||||
Copyright: 2003-2012 Kay Sievers <kay@vrfy.org>
|
||||
2003-2004 Greg Kroah-Hartman <greg@kroah.com>
|
||||
2004 Chris Friesen <chris_friesen@sympatico.ca>
|
||||
2004, 2009, 2010 David Zeuthen <david@fubar.dk>
|
||||
2005, 2006 SUSE Linux Products GmbH
|
||||
2003 IBM Corp.
|
||||
2007 Hannes Reinecke <hare@suse.de>
|
||||
2009 Canonical Ltd.
|
||||
2009 Scott James Remnant <scott@netsplit.com>
|
||||
2009 Martin Pitt <martin.pitt@ubuntu.com>
|
||||
2009 Piter Punk <piterpunk@slackware.com>
|
||||
2009, 2010 Lennart Poettering
|
||||
2009 Filippo Argiolas <filippo.argiolas@gmail.com>
|
||||
2010 Maxim Levitsky
|
||||
2011 ProFUSION embedded systems
|
||||
2011 Karel Zak <kzak@redhat.com>
|
||||
2014 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
|
||||
2014 David Herrmann <dh.herrmann@gmail.com>
|
||||
2014 Carlos Garnacho <carlosg@gnome.org>
|
||||
License: GPL-2+
|
||||
|
||||
Files: debian/*
|
||||
Copyright: 2010-2013 Tollef Fog Heen <tfheen@debian.org>
|
||||
2011 Josh Triplett <josh@joshtriplett.org>
|
||||
2013-2014 Michael Stapelberg <stapelberg@debian.org>
|
||||
2013-2020 Martin Pitt <martin.pitt@ubuntu.com>
|
||||
2013-2022 Michael Biebl <biebl@debian.org>
|
||||
2013 Daniel Schaal <farbing@web.de>
|
||||
2013 Guido Günther <agx@sigxcpu.org>
|
||||
2014-2015 Didier Roche <didrocks@ubuntu.com>
|
||||
2014-2015 Marco d'Itri <md@linux.it>
|
||||
2014-2017 Sjoerd Simons <sjoerd.simons@collabora.co.uk>
|
||||
2014 Ansgar Burchardt <ansgar@debian.org>
|
||||
2014 Jon Severinsson <jon@severinsson.net>
|
||||
2015-2019 Felipe Sateler <fsateler@debian.org>
|
||||
2015 Adam Conrad <adconrad@debian.org>
|
||||
2015 Andreas Henriksson <andreas@fatal.se>
|
||||
2015 Christian Seiler <christian@iwakd.de>
|
||||
2015 Julian Wollrath <jwollrath@web.de>
|
||||
2016-2018 Evgeny Vereshchagin <evvers@ya.ru>
|
||||
2016,2018 Laurent Bigonville <bigon@debian.org>
|
||||
2016-2019 Dimitri John Ledkov <xnox@ubuntu.com>
|
||||
2016,2019 Michael Prokop <mika@debian.org>
|
||||
2016 Alexander Kurtz <alexander@kurtz.be>
|
||||
2016 Antonio Ospite <ao2@ao2.it>
|
||||
2016 Iain Lane <iain@orangesquash.org.uk>
|
||||
2016 Simon McVittie <simon.mcvittie@collabora.co.uk>
|
||||
2017-2018 Nicolas Braud-Santoni <nicolas@braud-santoni.eu>
|
||||
2017-2019 Martin Pitt <mpitt@debian.org>
|
||||
2017 Cyril Brulebois <kibi@debian.org>
|
||||
2017 Ondřej Nový <onovy@debian.org>
|
||||
2018-2019 Mert Dirik <mertdirik@gmail.com>
|
||||
2018 Adam Borowski <kilobyte@angband.pl>
|
||||
2018 Alf Gaida <agaida@siduction.org>
|
||||
2018 Benjamin Drung <benjamin.drung@profitbricks.com>
|
||||
2018 Gunnar Hjalmarsson <gunnarhj@ubuntu.com>
|
||||
2018 Manuel A. Fernandez Montecelo <manuel.montezelo@gmail.com>
|
||||
2019-2021 Balint Reczey <balint.reczey@canonical.com>
|
||||
2019-2021 Dan Streetman <ddstreet@canonical.com>
|
||||
2019 Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
2020-2021 Helmut Grohne <helmut@subdivi.de>
|
||||
2020 Topi Miettinen <toiwoton@gmail.com>
|
||||
2020 Youfu Zhang <zhangyoufu@gmail.com>
|
||||
2020 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
|
||||
2020 наб <nabijaczleweli@nabijaczleweli.xyz>
|
||||
2021-2022 Luca Boccassi <bluca@debian.org>
|
||||
2021-2022 Lukas Märdian <slyon@ubuntu.com>
|
||||
2021 Frantisek Sumsal <frantisek@sumsal.cz>
|
||||
2021 Ioanna Alifieraki <ioanna-maria.alifieraki@canonical.com>
|
||||
2021 Jan Kiszka <jan.kiszka@web.de>
|
||||
2021 Matthias Klumpp <matthias@tenstral.net>
|
||||
2021 Salvatore Bonaccorso <carnil@debian.org>
|
||||
License: LGPL-2.1+
|
||||
|
||||
License: Expat
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to
|
||||
deal in the Software without restriction, including without limitation the
|
||||
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
.
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
License: GPL-2 with Linux-syscall-note exception
|
||||
NOTE! This copyright does *not* cover user programs that use kernel services
|
||||
by normal system calls - this is merely considered normal use of the kernel,
|
||||
and does *not* fall under the heading of "derived work". Also note that the
|
||||
GPL below is copyrighted by the Free Software Foundation, but the instance of
|
||||
code that it refers to (the Linux kernel) is copyrighted by me and others who
|
||||
actually wrote it.
|
||||
.
|
||||
Also note that the only valid version of the GPL as far as the kernel is
|
||||
concerned is _this_ particular version of the license (ie v2, not v2.2 or v3.x
|
||||
or whatever), unless explicitly otherwise stated.
|
||||
.
|
||||
Linus Torvalds
|
||||
.
|
||||
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; version 2 of the License.
|
||||
.
|
||||
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, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
.
|
||||
On Debian and systems the full text of the GNU General Public
|
||||
License version 2 can be found in the file
|
||||
`/usr/share/common-licenses/GPL-2`
|
||||
|
||||
License: GPL-2+
|
||||
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 2, 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, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
.
|
||||
On Debian systems, the complete text of the GNU General Public License
|
||||
version 2 can be found in ‘/usr/share/common-licenses/GPL-2’.
|
||||
|
||||
License: LGPL-2.1+
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
.
|
||||
On Debian systems, the complete text of the GNU Lesser General Public
|
||||
License version 2.1 can be found in ‘/usr/share/common-licenses/LGPL-2.1’.
|
||||
|
||||
License: CC0-1.0
|
||||
To the extent possible under law, the author(s) have dedicated all copyright
|
||||
and related and neighboring rights to this software to the public domain
|
||||
worldwide. This software is distributed without any warranty.
|
||||
.
|
||||
You should have received a copy of the CC0 Public Domain Dedication along with
|
||||
this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
.
|
||||
On Debian systems, the complete text of the CC0 1.0 Universal license can be
|
||||
found in ‘/usr/share/common-licenses/CC0-1.0’.
|
||||
1
sysroot-arm32/usr/share/doc/libusb-1.0-0-dev/README
Symbolic link
1
sysroot-arm32/usr/share/doc/libusb-1.0-0-dev/README
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../libusb-1.0-0/README
|
||||
1
sysroot-arm32/usr/share/doc/libusb-1.0-0-dev/changelog.Debian.gz
Symbolic link
1
sysroot-arm32/usr/share/doc/libusb-1.0-0-dev/changelog.Debian.gz
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../libusb-1.0-0/changelog.Debian.gz
|
||||
121
sysroot-arm32/usr/share/doc/libusb-1.0-0-dev/copyright
Normal file
121
sysroot-arm32/usr/share/doc/libusb-1.0-0-dev/copyright
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
This package was debianized by Christopher L Cheney <ccheney@debian.org> on
|
||||
Wed, 13 Jun 2001 12:21:44 -0500.
|
||||
|
||||
It was downloaded from http://www.libusb.info
|
||||
|
||||
|
||||
Authors:
|
||||
Alan Ott
|
||||
Alan Stern
|
||||
Alex Vatchenko
|
||||
Andrew Fernandes
|
||||
Anthony Clay
|
||||
Artem Egorkine
|
||||
Aurelien Jarno
|
||||
Bastien Nocera
|
||||
Bei Zhang
|
||||
Benjamin Dobell
|
||||
Chris Dickens
|
||||
Colin Walters
|
||||
Dave Camarillo
|
||||
David Engraf
|
||||
David Moore
|
||||
Davidlohr Bueso
|
||||
Federico Manzan
|
||||
Felipe Balbi
|
||||
Florian Albrechtskirchinger
|
||||
Francesco Montorsi
|
||||
Francisco Facioni
|
||||
Graeme Gill
|
||||
Gustavo Zacarias
|
||||
Hans Ulrich Niedermann
|
||||
Hector Martin
|
||||
Hoi-Ho Chan
|
||||
Ilya Konstantinov
|
||||
James Hanko
|
||||
Joshua Blake
|
||||
Karsten Koenig
|
||||
Konrad Rzepecki
|
||||
Kuangye Guo
|
||||
Lars Wirzenius
|
||||
Luca Longinotti
|
||||
Martin Koegler
|
||||
Matthias Bolte
|
||||
Mike Frysinger
|
||||
Mikhail Gusarov
|
||||
Moritz Fischer
|
||||
Nicholas Corgan
|
||||
Omri Iluz
|
||||
Orin Eman
|
||||
Paul Fertser
|
||||
Pekka Nikander
|
||||
Rob Walker
|
||||
Sean McBride
|
||||
Sebastian Pipping
|
||||
Simon Haggett
|
||||
Thomas Röfer
|
||||
Tim Roberts
|
||||
Toby Peterson
|
||||
Trygve Laugstøl
|
||||
Uri Lublin
|
||||
Vasily Khoruzhick
|
||||
Vegard Storheil Eriksen
|
||||
Vitali Lovich
|
||||
Xiaofan Chen
|
||||
Zoltán Kovács
|
||||
Роман Донченко
|
||||
xantares
|
||||
|
||||
|
||||
Copyright:
|
||||
Copyright (C) 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
||||
Copyright (C) 2007-2009 Daniel Drake <dsd@gentoo.org>
|
||||
Copyright (C) 2010-2012 Peter Stuge <peter@stuge.se>
|
||||
Copyright (C) 2008-2013 Nathan Hjelm <hjelmn@users.sourceforge.net>
|
||||
Copyright (C) 2009-2013 Pete Batard <pete@akeo.ie>
|
||||
Copyright (C) 2009-2013 Ludovic Rousseau <ludovic.rousseau@gmail.com>
|
||||
Copyright (C) 2010-2012 Michael Plante <michael.plante@gmail.com>
|
||||
Copyright (C) 2011-2013 Hans de Goede <hdegoede@redhat.com>
|
||||
Copyright (C) 2012-2013 Martin Pieuchot <mpi@openbsd.org>
|
||||
|
||||
|
||||
License of the libusb library and most examples except ezusb and fxload:
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
||||
MA 02110-1301 USA.
|
||||
|
||||
On Debian systems, the complete text of the LGPL license can be found
|
||||
in the /usr/share/common-licenses/LGPL-2.1 file.
|
||||
|
||||
|
||||
License of ezusb and fxload:
|
||||
This source code is free software; you can redistribute it
|
||||
and/or modify it in source code form under the terms of the GNU
|
||||
General Public License as published by the Free Software
|
||||
Foundation; either version 2 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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
||||
USA.
|
||||
|
||||
On Debian systems, the complete text of the GPL license can be found
|
||||
in the /usr/share/common-licenses/GPL-2 file.
|
||||
|
||||
29
sysroot-arm32/usr/share/doc/libusb-1.0-0/README
Normal file
29
sysroot-arm32/usr/share/doc/libusb-1.0-0/README
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
# libusb
|
||||
|
||||
libusb is a library for USB device access from Linux, macOS,
|
||||
Windows, OpenBSD/NetBSD, Haiku, Solaris userspace, and WebAssembly
|
||||
via WebUSB.
|
||||
It is written in C (Haiku backend in C++) and licensed under the GNU
|
||||
Lesser General Public License version 2.1 or, at your option, any later
|
||||
version (see COPYING).
|
||||
|
||||
libusb is abstracted internally in such a way that it can hopefully
|
||||
be ported to other operating systems. Please see the PORTING
|
||||
file for more information.
|
||||
|
||||
libusb homepage:
|
||||
https://libusb.info/
|
||||
|
||||
Developers will wish to consult the API documentation:
|
||||
http://api.libusb.info
|
||||
|
||||
Use the mailing list for questions, comments, etc:
|
||||
http://mailing-list.libusb.info
|
||||
|
||||
- Hans de Goede <hdegoede@redhat.com>
|
||||
- Xiaofan Chen <xiaofanc@gmail.com>
|
||||
- Ludovic Rousseau <ludovic.rousseau@gmail.com>
|
||||
- Nathan Hjelm <hjelmn@cs.unm.edu>
|
||||
- Chris Dickens <christopher.a.dickens@gmail.com>
|
||||
|
||||
(Please use the mailing list rather than mailing developers directly)
|
||||
BIN
sysroot-arm32/usr/share/doc/libusb-1.0-0/changelog.Debian.gz
Normal file
BIN
sysroot-arm32/usr/share/doc/libusb-1.0-0/changelog.Debian.gz
Normal file
Binary file not shown.
121
sysroot-arm32/usr/share/doc/libusb-1.0-0/copyright
Normal file
121
sysroot-arm32/usr/share/doc/libusb-1.0-0/copyright
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
This package was debianized by Christopher L Cheney <ccheney@debian.org> on
|
||||
Wed, 13 Jun 2001 12:21:44 -0500.
|
||||
|
||||
It was downloaded from http://www.libusb.info
|
||||
|
||||
|
||||
Authors:
|
||||
Alan Ott
|
||||
Alan Stern
|
||||
Alex Vatchenko
|
||||
Andrew Fernandes
|
||||
Anthony Clay
|
||||
Artem Egorkine
|
||||
Aurelien Jarno
|
||||
Bastien Nocera
|
||||
Bei Zhang
|
||||
Benjamin Dobell
|
||||
Chris Dickens
|
||||
Colin Walters
|
||||
Dave Camarillo
|
||||
David Engraf
|
||||
David Moore
|
||||
Davidlohr Bueso
|
||||
Federico Manzan
|
||||
Felipe Balbi
|
||||
Florian Albrechtskirchinger
|
||||
Francesco Montorsi
|
||||
Francisco Facioni
|
||||
Graeme Gill
|
||||
Gustavo Zacarias
|
||||
Hans Ulrich Niedermann
|
||||
Hector Martin
|
||||
Hoi-Ho Chan
|
||||
Ilya Konstantinov
|
||||
James Hanko
|
||||
Joshua Blake
|
||||
Karsten Koenig
|
||||
Konrad Rzepecki
|
||||
Kuangye Guo
|
||||
Lars Wirzenius
|
||||
Luca Longinotti
|
||||
Martin Koegler
|
||||
Matthias Bolte
|
||||
Mike Frysinger
|
||||
Mikhail Gusarov
|
||||
Moritz Fischer
|
||||
Nicholas Corgan
|
||||
Omri Iluz
|
||||
Orin Eman
|
||||
Paul Fertser
|
||||
Pekka Nikander
|
||||
Rob Walker
|
||||
Sean McBride
|
||||
Sebastian Pipping
|
||||
Simon Haggett
|
||||
Thomas Röfer
|
||||
Tim Roberts
|
||||
Toby Peterson
|
||||
Trygve Laugstøl
|
||||
Uri Lublin
|
||||
Vasily Khoruzhick
|
||||
Vegard Storheil Eriksen
|
||||
Vitali Lovich
|
||||
Xiaofan Chen
|
||||
Zoltán Kovács
|
||||
Роман Донченко
|
||||
xantares
|
||||
|
||||
|
||||
Copyright:
|
||||
Copyright (C) 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
||||
Copyright (C) 2007-2009 Daniel Drake <dsd@gentoo.org>
|
||||
Copyright (C) 2010-2012 Peter Stuge <peter@stuge.se>
|
||||
Copyright (C) 2008-2013 Nathan Hjelm <hjelmn@users.sourceforge.net>
|
||||
Copyright (C) 2009-2013 Pete Batard <pete@akeo.ie>
|
||||
Copyright (C) 2009-2013 Ludovic Rousseau <ludovic.rousseau@gmail.com>
|
||||
Copyright (C) 2010-2012 Michael Plante <michael.plante@gmail.com>
|
||||
Copyright (C) 2011-2013 Hans de Goede <hdegoede@redhat.com>
|
||||
Copyright (C) 2012-2013 Martin Pieuchot <mpi@openbsd.org>
|
||||
|
||||
|
||||
License of the libusb library and most examples except ezusb and fxload:
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
||||
MA 02110-1301 USA.
|
||||
|
||||
On Debian systems, the complete text of the LGPL license can be found
|
||||
in the /usr/share/common-licenses/LGPL-2.1 file.
|
||||
|
||||
|
||||
License of ezusb and fxload:
|
||||
This source code is free software; you can redistribute it
|
||||
and/or modify it in source code form under the terms of the GNU
|
||||
General Public License as published by the Free Software
|
||||
Foundation; either version 2 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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
||||
USA.
|
||||
|
||||
On Debian systems, the complete text of the GPL license can be found
|
||||
in the /usr/share/common-licenses/GPL-2 file.
|
||||
|
||||
5038
sysroot-arm64/index.html
Normal file
5038
sysroot-arm64/index.html
Normal file
File diff suppressed because it is too large
Load diff
5038
sysroot-arm64/index.html.1
Normal file
5038
sysroot-arm64/index.html.1
Normal file
File diff suppressed because it is too large
Load diff
511
sysroot-arm64/index.html.2
Normal file
511
sysroot-arm64/index.html.2
Normal file
|
|
@ -0,0 +1,511 @@
|
|||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>Launchpad</title>
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/@@/apple-touch-icon.png?v=2022" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/@@/favicon-32x32.png?v=2022" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/@@/favicon-16x16.png?v=2022" />
|
||||
<link rel="manifest" href="/@@/site.webmanifest?v=2022" />
|
||||
<link rel="mask-icon" href="/@@/safari-pinned-tab.svg?v=2022" color="#e9531f" />
|
||||
<link rel="shortcut icon" href="/@@/favicon.ico?v=2022" />
|
||||
<meta name="msapplication-TileColor" content="#da532c" />
|
||||
<meta name="msapplication-config" content="/@@/browserconfig.xml?v=2022" />
|
||||
<meta name="theme-color" content="#ffffff" />
|
||||
|
||||
|
||||
<link rel="alternate" type="application/atom+xml" href="http://feeds.launchpad.net/announcements.atom" title="All Announcements" />
|
||||
|
||||
|
||||
|
||||
|
||||
<link type="text/css" rel="stylesheet" media="screen, print" href="/+icing/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/combo.css" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<meta property="og:title" content="Launchpad" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:image" content="/@@/launchpad-og-image.png" />
|
||||
<meta property="og:url" content="https://launchpad.net/index.html" />
|
||||
<meta property="og:site_name" content="Launchpad" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
var LP = {
|
||||
cache: {},
|
||||
links: {}
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">var cookie_scope = '; Path=/; Secure; Domain=.launchpad.net';</script>
|
||||
|
||||
<script type="text/javascript" src="/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?yui/yui/yui-min.js&lp/meta.js&yui/loader/loader-min.js"></script>
|
||||
<script type="text/javascript">
|
||||
var raw = null;
|
||||
if (LP.devmode) {
|
||||
raw = 'raw';
|
||||
}
|
||||
YUI.GlobalConfig = {
|
||||
combine: true,
|
||||
comboBase: '/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?',
|
||||
root: 'yui/',
|
||||
filter: raw,
|
||||
debug: false,
|
||||
fetchCSS: false,
|
||||
maxURLLength: 2000,
|
||||
groups: {
|
||||
lp: {
|
||||
combine: true,
|
||||
base: '/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?lp/',
|
||||
comboBase: '/+combo/revb042f2deb3ecfaa583e2ab7763b0e6f8b706ff27/?',
|
||||
root: 'lp/',
|
||||
// comes from including lp/meta.js
|
||||
modules: LP_MODULES,
|
||||
fetchCSS: false
|
||||
}
|
||||
}
|
||||
}</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
// we need this to create a single YUI instance all events and code
|
||||
// talks across. All instances of YUI().use should be based off of
|
||||
// LPJS instead.
|
||||
var LPJS = new YUI();
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<script id="base-layout-load-scripts" type="text/javascript">
|
||||
//<![CDATA[
|
||||
LPJS.use('base', 'node', 'console', 'event',
|
||||
'oop', 'lp', 'lp.app.foldables','lp.app.sorttable',
|
||||
'lp.app.inlinehelp', 'lp.app.links',
|
||||
'lp.bugs.bugtask_index', 'lp.bugs.subscribers',
|
||||
'lp.app.ellipsis', 'lp.code.branchmergeproposal.diff',
|
||||
'lp.views.global',
|
||||
function(Y) {
|
||||
|
||||
Y.on("domready", function () {
|
||||
var global_view = new Y.lp.views.Global();
|
||||
global_view.render();
|
||||
|
||||
Y.lp.app.sorttable.SortTable.init();
|
||||
Y.lp.app.inlinehelp.init_help();
|
||||
Y.lp.activate_collapsibles();
|
||||
Y.lp.app.foldables.activate();
|
||||
Y.lp.app.links.check_valid_lp_links();
|
||||
});
|
||||
|
||||
Y.on('lp:context:web_link:changed', function(e) {
|
||||
window.location = e.new_value;
|
||||
});
|
||||
});
|
||||
//]]>
|
||||
</script>
|
||||
<script id="base-helper-functions" type="text/javascript">
|
||||
//<![CDATA[
|
||||
// This code is pulled from lp.js that needs to be available on every
|
||||
// request. Pulling here to get it outside the scope of the YUI block.
|
||||
function setFocusByName(name) {
|
||||
// Focus the first element matching the given name which can be focused.
|
||||
var nodes = document.getElementsByName(name);
|
||||
var i, node;
|
||||
for (i = 0; i < nodes.length; i++) {
|
||||
node = nodes[i];
|
||||
if (node.focus) {
|
||||
try {
|
||||
// Trying to focus a hidden element throws an error in IE8.
|
||||
if (node.offsetHeight !== 0) {
|
||||
node.focus();
|
||||
}
|
||||
} catch (e) {
|
||||
LPJS.use('console', function(Y) {
|
||||
Y.log('In setFocusByName(<' +
|
||||
node.tagName + ' type=' + node.type + '>): ' + e);
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function selectWidget(widget_name, event) {
|
||||
if (event && (event.keyCode === 9 || event.keyCode === 13)) {
|
||||
// Avoid firing if user is tabbing through or simply pressing
|
||||
// enter to submit the form.
|
||||
return;
|
||||
}
|
||||
document.getElementById(widget_name).checked = true;
|
||||
}
|
||||
//]]>
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="/+icing/vanilla-framework-version-4.7.0.min.css" />
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body id="document" itemscope="" itemtype="http://schema.org/WebPage" class="tab-unknown
|
||||
main_only
|
||||
public
|
||||
yui3-skin-sam">
|
||||
|
||||
|
||||
|
||||
<div class="yui-d0">
|
||||
<div id="locationbar" class="login-logout">
|
||||
|
||||
|
||||
<div id="logincontrol"><a href="https://launchpad.net/+login">Log in / Register</a></div>
|
||||
|
||||
|
||||
|
||||
</div><!--id="locationbar"-->
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="maincontent" class="yui-main">
|
||||
<div class="yui-b" dir="ltr">
|
||||
<div class="context-publication">
|
||||
|
||||
|
||||
|
||||
<div id="registration" class="registering">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="request-notifications">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
|
||||
|
||||
<!-- Is your project registered yet? -->
|
||||
|
||||
<div id="homepage" class="homepage">
|
||||
|
||||
<div class="top-portlet">
|
||||
<img src="/@@/launchpad-logo-and-name.svg" class="homepage__logo" id="launchpad-logo-and-name" alt="Launchpad logo and name" />
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div class="u-fixed-width">
|
||||
<form id="homepage-searchform" class="p-form p-form--inline" xml:lang="en" lang="en" dir="ltr" method="get" accept-charset="UTF-8" action="https://launchpad.net/+search">
|
||||
<div class="p-form__group p-form--search">
|
||||
<label for="search-input" class="u-off-screen">Search</label>
|
||||
<div class="p-form__control u-clearfix">
|
||||
<input id="search-input" type="search" name="field.text" value="" autofocus="">
|
||||
</div>
|
||||
</div>
|
||||
<button id="search" class="p-button--positive" type="submit" value="Search Launchpad">Search</button>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
LPJS.use('lp', function () {
|
||||
setFocusByName('field.text');
|
||||
});
|
||||
</script>
|
||||
<div id="homepage-stats" class="u-text--muted">
|
||||
<strong>49,106</strong> projects,
|
||||
<strong>2,108,367</strong> bugs,
|
||||
<strong>1,009,234</strong> branches,
|
||||
<strong>119,025</strong> Git repositories,
|
||||
<strong>3,185,634</strong> translations,
|
||||
<strong>822,311</strong> answers,
|
||||
<strong>76,426</strong> blueprints,
|
||||
and counting...
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div class="homepage-whatslaunchpad">
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<h2>Launchpad</h2>
|
||||
<h4>A software collaboration platform that provides</h4>
|
||||
</div>
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<div class="row p-divider">
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://bugs.launchpad.net/">Bug tracking</a></h4>
|
||||
<p>One place to track bugs across project boundaries and tools</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://code.launchpad.net/">Code hosting</a> using <a href="https://git-scm.com/">Git</a></h4>
|
||||
<p>Easy for anyone to get your project's code using Git</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://documentation.ubuntu.com/launchpad/user/how-to/work-with-code-hosted-on-launchpad/create-and-manage-a-merge-proposal/">Code reviews</a></h4>
|
||||
<p>Full control of who can land code in your project remains with you</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://launchpad.net/ubuntu">Ubuntu package building and hosting</a></h4>
|
||||
<p>Publishing your software is simple with Personal Package Archives</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row p-divider">
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://translations.launchpad.net/">Crowd source translations</a></h4>
|
||||
<p>Build an open community to translate your software into almost any language</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://documentation.ubuntu.com/launchpad/user/Teams/MailingLists">Mailing lists</a></h4>
|
||||
<p>Find and work with the right people by building a social network of individuals and teams around projects</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://answers.launchpad.net/">Answer tracking and FAQs</a></h4>
|
||||
<p>Free software thrives on people helping each other when the unexpected happens</p>
|
||||
</div>
|
||||
<div class="col-3 p-divider__block">
|
||||
<h4><a href="https://blueprints.launchpad.net/">Specification tracking</a></h4>
|
||||
<p>Track ideas and chunks of work as “blueprints”</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div id="homepage-getstarted">
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<h2 class="u-float-left">Get started</h2>
|
||||
</div>
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<span>
|
||||
Learn more about Launchpad in the
|
||||
<a href="https://documentation.ubuntu.com/launchpad/">user guide</a>.
|
||||
</span>
|
||||
If you're ready, you can:
|
||||
|
||||
<ul class="p-matrix">
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" src="/@@/add-homepage.png" alt="add">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/+login">Create an account</a></h4>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" src="/@@/tour-homepage.png" alt="tour">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/+tour">Take the tour</a></h4>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" src="/@@/question-homepage.png" alt="question">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="https://answers.launchpad.net/">Find answers</a></h4>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="p-strip is-shallow">
|
||||
<div id="homepage-featured">
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<h2 class="u-float-left">Featured projects</h2>
|
||||
</div>
|
||||
<div class="u-fixed-width u-clearfix">
|
||||
<ul class="p-matrix featured-projects-list">
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Beautiful Soup" src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/beautifulsoup">Beautiful Soup</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>A program designed for screen-scraping HTML. The discussion group is at: http://groups.google.com...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Inkscape" src="https://launchpadlibrarian.net/66795469/ink-lp-logo.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/inkscape">Inkscape</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Inkscape is an SVG-based graphics editor featuring alpha
|
||||
blending, node editing, SVG to PNG exp...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Launchpad itself" src="https://launchpadlibrarian.net/600817174/Canonical_Launchpad_icon_64px.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/launchpad">Launchpad itself</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Launchpad is a set of Web services to help software developers collaborate.</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="launchpadlib " src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/launchpadlib">launchpadlib </a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Python client library for Launchpad's web service</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="OpenMW" src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/openmw">OpenMW</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>OpenMW is an attempt to reimplement the popular role playing game Morrowind. It aims to be a full...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="OpenShot Video Editor" src="https://launchpadlibrarian.net/250357498/OpenShot-2-Logo.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/openshot">OpenShot Video Editor</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>OpenShot Video Editor is a free, open-source, non-linear video editor. It can create and edit vid...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="OpenStack" src="https://launchpadlibrarian.net/52042558/os64.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/openstack">OpenStack</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>The OpenStack Open Source Cloud Mission: to produce the ubiquitous Open Source Cloud Computing pl...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="txpkgupload" src="/@@/product-logo">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/txpkgupload">txpkgupload</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Package upload server used by Launchpad.</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="p-matrix__item">
|
||||
<img class="p-matrix__img" alt="Ubuntu" src="https://launchpadlibrarian.net/606381979/CoF%2064px.png">
|
||||
<div class="p-matrix__content">
|
||||
<h4 class="p-matrix__title"><a class="p-matrix__link" href="/ubuntu">Ubuntu</a></h4>
|
||||
<div class="p-matrix__desc">
|
||||
<p>Ubuntu is a complete Linux-based operating system, freely available with both community and profe...</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="horizontal">
|
||||
<li>
|
||||
<strong><a href="/projects">Browse all
|
||||
49106
|
||||
projects</a>!</strong>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div><!-- homepage -->
|
||||
</div>
|
||||
|
||||
|
||||
</div><!-- yui-b -->
|
||||
</div><!-- yui-main -->
|
||||
|
||||
|
||||
<!-- yui-b side -->
|
||||
|
||||
<!-- yui-t4 -->
|
||||
|
||||
|
||||
<div id="footer" class="footer">
|
||||
|
||||
|
||||
<div class="colophon">
|
||||
© 2004
|
||||
<a href="http://canonical.com/">Canonical Ltd.</a>
|
||||
•
|
||||
<a href="https://ubuntu.com/legal/launchpad-terms-of-service">Terms of use</a>
|
||||
•
|
||||
<a href="https://www.ubuntu.com/legal/dataprivacy">Data privacy</a>
|
||||
•
|
||||
<a href="/feedback">Contact Launchpad Support</a>
|
||||
|
||||
•
|
||||
<a href="http://blog.launchpad.net/">Blog</a>
|
||||
|
||||
•
|
||||
<a href="https://canonical.com/careers">Careers</a>
|
||||
|
||||
•
|
||||
<a href="https://ubuntu.social/@launchpadstatus">System status</a>
|
||||
<span id="lp-version">
|
||||
•
|
||||
b042f2d
|
||||
|
||||
|
||||
(<a href="https://documentation.ubuntu.com/launchpad/developer/how-to/get-source-code/">Get the code!</a>)
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div><!-- yui-d0-->
|
||||
|
||||
|
||||
|
||||
|
||||
<script id="json-cache-script">LP.cache = {"related_features": {}};</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
|
||||
<!--
|
||||
Facet name: unknown
|
||||
Page type: main_only
|
||||
Has global search: True
|
||||
Has application tabs: True
|
||||
Has side portlets: False
|
||||
|
||||
At least 22 queries/external actions issued in 0.19 seconds
|
||||
|
||||
Features: {'profiling.enabled': None, 'hard_timeout': '5000', 'js.yui_version': None, 'app.maintenance_message': None, 'app.mainsite_only.canonical_url': None, 'baselayout.careers_link.disabled': None, 'visible_render_time': None}
|
||||
|
||||
rb042f2d
|
||||
|
||||
-->
|
||||
|
||||
</html>
|
||||
|
||||
BIN
sysroot-arm64/libudev1_255.4-1ubuntu8.16_arm64.deb
Normal file
BIN
sysroot-arm64/libudev1_255.4-1ubuntu8.16_arm64.deb
Normal file
Binary file not shown.
BIN
sysroot-arm64/libudev1_255.4-1ubuntu8.5_arm64.deb
Normal file
BIN
sysroot-arm64/libudev1_255.4-1ubuntu8.5_arm64.deb
Normal file
Binary file not shown.
BIN
sysroot-arm64/libusb-1.0-0-dev_1.0.27-1_arm64.deb
Normal file
BIN
sysroot-arm64/libusb-1.0-0-dev_1.0.27-1_arm64.deb
Normal file
Binary file not shown.
BIN
sysroot-arm64/libusb-1.0-0_1.0.27-1_arm64.deb
Normal file
BIN
sysroot-arm64/libusb-1.0-0_1.0.27-1_arm64.deb
Normal file
Binary file not shown.
2311
sysroot-arm64/usr/include/libusb-1.0/libusb.h
Normal file
2311
sysroot-arm64/usr/include/libusb-1.0/libusb.h
Normal file
File diff suppressed because it is too large
Load diff
1
sysroot-arm64/usr/lib/aarch64-linux-gnu/libcap.so.2
Symbolic link
1
sysroot-arm64/usr/lib/aarch64-linux-gnu/libcap.so.2
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
libcap.so.2.66
|
||||
BIN
sysroot-arm64/usr/lib/aarch64-linux-gnu/libcap.so.2.66
Normal file
BIN
sysroot-arm64/usr/lib/aarch64-linux-gnu/libcap.so.2.66
Normal file
Binary file not shown.
1
sysroot-arm64/usr/lib/aarch64-linux-gnu/libudev.so
Symbolic link
1
sysroot-arm64/usr/lib/aarch64-linux-gnu/libudev.so
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
lib/aarch64-linux-gnu/libudev.so.1
|
||||
1
sysroot-arm64/usr/lib/aarch64-linux-gnu/libudev.so.1
Symbolic link
1
sysroot-arm64/usr/lib/aarch64-linux-gnu/libudev.so.1
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
libudev.so.1.7.8
|
||||
BIN
sysroot-arm64/usr/lib/aarch64-linux-gnu/libudev.so.1.7.8
Normal file
BIN
sysroot-arm64/usr/lib/aarch64-linux-gnu/libudev.so.1.7.8
Normal file
Binary file not shown.
BIN
sysroot-arm64/usr/lib/aarch64-linux-gnu/libusb-1.0.a
Normal file
BIN
sysroot-arm64/usr/lib/aarch64-linux-gnu/libusb-1.0.a
Normal file
Binary file not shown.
1
sysroot-arm64/usr/lib/aarch64-linux-gnu/libusb-1.0.so
Symbolic link
1
sysroot-arm64/usr/lib/aarch64-linux-gnu/libusb-1.0.so
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
libusb-1.0.so.0.4.0
|
||||
1
sysroot-arm64/usr/lib/aarch64-linux-gnu/libusb-1.0.so.0
Symbolic link
1
sysroot-arm64/usr/lib/aarch64-linux-gnu/libusb-1.0.so.0
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
libusb-1.0.so.0.4.0
|
||||
BIN
sysroot-arm64/usr/lib/aarch64-linux-gnu/libusb-1.0.so.0.4.0
Normal file
BIN
sysroot-arm64/usr/lib/aarch64-linux-gnu/libusb-1.0.so.0.4.0
Normal file
Binary file not shown.
|
|
@ -0,0 +1,11 @@
|
|||
prefix=/usr
|
||||
exec_prefix=${prefix}
|
||||
libdir=${prefix}/lib/aarch64-linux-gnu
|
||||
includedir=${prefix}/include
|
||||
|
||||
Name: libusb-1.0
|
||||
Description: C API for USB device access from Linux, Mac OS X, Windows, OpenBSD/NetBSD and Solaris userspace
|
||||
Version: 1.0.27
|
||||
Libs: -L${libdir} -lusb-1.0
|
||||
Libs.private: -ludev
|
||||
Cflags: -I${includedir}/libusb-1.0
|
||||
BIN
sysroot-arm64/usr/share/doc/libudev1/NEWS.Debian.gz
Normal file
BIN
sysroot-arm64/usr/share/doc/libudev1/NEWS.Debian.gz
Normal file
Binary file not shown.
BIN
sysroot-arm64/usr/share/doc/libudev1/changelog.Debian.gz
Normal file
BIN
sysroot-arm64/usr/share/doc/libudev1/changelog.Debian.gz
Normal file
Binary file not shown.
287
sysroot-arm64/usr/share/doc/libudev1/copyright
Normal file
287
sysroot-arm64/usr/share/doc/libudev1/copyright
Normal file
|
|
@ -0,0 +1,287 @@
|
|||
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: systemd
|
||||
Upstream-Contact: systemd-devel@lists.freedesktop.org
|
||||
Source: https://www.freedesktop.org/wiki/Software/systemd/
|
||||
|
||||
Files: *
|
||||
Copyright: 2008-2015 Kay Sievers <kay@vrfy.org>
|
||||
2010-2015 Lennart Poettering
|
||||
2012-2015 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
|
||||
2013-2015 Tom Gundersen <teg@jklm.no>
|
||||
2013-2015 Daniel Mack
|
||||
2010-2015 Harald Hoyer
|
||||
2013-2015 David Herrmann
|
||||
2013, 2014 Thomas H.P. Andersen
|
||||
2013, 2014 Daniel Buch
|
||||
2014 Susant Sahani
|
||||
2009-2015 Intel Corporation
|
||||
2000, 2005 Red Hat, Inc.
|
||||
2009 Alan Jenkins <alan-jenkins@tuffmail.co.uk>
|
||||
2010 ProFUSION embedded systems
|
||||
2010 Maarten Lankhorst
|
||||
1995-2004 Miquel van Smoorenburg
|
||||
1999 Tom Tromey
|
||||
2011 Michal Schmidt
|
||||
2012 B. Poettering
|
||||
2012 Holger Hans Peter Freyther
|
||||
2012 Dan Walsh
|
||||
2012 Roberto Sassu
|
||||
2013 David Strauss
|
||||
2013 Marius Vollmer
|
||||
2013 Jan Janssen
|
||||
2013 Simon Peeters
|
||||
License: LGPL-2.1+
|
||||
|
||||
Files: src/basic/siphash24.h
|
||||
src/basic/siphash24.c
|
||||
Copyright: 2012 Jean-Philippe Aumasson <jeanphilippe.aumasson@gmail.com>
|
||||
2012 Daniel J. Bernstein <djb@cr.yp.to>
|
||||
License: CC0-1.0
|
||||
|
||||
Files: src/shared/linux/*
|
||||
src/basic/linux/*
|
||||
Copyright: 2004-2009 Red Hat, Inc.
|
||||
2011-2014 PLUMgrid
|
||||
2001-2003 Sistina Software (UK) Limited.
|
||||
2008 Ian Kent <raven@themaw.net>
|
||||
1998 David S. Miller >davem@redhat.com>
|
||||
2001 Jeff Garzik <jgarzik@pobox.com>
|
||||
2006-2010 Johannes Berg <johannes@sipsolutions.net
|
||||
2008 Michael Wu <flamingice@sourmilk.net>
|
||||
2008 Luis Carlos Cobo <luisca@cozybit.com>
|
||||
2008 Michael Buesch <m@bues.ch>
|
||||
2008, 2009 Luis R. Rodriguez <lrodriguez@atheros.com>
|
||||
2008 Jouni Malinen <jouni.malinen@atheros.com>
|
||||
2008 Colin McCabe <colin@cozybit.com>
|
||||
2018-2019 Intel Corporation
|
||||
2007 Oracle.
|
||||
2009 Wolfgang Grandegger <wg@grandegger.com>
|
||||
1999 Thomas Davis <tadavis@lbl.gov>
|
||||
2015 Sabrina Dubroca <sd@queasysnail.net>
|
||||
1999-2000 Maxim Krasnyansky <max_mk@yahoo.com>
|
||||
2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>
|
||||
License: GPL-2 with Linux-syscall-note exception
|
||||
|
||||
Files: src/basic/sparse-endian.h
|
||||
Copyright: 2012 Josh Triplett <josh@joshtriplett.org>
|
||||
License: Expat
|
||||
|
||||
Files: src/basic/MurmurHash2.c
|
||||
src/basic/MurmurHash2.h
|
||||
src/libsystemd/sd-journal/lookup3.c
|
||||
src/libsystemd/sd-journal/lookup3.h
|
||||
Copyright: none
|
||||
License: public-domain
|
||||
You can use this free for any purpose. It's in the public domain. It has no
|
||||
warranty.
|
||||
|
||||
Files: src/udev/ata_id/ata_id.c
|
||||
src/udev/cdrom_id/cdrom_id.c
|
||||
src/udev/dmi_memory_id/dmi_memory_id.c
|
||||
src/udev/mtd_probe/mtd_probe.c
|
||||
src/udev/mtd_probe/mtd_probe.h
|
||||
src/udev/mtd_probe/probe_smartmedia.c
|
||||
src/udev/scsi_id/scsi.h
|
||||
src/udev/scsi_id/scsi_id.c
|
||||
src/udev/scsi_id/scsi_id.h
|
||||
src/udev/scsi_id/scsi_serial.c
|
||||
src/udev/udevadm.c
|
||||
src/udev/udevadm-control.c
|
||||
src/udev/udevadm.h
|
||||
src/udev/udevadm-info.c
|
||||
src/udev/udevadm-monitor.c
|
||||
src/udev/udevadm-settle.c
|
||||
src/udev/udevadm-test-builtin.c
|
||||
src/udev/udevadm-test.c
|
||||
src/udev/udevadm-trigger.c
|
||||
src/udev/udevadm-util.c
|
||||
src/udev/udevadm-util.h
|
||||
src/udev/udev-builtin-blkid.c
|
||||
src/udev/udev-builtin.h
|
||||
src/udev/udev-builtin-input_id.c
|
||||
src/udev/udev-builtin-kmod.c
|
||||
src/udev/udev-builtin-path_id.c
|
||||
src/udev/udev-builtin-uaccess.c
|
||||
src/udev/udev-builtin-usb_id.c
|
||||
src/udev/udev-ctrl.h
|
||||
src/udev/udevd.c
|
||||
src/udev/udevd.h
|
||||
src/udev/udev-event.c
|
||||
src/udev/udev-event.h
|
||||
src/udev/udev-node.c
|
||||
src/udev/udev-node.h
|
||||
src/udev/udev-rules.c
|
||||
src/udev/udev-rules.h
|
||||
src/udev/udev-watch.c
|
||||
src/udev/udev-watch.h
|
||||
src/udev/v4l_id/v4l_id.c
|
||||
Copyright: 2003-2012 Kay Sievers <kay@vrfy.org>
|
||||
2003-2004 Greg Kroah-Hartman <greg@kroah.com>
|
||||
2004 Chris Friesen <chris_friesen@sympatico.ca>
|
||||
2004, 2009, 2010 David Zeuthen <david@fubar.dk>
|
||||
2005, 2006 SUSE Linux Products GmbH
|
||||
2003 IBM Corp.
|
||||
2007 Hannes Reinecke <hare@suse.de>
|
||||
2009 Canonical Ltd.
|
||||
2009 Scott James Remnant <scott@netsplit.com>
|
||||
2009 Martin Pitt <martin.pitt@ubuntu.com>
|
||||
2009 Piter Punk <piterpunk@slackware.com>
|
||||
2009, 2010 Lennart Poettering
|
||||
2009 Filippo Argiolas <filippo.argiolas@gmail.com>
|
||||
2010 Maxim Levitsky
|
||||
2011 ProFUSION embedded systems
|
||||
2011 Karel Zak <kzak@redhat.com>
|
||||
2014 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
|
||||
2014 David Herrmann <dh.herrmann@gmail.com>
|
||||
2014 Carlos Garnacho <carlosg@gnome.org>
|
||||
License: GPL-2+
|
||||
|
||||
Files: debian/*
|
||||
Copyright: 2010-2013 Tollef Fog Heen <tfheen@debian.org>
|
||||
2011 Josh Triplett <josh@joshtriplett.org>
|
||||
2013-2014 Michael Stapelberg <stapelberg@debian.org>
|
||||
2013-2020 Martin Pitt <martin.pitt@ubuntu.com>
|
||||
2013-2022 Michael Biebl <biebl@debian.org>
|
||||
2013 Daniel Schaal <farbing@web.de>
|
||||
2013 Guido Günther <agx@sigxcpu.org>
|
||||
2014-2015 Didier Roche <didrocks@ubuntu.com>
|
||||
2014-2015 Marco d'Itri <md@linux.it>
|
||||
2014-2017 Sjoerd Simons <sjoerd.simons@collabora.co.uk>
|
||||
2014 Ansgar Burchardt <ansgar@debian.org>
|
||||
2014 Jon Severinsson <jon@severinsson.net>
|
||||
2015-2019 Felipe Sateler <fsateler@debian.org>
|
||||
2015 Adam Conrad <adconrad@debian.org>
|
||||
2015 Andreas Henriksson <andreas@fatal.se>
|
||||
2015 Christian Seiler <christian@iwakd.de>
|
||||
2015 Julian Wollrath <jwollrath@web.de>
|
||||
2016-2018 Evgeny Vereshchagin <evvers@ya.ru>
|
||||
2016,2018 Laurent Bigonville <bigon@debian.org>
|
||||
2016-2019 Dimitri John Ledkov <xnox@ubuntu.com>
|
||||
2016,2019 Michael Prokop <mika@debian.org>
|
||||
2016 Alexander Kurtz <alexander@kurtz.be>
|
||||
2016 Antonio Ospite <ao2@ao2.it>
|
||||
2016 Iain Lane <iain@orangesquash.org.uk>
|
||||
2016 Simon McVittie <simon.mcvittie@collabora.co.uk>
|
||||
2017-2018 Nicolas Braud-Santoni <nicolas@braud-santoni.eu>
|
||||
2017-2019 Martin Pitt <mpitt@debian.org>
|
||||
2017 Cyril Brulebois <kibi@debian.org>
|
||||
2017 Ondřej Nový <onovy@debian.org>
|
||||
2018-2019 Mert Dirik <mertdirik@gmail.com>
|
||||
2018 Adam Borowski <kilobyte@angband.pl>
|
||||
2018 Alf Gaida <agaida@siduction.org>
|
||||
2018 Benjamin Drung <benjamin.drung@profitbricks.com>
|
||||
2018 Gunnar Hjalmarsson <gunnarhj@ubuntu.com>
|
||||
2018 Manuel A. Fernandez Montecelo <manuel.montezelo@gmail.com>
|
||||
2019-2021 Balint Reczey <balint.reczey@canonical.com>
|
||||
2019-2021 Dan Streetman <ddstreet@canonical.com>
|
||||
2019 Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
2020-2021 Helmut Grohne <helmut@subdivi.de>
|
||||
2020 Topi Miettinen <toiwoton@gmail.com>
|
||||
2020 Youfu Zhang <zhangyoufu@gmail.com>
|
||||
2020 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
|
||||
2020 наб <nabijaczleweli@nabijaczleweli.xyz>
|
||||
2021-2022 Luca Boccassi <bluca@debian.org>
|
||||
2021-2022 Lukas Märdian <slyon@ubuntu.com>
|
||||
2021 Frantisek Sumsal <frantisek@sumsal.cz>
|
||||
2021 Ioanna Alifieraki <ioanna-maria.alifieraki@canonical.com>
|
||||
2021 Jan Kiszka <jan.kiszka@web.de>
|
||||
2021 Matthias Klumpp <matthias@tenstral.net>
|
||||
2021 Salvatore Bonaccorso <carnil@debian.org>
|
||||
License: LGPL-2.1+
|
||||
|
||||
License: Expat
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to
|
||||
deal in the Software without restriction, including without limitation the
|
||||
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
.
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
License: GPL-2 with Linux-syscall-note exception
|
||||
NOTE! This copyright does *not* cover user programs that use kernel services
|
||||
by normal system calls - this is merely considered normal use of the kernel,
|
||||
and does *not* fall under the heading of "derived work". Also note that the
|
||||
GPL below is copyrighted by the Free Software Foundation, but the instance of
|
||||
code that it refers to (the Linux kernel) is copyrighted by me and others who
|
||||
actually wrote it.
|
||||
.
|
||||
Also note that the only valid version of the GPL as far as the kernel is
|
||||
concerned is _this_ particular version of the license (ie v2, not v2.2 or v3.x
|
||||
or whatever), unless explicitly otherwise stated.
|
||||
.
|
||||
Linus Torvalds
|
||||
.
|
||||
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; version 2 of the License.
|
||||
.
|
||||
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, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
.
|
||||
On Debian and systems the full text of the GNU General Public
|
||||
License version 2 can be found in the file
|
||||
`/usr/share/common-licenses/GPL-2`
|
||||
|
||||
License: GPL-2+
|
||||
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 2, 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, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
.
|
||||
On Debian systems, the complete text of the GNU General Public License
|
||||
version 2 can be found in ‘/usr/share/common-licenses/GPL-2’.
|
||||
|
||||
License: LGPL-2.1+
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
.
|
||||
On Debian systems, the complete text of the GNU Lesser General Public
|
||||
License version 2.1 can be found in ‘/usr/share/common-licenses/LGPL-2.1’.
|
||||
|
||||
License: CC0-1.0
|
||||
To the extent possible under law, the author(s) have dedicated all copyright
|
||||
and related and neighboring rights to this software to the public domain
|
||||
worldwide. This software is distributed without any warranty.
|
||||
.
|
||||
You should have received a copy of the CC0 Public Domain Dedication along with
|
||||
this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
.
|
||||
On Debian systems, the complete text of the CC0 1.0 Universal license can be
|
||||
found in ‘/usr/share/common-licenses/CC0-1.0’.
|
||||
1
sysroot-arm64/usr/share/doc/libusb-1.0-0-dev/README
Symbolic link
1
sysroot-arm64/usr/share/doc/libusb-1.0-0-dev/README
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../libusb-1.0-0/README
|
||||
1
sysroot-arm64/usr/share/doc/libusb-1.0-0-dev/changelog.Debian.gz
Symbolic link
1
sysroot-arm64/usr/share/doc/libusb-1.0-0-dev/changelog.Debian.gz
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../libusb-1.0-0/changelog.Debian.gz
|
||||
121
sysroot-arm64/usr/share/doc/libusb-1.0-0-dev/copyright
Normal file
121
sysroot-arm64/usr/share/doc/libusb-1.0-0-dev/copyright
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
This package was debianized by Christopher L Cheney <ccheney@debian.org> on
|
||||
Wed, 13 Jun 2001 12:21:44 -0500.
|
||||
|
||||
It was downloaded from http://www.libusb.info
|
||||
|
||||
|
||||
Authors:
|
||||
Alan Ott
|
||||
Alan Stern
|
||||
Alex Vatchenko
|
||||
Andrew Fernandes
|
||||
Anthony Clay
|
||||
Artem Egorkine
|
||||
Aurelien Jarno
|
||||
Bastien Nocera
|
||||
Bei Zhang
|
||||
Benjamin Dobell
|
||||
Chris Dickens
|
||||
Colin Walters
|
||||
Dave Camarillo
|
||||
David Engraf
|
||||
David Moore
|
||||
Davidlohr Bueso
|
||||
Federico Manzan
|
||||
Felipe Balbi
|
||||
Florian Albrechtskirchinger
|
||||
Francesco Montorsi
|
||||
Francisco Facioni
|
||||
Graeme Gill
|
||||
Gustavo Zacarias
|
||||
Hans Ulrich Niedermann
|
||||
Hector Martin
|
||||
Hoi-Ho Chan
|
||||
Ilya Konstantinov
|
||||
James Hanko
|
||||
Joshua Blake
|
||||
Karsten Koenig
|
||||
Konrad Rzepecki
|
||||
Kuangye Guo
|
||||
Lars Wirzenius
|
||||
Luca Longinotti
|
||||
Martin Koegler
|
||||
Matthias Bolte
|
||||
Mike Frysinger
|
||||
Mikhail Gusarov
|
||||
Moritz Fischer
|
||||
Nicholas Corgan
|
||||
Omri Iluz
|
||||
Orin Eman
|
||||
Paul Fertser
|
||||
Pekka Nikander
|
||||
Rob Walker
|
||||
Sean McBride
|
||||
Sebastian Pipping
|
||||
Simon Haggett
|
||||
Thomas Röfer
|
||||
Tim Roberts
|
||||
Toby Peterson
|
||||
Trygve Laugstøl
|
||||
Uri Lublin
|
||||
Vasily Khoruzhick
|
||||
Vegard Storheil Eriksen
|
||||
Vitali Lovich
|
||||
Xiaofan Chen
|
||||
Zoltán Kovács
|
||||
Роман Донченко
|
||||
xantares
|
||||
|
||||
|
||||
Copyright:
|
||||
Copyright (C) 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
||||
Copyright (C) 2007-2009 Daniel Drake <dsd@gentoo.org>
|
||||
Copyright (C) 2010-2012 Peter Stuge <peter@stuge.se>
|
||||
Copyright (C) 2008-2013 Nathan Hjelm <hjelmn@users.sourceforge.net>
|
||||
Copyright (C) 2009-2013 Pete Batard <pete@akeo.ie>
|
||||
Copyright (C) 2009-2013 Ludovic Rousseau <ludovic.rousseau@gmail.com>
|
||||
Copyright (C) 2010-2012 Michael Plante <michael.plante@gmail.com>
|
||||
Copyright (C) 2011-2013 Hans de Goede <hdegoede@redhat.com>
|
||||
Copyright (C) 2012-2013 Martin Pieuchot <mpi@openbsd.org>
|
||||
|
||||
|
||||
License of the libusb library and most examples except ezusb and fxload:
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
||||
MA 02110-1301 USA.
|
||||
|
||||
On Debian systems, the complete text of the LGPL license can be found
|
||||
in the /usr/share/common-licenses/LGPL-2.1 file.
|
||||
|
||||
|
||||
License of ezusb and fxload:
|
||||
This source code is free software; you can redistribute it
|
||||
and/or modify it in source code form under the terms of the GNU
|
||||
General Public License as published by the Free Software
|
||||
Foundation; either version 2 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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
||||
USA.
|
||||
|
||||
On Debian systems, the complete text of the GPL license can be found
|
||||
in the /usr/share/common-licenses/GPL-2 file.
|
||||
|
||||
29
sysroot-arm64/usr/share/doc/libusb-1.0-0/README
Normal file
29
sysroot-arm64/usr/share/doc/libusb-1.0-0/README
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
# libusb
|
||||
|
||||
libusb is a library for USB device access from Linux, macOS,
|
||||
Windows, OpenBSD/NetBSD, Haiku, Solaris userspace, and WebAssembly
|
||||
via WebUSB.
|
||||
It is written in C (Haiku backend in C++) and licensed under the GNU
|
||||
Lesser General Public License version 2.1 or, at your option, any later
|
||||
version (see COPYING).
|
||||
|
||||
libusb is abstracted internally in such a way that it can hopefully
|
||||
be ported to other operating systems. Please see the PORTING
|
||||
file for more information.
|
||||
|
||||
libusb homepage:
|
||||
https://libusb.info/
|
||||
|
||||
Developers will wish to consult the API documentation:
|
||||
http://api.libusb.info
|
||||
|
||||
Use the mailing list for questions, comments, etc:
|
||||
http://mailing-list.libusb.info
|
||||
|
||||
- Hans de Goede <hdegoede@redhat.com>
|
||||
- Xiaofan Chen <xiaofanc@gmail.com>
|
||||
- Ludovic Rousseau <ludovic.rousseau@gmail.com>
|
||||
- Nathan Hjelm <hjelmn@cs.unm.edu>
|
||||
- Chris Dickens <christopher.a.dickens@gmail.com>
|
||||
|
||||
(Please use the mailing list rather than mailing developers directly)
|
||||
BIN
sysroot-arm64/usr/share/doc/libusb-1.0-0/changelog.Debian.gz
Normal file
BIN
sysroot-arm64/usr/share/doc/libusb-1.0-0/changelog.Debian.gz
Normal file
Binary file not shown.
121
sysroot-arm64/usr/share/doc/libusb-1.0-0/copyright
Normal file
121
sysroot-arm64/usr/share/doc/libusb-1.0-0/copyright
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
This package was debianized by Christopher L Cheney <ccheney@debian.org> on
|
||||
Wed, 13 Jun 2001 12:21:44 -0500.
|
||||
|
||||
It was downloaded from http://www.libusb.info
|
||||
|
||||
|
||||
Authors:
|
||||
Alan Ott
|
||||
Alan Stern
|
||||
Alex Vatchenko
|
||||
Andrew Fernandes
|
||||
Anthony Clay
|
||||
Artem Egorkine
|
||||
Aurelien Jarno
|
||||
Bastien Nocera
|
||||
Bei Zhang
|
||||
Benjamin Dobell
|
||||
Chris Dickens
|
||||
Colin Walters
|
||||
Dave Camarillo
|
||||
David Engraf
|
||||
David Moore
|
||||
Davidlohr Bueso
|
||||
Federico Manzan
|
||||
Felipe Balbi
|
||||
Florian Albrechtskirchinger
|
||||
Francesco Montorsi
|
||||
Francisco Facioni
|
||||
Graeme Gill
|
||||
Gustavo Zacarias
|
||||
Hans Ulrich Niedermann
|
||||
Hector Martin
|
||||
Hoi-Ho Chan
|
||||
Ilya Konstantinov
|
||||
James Hanko
|
||||
Joshua Blake
|
||||
Karsten Koenig
|
||||
Konrad Rzepecki
|
||||
Kuangye Guo
|
||||
Lars Wirzenius
|
||||
Luca Longinotti
|
||||
Martin Koegler
|
||||
Matthias Bolte
|
||||
Mike Frysinger
|
||||
Mikhail Gusarov
|
||||
Moritz Fischer
|
||||
Nicholas Corgan
|
||||
Omri Iluz
|
||||
Orin Eman
|
||||
Paul Fertser
|
||||
Pekka Nikander
|
||||
Rob Walker
|
||||
Sean McBride
|
||||
Sebastian Pipping
|
||||
Simon Haggett
|
||||
Thomas Röfer
|
||||
Tim Roberts
|
||||
Toby Peterson
|
||||
Trygve Laugstøl
|
||||
Uri Lublin
|
||||
Vasily Khoruzhick
|
||||
Vegard Storheil Eriksen
|
||||
Vitali Lovich
|
||||
Xiaofan Chen
|
||||
Zoltán Kovács
|
||||
Роман Донченко
|
||||
xantares
|
||||
|
||||
|
||||
Copyright:
|
||||
Copyright (C) 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
||||
Copyright (C) 2007-2009 Daniel Drake <dsd@gentoo.org>
|
||||
Copyright (C) 2010-2012 Peter Stuge <peter@stuge.se>
|
||||
Copyright (C) 2008-2013 Nathan Hjelm <hjelmn@users.sourceforge.net>
|
||||
Copyright (C) 2009-2013 Pete Batard <pete@akeo.ie>
|
||||
Copyright (C) 2009-2013 Ludovic Rousseau <ludovic.rousseau@gmail.com>
|
||||
Copyright (C) 2010-2012 Michael Plante <michael.plante@gmail.com>
|
||||
Copyright (C) 2011-2013 Hans de Goede <hdegoede@redhat.com>
|
||||
Copyright (C) 2012-2013 Martin Pieuchot <mpi@openbsd.org>
|
||||
|
||||
|
||||
License of the libusb library and most examples except ezusb and fxload:
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
||||
MA 02110-1301 USA.
|
||||
|
||||
On Debian systems, the complete text of the LGPL license can be found
|
||||
in the /usr/share/common-licenses/LGPL-2.1 file.
|
||||
|
||||
|
||||
License of ezusb and fxload:
|
||||
This source code is free software; you can redistribute it
|
||||
and/or modify it in source code form under the terms of the GNU
|
||||
General Public License as published by the Free Software
|
||||
Foundation; either version 2 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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
||||
USA.
|
||||
|
||||
On Debian systems, the complete text of the GPL license can be found
|
||||
in the /usr/share/common-licenses/GPL-2 file.
|
||||
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"version": "0.1",
|
||||
"date": "06.06.2026 um 20:57",
|
||||
"version": "0.2.2",
|
||||
"build_date": "04.08.2026 um 10:33 by DD1DLH",
|
||||
"description": "Messung von zwei Spannung und Steuerung von Relais",
|
||||
"features": [
|
||||
"ADS1115-Abfrage über go-i2c",
|
||||
|
|
|
|||
|
|
@ -45,11 +45,11 @@ func NewServer(port string, readVolt func(int) float64, toggle func(int), getRel
|
|||
}
|
||||
}
|
||||
|
||||
func (s *Server) Start() error {
|
||||
func (s *Server) Start(certFile, keyFile string) error {
|
||||
http.HandleFunc("/", s.handleIndex)
|
||||
http.HandleFunc("/api/status", s.handleAPIStatus)
|
||||
http.HandleFunc("/api/toggle", s.handleAPIToggle)
|
||||
return http.ListenAndServe(s.port, nil)
|
||||
return http.ListenAndServeTLS(s.port, certFile, keyFile, nil)
|
||||
}
|
||||
|
||||
func (s *Server) handleIndex(w http.ResponseWriter, r *http.Request) {
|
||||
|
|
|
|||
|
|
@ -5,8 +5,25 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<style>
|
||||
body { font-family: 'Segoe UI', Arial, sans-serif; text-align: center; background: #0f172a; color: #f8fafc; padding: 20px; }
|
||||
.container { max-width: 500px; margin: 0 auto; }
|
||||
.card { background: #1e293b; padding: 20px; margin: 15px 0; border-radius: 12px; box-shadow: 0 4px 6px -1px rgba(0,0,0,0.3); border: 1px solid #334155; }
|
||||
/* Maximale Breite erhöht, um Platz für das zweispaltige Layout zu bieten */
|
||||
.container { max-width: 1000px; margin: 0 auto; }
|
||||
|
||||
/* Das neue Haupt-Layout: Links Relais, rechts Spannungen */
|
||||
.main-layout {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 20px;
|
||||
align-items: start;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
/* Spalten-Container für korrekte Ausrichtung */
|
||||
.layout-col {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.card { background: #1e293b; padding: 20px; margin: 15px 0; border-radius: 12px; box-shadow: 0 4px 6px -1px rgba(0,0,0,0.3); border: 1px solid #334155; text-align: center; }
|
||||
.val { font-size: 2.5em; color: #38bdf8; font-weight: bold; font-family: monospace; }
|
||||
.grid { display: grid; grid-template-columns: 1fr; gap: 12px; margin-top: 15px; }
|
||||
.btn { width: 100%; padding: 14px; font-size: 1.1em; border: none; border-radius: 8px; cursor: pointer; font-weight: bold; transition: background 0.2s, transform 0.1s; color: white; }
|
||||
|
|
@ -15,55 +32,66 @@
|
|||
.btn-on:hover { background: #dc2626; }
|
||||
.btn-off { background: #10b981; }
|
||||
.btn-off:hover { background: #059669; }
|
||||
.footer-nav { margin-top: 25px; font-size: 0.9em; color: #64748b; }
|
||||
.footer-nav { margin-top: 25px; font-size: 0.9em; color: #64748b; clear: both; }
|
||||
|
||||
/* Responsive Anpassung: Schaltet auf Smartphones automatisch untereinander um */
|
||||
@media (max-width: 768px) {
|
||||
.main-layout { grid-template-columns: 1fr; gap: 0; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>U12V Funkstations-Monitor</h1>
|
||||
<h1>Funkstations-Monitor</h1>
|
||||
|
||||
<!-- Dynamische Überschriften aus dem Names-Array der config.json -->
|
||||
<div class="card">
|
||||
<h3>{{index .Names 0}}</h3>
|
||||
<div class="val" id="v1">--.-- V</div>
|
||||
</div>
|
||||
<div class="main-layout">
|
||||
<!-- LINKE SPALTE: Relaissteuerung -->
|
||||
<div class="layout-col">
|
||||
<div class="card">
|
||||
<h3>Relaissteuerung</h3>
|
||||
<div class="grid">
|
||||
{{range .Relais}}
|
||||
<button class="btn btn-off" id="relais-btn-{{.ID}}" onclick="toggleRelais({{.ID}})">
|
||||
{{.Name}}: Laden...
|
||||
</button>
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h3>{{index .Names 1}}</h3>
|
||||
<div class="val" id="v2">--.-- V</div>
|
||||
</div>
|
||||
<!-- RECHTE SPALTE: Spannungsanzeigen -->
|
||||
<div class="layout-col">
|
||||
<div class="card">
|
||||
<h3>{{index .Names 0}}</h3>
|
||||
<div class="val" id="v1">--.-- V</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h3>{{index .Names 2}}</h3>
|
||||
<div class="val" id="v3">--.-- V</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>{{index .Names 1}}</h3>
|
||||
<div class="val" id="v2">--.-- V</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h3>{{index .Names 3}}</h3>
|
||||
<div class="val" id="v4">--.-- V</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>{{index .Names 2}}</h3>
|
||||
<div class="val" id="v3">--.-- V</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h3>{{index .Names 4}}</h3>
|
||||
<div class="val" id="v5">--.-- V</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>{{index .Names 3}}</h3>
|
||||
<div class="val" id="v4">--.-- V</div>
|
||||
</div>
|
||||
|
||||
<!-- Relaissteuerung -->
|
||||
<div class="card">
|
||||
<h3>Relaissteuerung</h3>
|
||||
<div class="grid">
|
||||
{{range .Relais}}
|
||||
<button class="btn btn-off" id="relais-btn-{{.ID}}" onclick="toggleRelais({{.ID}})">
|
||||
{{.Name}}: Laden...
|
||||
</button>
|
||||
{{end}}
|
||||
<div class="card">
|
||||
<h3>{{index .Names 4}}</h3>
|
||||
<div class="val" id="v5">--.-- V</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer-nav">
|
||||
Live-Aktualisierung aktiv (ohne Flackern)<br>
|
||||
Live-Aktualisierung aktiv <br>
|
||||
<span style="font-size: 0.8em; color: #475569; margin-top: 5px; display: block;">
|
||||
Version v{{.Version}} ({{.BuildDate}})
|
||||
Version {{.Version}} ({{.BuildDate}})
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -79,6 +107,15 @@
|
|||
data.relais.forEach(r => {
|
||||
const btn = document.getElementById(`relais-btn-${r.id}`);
|
||||
if (btn) {
|
||||
if (r.name && r.name.toLowerCase().includes('reserve')) {
|
||||
btn.className = 'btn btn-off';
|
||||
btn.innerText = `${r.name}: GESPERRT`;
|
||||
btn.disabled = true;
|
||||
btn.style.opacity = '0.3';
|
||||
btn.style.cursor = 'not-allowed';
|
||||
return;
|
||||
}
|
||||
|
||||
if (r.state) {
|
||||
btn.className = 'btn btn-on';
|
||||
btn.innerText = `${r.name}: AKTIV (Ausschalten)`;
|
||||
|
|
|
|||
Loading…
Reference in a new issue