mirror of
https://github.com/RoganDawes/P4wnP1_aloa.git
synced 2025-04-12 05:59:03 +02:00
Cleanup unneeded files
This commit is contained in:
parent
984c3fdd5f
commit
7bb1dfa254
141
desktest.go
141
desktest.go
@ -1,141 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/mame82/P4wnP1_go/common_web"
|
||||
pb "github.com/mame82/P4wnP1_go/proto"
|
||||
"github.com/mame82/P4wnP1_go/service"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
)
|
||||
|
||||
/*
|
||||
|
||||
#!/bin/bash
|
||||
# /tmp/test.sh
|
||||
echo "Bash DHCP Lease"
|
||||
echo "Interface: $DHCP_LEASE_IFACE"
|
||||
echo "Mac: $DHCP_LEASE_MAC"
|
||||
echo "IP: $DHCP_LEASE_IP"
|
||||
|
||||
|
||||
#!/bin/bash
|
||||
# /tmp/test1.sh
|
||||
echo "Bash SSH Login"
|
||||
echo "Interface: $SSH_LOGIN_USER"
|
||||
|
||||
*/
|
||||
|
||||
func RegisterTestActions(tam *service.TriggerActionManager) {
|
||||
// create test trigger
|
||||
serviceUpRunScript := &pb.TriggerAction{
|
||||
Trigger: &pb.TriggerAction_ServiceStarted{
|
||||
ServiceStarted: &pb.TriggerServiceStarted{},
|
||||
},
|
||||
Action: &pb.TriggerAction_BashScript{
|
||||
BashScript: &pb.ActionStartBashScript{
|
||||
ScriptPath: "/usr/local/P4wnP1/scripts/servicestart1.sh",
|
||||
},
|
||||
},
|
||||
}
|
||||
dhcpLeaseScript := &pb.TriggerAction{
|
||||
Trigger: &pb.TriggerAction_DhcpLeaseGranted{
|
||||
DhcpLeaseGranted: &pb.TriggerDHCPLeaseGranted{},
|
||||
},
|
||||
Action: &pb.TriggerAction_BashScript{
|
||||
BashScript: &pb.ActionStartBashScript{
|
||||
ScriptPath: "/tmp/test.sh",
|
||||
},
|
||||
},
|
||||
}
|
||||
sshLoginScript := &pb.TriggerAction{
|
||||
OneShot: true,
|
||||
Trigger: &pb.TriggerAction_SshLogin{
|
||||
SshLogin: &pb.TriggerSSHLogin{},
|
||||
},
|
||||
Action: &pb.TriggerAction_BashScript{
|
||||
BashScript: &pb.ActionStartBashScript{
|
||||
ScriptPath: "/tmp/test1.sh",
|
||||
},
|
||||
},
|
||||
}
|
||||
serviceUpLog := &pb.TriggerAction{
|
||||
Trigger: &pb.TriggerAction_ServiceStarted{
|
||||
ServiceStarted: &pb.TriggerServiceStarted{},
|
||||
},
|
||||
Action: &pb.TriggerAction_Log{
|
||||
Log: &pb.ActionLog{},
|
||||
},
|
||||
}
|
||||
tam.AddTriggerAction(serviceUpRunScript)
|
||||
tam.AddTriggerAction(serviceUpLog)
|
||||
tam.AddTriggerAction(dhcpLeaseScript)
|
||||
tam.AddTriggerAction(sshLoginScript)
|
||||
}
|
||||
|
||||
func EmitTestEvents(evmgr *service.EventManager) {
|
||||
// generate events
|
||||
go func() {
|
||||
for {
|
||||
evmgr.Emit(service.ConstructEventTriggerDHCPLease("wlan0", "aa:bb:cc:dd:ee:ff", "172.24.0.6"))
|
||||
time.Sleep(1800*time.Millisecond)
|
||||
}
|
||||
}()
|
||||
|
||||
go func() {
|
||||
time.Sleep(time.Second)
|
||||
for {
|
||||
evmgr.Emit(service.ConstructEventTriggerSSHLogin("testuser"))
|
||||
time.Sleep(5*time.Second)
|
||||
}
|
||||
|
||||
}()
|
||||
|
||||
go func() {
|
||||
time.Sleep(2*time.Second)
|
||||
for {
|
||||
evmgr.Emit(service.ConstructEventTrigger(common_web.EVT_TRIGGER_TYPE_SERVICE_STARTED))
|
||||
time.Sleep(5*time.Second)
|
||||
}
|
||||
|
||||
}()
|
||||
|
||||
}
|
||||
|
||||
func main() {
|
||||
pseudoService := &service.Service{
|
||||
SubSysEvent: service.NewEventManager(10),
|
||||
}
|
||||
tam := service.NewTriggerActionManager(pseudoService)
|
||||
|
||||
pseudoService.SubSysEvent.Start()
|
||||
tam.Start()
|
||||
|
||||
RegisterTestActions(tam)
|
||||
|
||||
/*
|
||||
// Pause TriggerActionManager after 5 seconds for 5 seconds
|
||||
go func() {
|
||||
time.Sleep(time.Second * 5)
|
||||
tam.Stop()
|
||||
time.Sleep(time.Second * 5)
|
||||
tam.Start()
|
||||
}()
|
||||
*/
|
||||
|
||||
EmitTestEvents(pseudoService.SubSysEvent)
|
||||
|
||||
//use a channel to wait for SIGTERM or SIGINT
|
||||
fmt.Println("P4wnP1 service initialized, stop with SIGTERM or SIGINT")
|
||||
sig := make(chan os.Signal)
|
||||
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
|
||||
si := <-sig
|
||||
log.Printf("Signal (%v) received, ending P4wnP1_service ...\n", si)
|
||||
pseudoService.SubSysEvent.Stop()
|
||||
tam.Stop()
|
||||
return
|
||||
|
||||
}
|
314
ntest.go
314
ntest.go
@ -1,314 +0,0 @@
|
||||
// +build linux
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/mame82/P4wnP1_go/genl_p4wnp1"
|
||||
"golang.org/x/sys/unix"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/signal"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
/*
|
||||
while $true; do cat /sys/kernel/debug/20980000.usb/regdump | grep HPRT0; sleep 1; done
|
||||
|
||||
Host Port Control and Status register
|
||||
=====================================
|
||||
Reg value is dumpable via debugfs for DesignWare USB 2.0 host controller (dwc2)
|
||||
The dump could be triggered via debugff by reading `/sys/kernel/debug/20980000.usb/regdump` which holds the value for the register in `HPRT0`.
|
||||
The problem with the approach: The register dump has to be triggered by polling /sys/kernel/debug/20980000.usb/regdump and dumps ALL registers.
|
||||
This seems to crash the UDC from time to time, in contrast to the comment of the kernel source (https://github.com/raspberrypi/linux/blob/rpi-4.14.y/drivers/usb/dwc2/debugfs.c#L402).
|
||||
|
||||
HPRT --> Host Port Control and Status Register, details on data struct:
|
||||
https://www.cl.cam.ac.uk/~atm26/ephemeral/rpi/dwc_otg/doc/html/unionhprt0__data.html#a964274b5d22e89ca4490f66dff3c763
|
||||
|
||||
|
||||
Meanings of struct fields:
|
||||
https://www.intel.com/content/www/us/en/programmable/documentation/sfo1410144425160/sfo1410067646785/sfo1410069362932/sfo1410069623936/sfo1410069628257/sfo1410069409998.html
|
||||
|
||||
01741 typedef union hprt0_data {
|
||||
01743 uint32_t d32;
|
||||
01745 struct {
|
||||
01746 unsigned prtconnsts:1;
|
||||
01747 unsigned prtconndet:1;
|
||||
01748 unsigned prtena:1;
|
||||
01749 unsigned prtenchng:1;
|
||||
|
||||
01750 unsigned prtovrcurract:1;
|
||||
01751 unsigned prtovrcurrchng:1;
|
||||
01752 unsigned prtres:1;
|
||||
01753 unsigned prtsusp:1;
|
||||
|
||||
01754 unsigned prtrst:1;
|
||||
01755 unsigned reserved9:1;
|
||||
01756 unsigned prtlnsts:2;
|
||||
|
||||
01757 unsigned prtpwr:1;
|
||||
01758 unsigned prttstctl:4;
|
||||
01759 unsigned prtspd:2;
|
||||
01760 #define DWC_HPRT0_PRTSPD_HIGH_SPEED 0
|
||||
01761 #define DWC_HPRT0_PRTSPD_FULL_SPEED 1
|
||||
01762 #define DWC_HPRT0_PRTSPD_LOW_SPEED 2
|
||||
01763 unsigned reserved19_31:13;
|
||||
01764 } b;
|
||||
01765 } hprt0_data_t;
|
||||
|
||||
Test results (polling /sys/kernel/debug/20980000.usb/regdump and parsing "HPRT0")
|
||||
=================================================================================
|
||||
|
||||
USB gadget running, but OTG adapter attached, NO device connected to the OTG adapter
|
||||
--> prtlnsts = 0 (No data line on positive logic level)
|
||||
--> prtpwr = 1 (the port is powered ... at least if there's no overcorrency)
|
||||
--> prtconnsts = 0 (No device attached)
|
||||
|
||||
USB gadget running, but OTG adapter attached, device connected to the OTG adapter
|
||||
--> prtlnsts = 0,1 or 2 (changes)
|
||||
--> prtpwr = 1 (the port is powered ... at least if there's no overcorrency)
|
||||
--> prtconnsts = 1 (A device is attached)
|
||||
--> prtspd = 1 or 2 (for non high speed devices)
|
||||
|
||||
USB gadget running, no OTG adapter attached, but NOT connected to host as a peripheral
|
||||
--> prtlnsts = 1 (Logic Level of D+ is 1, logic level of D- is 0)
|
||||
--> prtpwr = 0
|
||||
--> prtconnsts = 0 (No device attached)
|
||||
|
||||
USB gadget running, no OTG adapter attached, connected to host as a peripheral
|
||||
--> prtlnsts = 0 (both, D+ and D-, are indicated as low)
|
||||
--> prtpwr = 0
|
||||
--> prtconnsts = 0 (No device attached)
|
||||
--> in fact the whole HPRT0 is set to 0x00000000 if connected to a host in device mode
|
||||
|
||||
|
||||
|
||||
WARNING: Constant reading from the regdump file sometimes crashes UDC */
|
||||
|
||||
type USBConnectionState int
|
||||
|
||||
const (
|
||||
USB_CONNECTION_STATE_UNKNOWN = 0
|
||||
USB_CONNECTION_STATE_PERIPHERAL_ATTACHED_TO_HOST = 1
|
||||
USB_CONNECTION_STATE_PERIPHERAL_NOT_ATTACHED_TO_HOST = 2
|
||||
USB_CONNECTION_STATE_OTG_NO_DEVICE_ATTACHED = 3
|
||||
USB_CONNECTION_STATE_OTG_DEVICE_ATTACHED = 4
|
||||
)
|
||||
|
||||
func (cs USBConnectionState) String() string {
|
||||
names := [...]string{
|
||||
"Unknown",
|
||||
"Peripheral mode, connected to host",
|
||||
"Peripheral mode, not connected to host",
|
||||
"OTG mode, no device attached",
|
||||
"OTG mode, some device(s) attached",
|
||||
}
|
||||
|
||||
if cs < USB_CONNECTION_STATE_UNKNOWN || cs > USB_CONNECTION_STATE_OTG_DEVICE_ATTACHED {
|
||||
return names[0]
|
||||
}
|
||||
|
||||
return names[cs]
|
||||
}
|
||||
|
||||
// Host Port Control and Status Register
|
||||
type HprtData struct {
|
||||
RegVal uint32
|
||||
|
||||
PrtConnSts bool //0
|
||||
PrtConnDet bool //1
|
||||
PrtEnA bool //2
|
||||
PrtEnChng bool //3
|
||||
|
||||
PrtOvrCurrAct bool //4
|
||||
PrtOvrCurrChng bool //5
|
||||
PrtRes bool //6
|
||||
PrtSusp bool //7
|
||||
|
||||
PrtRst bool //8
|
||||
// Reserved9 bool //9
|
||||
PrtLnSts uint8 // 10 + 11
|
||||
|
||||
PrtPwr bool //12
|
||||
PrtTstCtl uint8 //13,14,15,16
|
||||
|
||||
PrtSpd uint8 //17,18
|
||||
|
||||
ConState USBConnectionState
|
||||
// #define DWC_HPRT0_PRTSPD_HIGH_SPEED 0
|
||||
// #define DWC_HPRT0_PRTSPD_FULL_SPEED 1
|
||||
// #define DWC_HPRT0_PRTSPD_LOW_SPEED 2
|
||||
// unsigned reserved19_31:13;
|
||||
}
|
||||
|
||||
func (tgt *HprtData) FromUint32(src uint32) {
|
||||
tgt.RegVal = src
|
||||
|
||||
tgt.PrtConnSts = src&1 > 0
|
||||
tgt.PrtConnDet = src&(1<<1) > 0
|
||||
tgt.PrtEnA = src&(1<<2) > 0
|
||||
tgt.PrtEnChng = src&(1<<3) > 0
|
||||
|
||||
tgt.PrtOvrCurrAct = src&(1<<4) > 0
|
||||
tgt.PrtOvrCurrChng = src&(1<<5) > 0
|
||||
tgt.PrtRes = src&(1<<6) > 0
|
||||
tgt.PrtSusp = src&(1<<7) > 0
|
||||
|
||||
tgt.PrtRst = src&(1<<8) > 0
|
||||
tgt.PrtLnSts = uint8((src >> 10) & 0x3)
|
||||
|
||||
tgt.PrtPwr = src&(1<<12) > 0
|
||||
tgt.PrtTstCtl = uint8((src >> 13) & 0xF)
|
||||
tgt.PrtSpd = uint8((src >> 17) & 0x3)
|
||||
|
||||
switch {
|
||||
case tgt.PrtPwr && !tgt.PrtConnSts:
|
||||
tgt.ConState = USB_CONNECTION_STATE_OTG_NO_DEVICE_ATTACHED
|
||||
case tgt.PrtPwr && tgt.PrtConnSts:
|
||||
tgt.ConState = USB_CONNECTION_STATE_OTG_DEVICE_ATTACHED
|
||||
case tgt.RegVal == 0:
|
||||
tgt.ConState = USB_CONNECTION_STATE_PERIPHERAL_ATTACHED_TO_HOST
|
||||
case !tgt.PrtPwr && tgt.PrtLnSts > 0:
|
||||
tgt.ConState = USB_CONNECTION_STATE_PERIPHERAL_NOT_ATTACHED_TO_HOST
|
||||
default:
|
||||
tgt.ConState = USB_CONNECTION_STATE_UNKNOWN
|
||||
}
|
||||
}
|
||||
|
||||
func ReadState() (regval *HprtData, err error) {
|
||||
cont, err := ioutil.ReadFile("/sys/kernel/debug/20980000.usb/regdump") // This read dumps all regs, including HPRT0
|
||||
if err != nil {
|
||||
return regval, err
|
||||
}
|
||||
scont := string(cont)
|
||||
|
||||
reHprt0 := regexp.MustCompile("(?m)HPRT0 = 0x([0-9]{8})")
|
||||
strReg := ""
|
||||
if rRes := reHprt0.FindStringSubmatch(scont); len(rRes) > 1 {
|
||||
strReg = rRes[1]
|
||||
} else {
|
||||
return regval, errors.New("String for register HPRT0 couldn't be extracted from sysfs")
|
||||
}
|
||||
|
||||
regValInt, err := strconv.ParseUint(strReg, 16, 32)
|
||||
if err != nil {
|
||||
return regval, errors.New(fmt.Sprintf("Couldn't parse HPRT0 value '%s' to int32\n", strReg))
|
||||
}
|
||||
|
||||
regval = &HprtData{}
|
||||
regval.FromUint32(uint32(regValInt))
|
||||
|
||||
return regval, nil
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
func init_nl() (sock_fd int, err error) {
|
||||
sock_fd,err = unix.Socket(unix.AF_NETLINK, unix.SOCK_RAW, unix.NETLINK_GENERIC) // Socket to netlink generic family
|
||||
if err != nil { return }
|
||||
|
||||
err = unix.Bind(sock_fd, &unix.SockaddrNetlink {
|
||||
Family: unix.AF_NETLINK,
|
||||
Groups: 0,
|
||||
Pid: uint32(os.Getpid()),
|
||||
})
|
||||
if err != nil { return }
|
||||
|
||||
//err = syscall.SetsockoptInt(d.sock_fd, unix.SOL_NETLINK, unix.NETLINK_ADD_MEMBERSHIP, d.nl_group)
|
||||
|
||||
return
|
||||
|
||||
}
|
||||
|
||||
func deinit_nl() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
func main() {
|
||||
|
||||
/*
|
||||
genl,err := mgennetlink.NewGeNl()
|
||||
if err != nil { panic(err) }
|
||||
genl.Open()
|
||||
defer genl.Close()
|
||||
|
||||
fam_name := "p4wnp1"
|
||||
dwc2_group_name := "p4wnp1_dwc2_mc"
|
||||
|
||||
fam,err := genl.GetFamily(fam_name)
|
||||
if err != nil { panic(err) }
|
||||
fmt.Printf("FAMILY\n=====\n%+v\n", fam)
|
||||
|
||||
dwc2grpId,err := fam.GetGroupByName(dwc2_group_name)
|
||||
if err != nil { panic(err) }
|
||||
|
||||
fmt.Println("Join Group: ", dwc2_group_name)
|
||||
genl.AddGroupMembership(dwc2grpId)
|
||||
|
||||
|
||||
for {
|
||||
fmt.Println("Recieve....")
|
||||
msgs,errm := genl.Receive()
|
||||
if errm == nil {
|
||||
fmt.Printf("Messages:\n%+v\n", msgs)
|
||||
} else {
|
||||
fmt.Println("Receive error: ", errm)
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
c,err := genl_p4wnp1.NewClient()
|
||||
if err != nil { panic(err) }
|
||||
c.Open()
|
||||
|
||||
//wo := peripheral.WaveshareOled{}
|
||||
//wo.Start()
|
||||
/*
|
||||
dwc := dwc2.NewDwc2Nl(24)
|
||||
err := dwc.OpenNlKernelSock()
|
||||
|
||||
if err == nil {
|
||||
dwc.SocketReaderLoop2()
|
||||
} else {
|
||||
fmt.Println("Err: ", err)
|
||||
}
|
||||
dwc.Close()
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
i := 0
|
||||
for {
|
||||
res, err := ReadState()
|
||||
if err == nil {
|
||||
fmt.Printf("%d %+v\n ", i, res)
|
||||
} else {
|
||||
fmt.Println(err)
|
||||
}
|
||||
time.Sleep(time.Millisecond * 200)
|
||||
i++
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
w := service.NewDwc2ConnectWatcher()
|
||||
w.Start()
|
||||
*/
|
||||
|
||||
fmt.Println("Stop with SIGTERM or SIGINT")
|
||||
sig := make(chan os.Signal)
|
||||
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
|
||||
si := <-sig
|
||||
fmt.Printf("Signal (%v) received, ending P4wnP1_service ...\n", si)
|
||||
//wo.Stop()
|
||||
//w.Stop()
|
||||
|
||||
c.Close()
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user