mirror of
https://github.com/RoganDawes/P4wnP1_aloa.git
synced 2025-03-27 01:51:45 +01:00
Bluetooth: NAP working, mustn't disable SSP
This commit is contained in:
parent
4edac190bf
commit
199a7ab54a
@ -18,19 +18,9 @@ import (
|
||||
|
||||
func main() {
|
||||
|
||||
err := service.InitGlobalServiceState()
|
||||
if err != nil { panic(err) }
|
||||
|
||||
state := service.ServiceState
|
||||
state.StartService()
|
||||
|
||||
|
||||
//ToDo: Check for root privs
|
||||
|
||||
|
||||
//service.NewLed(false) //Set LED to manual trigger
|
||||
//service.InitDefaultLEDSettings()
|
||||
|
||||
/*
|
||||
log.Printf("Keyboard devFile: %s\n", service.HidDevPath[service.USB_FUNCTION_HID_KEYBOARD_name])
|
||||
log.Printf("Mouse devFile: %s\n", service.HidDevPath[service.USB_FUNCTION_HID_MOUSE_name])
|
||||
@ -38,13 +28,6 @@ func main() {
|
||||
*/
|
||||
|
||||
// ToDo: The webroot has to be changed to /usr/local/P4wnP1/www
|
||||
//service.StartRpcServerAndWeb("0.0.0.0", "50051", "8000", "/usr/local/P4wnP1/www") //start gRPC service
|
||||
|
||||
/*
|
||||
//Indicate servers up with LED blink count 1
|
||||
state.Led.SetLed(&pb.LEDSettings{1})
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
@ -55,15 +38,7 @@ func main() {
|
||||
svc.Start()
|
||||
|
||||
|
||||
/*
|
||||
//service.StartEventManager(20)
|
||||
// log.SetOutput(state.EvMgr)
|
||||
go func() {
|
||||
err := common.RunBashScript("/usr/local/P4wnP1/scripts/servicestart.sh")
|
||||
if err != nil { log.Printf("Error executing service startup script: %v\n", err) }
|
||||
}()
|
||||
*/
|
||||
|
||||
// ToDo: Remove this (testing only)
|
||||
//Send some log messages for testing
|
||||
textfill := "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea"
|
||||
i := 0
|
||||
@ -83,6 +58,6 @@ func main() {
|
||||
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
|
||||
s := <-sig
|
||||
log.Printf("Signal (%v) received, ending P4wnP1_service ...\n", s)
|
||||
state.StopService()
|
||||
svc.Stop()
|
||||
return
|
||||
}
|
||||
|
@ -13,28 +13,30 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
BT_MINIMUM_BLUEZ_VERSION_MAJOR = 5
|
||||
BT_MINIMUM_BLUEZ_VERSION_MINOR = 43
|
||||
BT_MINIMUM_BLUEZ_VERSION_MAJOR = 5
|
||||
BT_MINIMUM_BLUEZ_VERSION_MINOR = 43
|
||||
)
|
||||
|
||||
type BtService struct {
|
||||
RootSvc *Service
|
||||
|
||||
ServiceAvailable bool
|
||||
Controller *bluetooth.Controller
|
||||
BrName string
|
||||
bridgeIfDeployed bool
|
||||
|
||||
Agent *bluetooth.DefaultAgent
|
||||
Agent *bluetooth.DefaultAgent
|
||||
}
|
||||
|
||||
|
||||
func NewBtService() (res *BtService) {
|
||||
func NewBtService(rootService *Service) (res *BtService) {
|
||||
res = &BtService{
|
||||
Agent: bluetooth.NewDefaultAgent("4321"),
|
||||
BrName: BT_ETHERNET_BRIDGE_NAME,
|
||||
RootSvc: rootService,
|
||||
Agent: bluetooth.NewDefaultAgent("4321"),
|
||||
BrName: BT_ETHERNET_BRIDGE_NAME,
|
||||
}
|
||||
|
||||
// ToDo Check if bluetooth service is loaded
|
||||
if c,err := bluetooth.FindFirstAvailableController(); err == nil {
|
||||
if c, err := bluetooth.FindFirstAvailableController(); err == nil {
|
||||
res.ServiceAvailable = true
|
||||
res.Controller = c
|
||||
} else {
|
||||
@ -52,7 +54,8 @@ func NewBtService() (res *BtService) {
|
||||
|
||||
// ToDo: Move all controller specific tasks to controller
|
||||
func (bt *BtService) StartNAP() (err error) {
|
||||
if !bt.ServiceAvailable { return bluetooth.ErrBtSvcNotAvailable
|
||||
if !bt.ServiceAvailable {
|
||||
return bluetooth.ErrBtSvcNotAvailable
|
||||
}
|
||||
log.Println("Bluetooth: starting NAP...")
|
||||
// assure bnep module is loaded
|
||||
@ -72,33 +75,51 @@ func (bt *BtService) StartNAP() (err error) {
|
||||
|
||||
// Disable simple secure pairing to make PIN requests work
|
||||
bt.Controller.SetPowered(false)
|
||||
bt.Controller.SetSSP(false)
|
||||
bt.Controller.SetSSP(true) //NAP doesn't work well without SSP
|
||||
bt.Controller.SetPowered(true)
|
||||
|
||||
// Configure adapter
|
||||
fmt.Println("Reconfigure adapter to be discoverable and pairable")
|
||||
err = bt.Controller.SetAlias("P4wnP1")
|
||||
if err != nil { return }
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = bt.Controller.SetDiscoverableTimeout(0)
|
||||
if err != nil { return }
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = bt.Controller.SetPairableTimeout(0)
|
||||
if err != nil { return }
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = bt.Controller.SetDiscoverable(true)
|
||||
if err != nil { return }
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = bt.Controller.SetPairable(true)
|
||||
|
||||
// Enable PAN networking for bridge
|
||||
nw,err := toolz.NetworkServer(bt.Controller.DBusPath)
|
||||
if err != nil { return }
|
||||
nw, err := toolz.NetworkServer(bt.Controller.DBusPath)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
//defer nw.Close()
|
||||
err = nw.Register(toolz.UUID_NETWORK_SERVER_NAP, BT_ETHERNET_BRIDGE_NAME)
|
||||
if err != nil { return }
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if mi, err := bt.RootSvc.SubSysNetwork.GetManagedInterface(BT_ETHERNET_BRIDGE_NAME); err == nil {
|
||||
mi.ReDeploy()
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (bt *BtService) StopNAP() (err error) {
|
||||
if !bt.ServiceAvailable { return bluetooth.ErrBtSvcNotAvailable }
|
||||
if !bt.ServiceAvailable {
|
||||
return bluetooth.ErrBtSvcNotAvailable
|
||||
}
|
||||
log.Println("Bluetooth: stopping NAP...")
|
||||
|
||||
//Stop bt-agent
|
||||
@ -108,7 +129,7 @@ func (bt *BtService) StopNAP() (err error) {
|
||||
bt.DisableBridge()
|
||||
|
||||
// Unregister pan service
|
||||
nw,err := toolz.NetworkServer(bt.Controller.DBusPath)
|
||||
nw, err := toolz.NetworkServer(bt.Controller.DBusPath)
|
||||
//if err != nil { return }
|
||||
defer nw.Close()
|
||||
err = nw.Unregister("pan")
|
||||
@ -135,7 +156,12 @@ func (bt *BtService) EnableBridge() (err error) {
|
||||
return err
|
||||
}
|
||||
// SetBridgeSTP(BT_ETHERNET_BRIDGE_NAME, true) //enable spanning tree
|
||||
SetBridgeForwardDelay(BT_ETHERNET_BRIDGE_NAME, 0)
|
||||
err = SetBridgeForwardDelay(BT_ETHERNET_BRIDGE_NAME, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = SetBridgeSTP(BT_ETHERNET_BRIDGE_NAME, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ func (a *DefaultAgent) Release() *dbus.Error {
|
||||
}
|
||||
|
||||
func (a *DefaultAgent) RequestPinCode(device dbus.ObjectPath) (pincode string, err *dbus.Error) {
|
||||
fmt.Println("DefaultAgent request pincode called, returning string '12345'")
|
||||
fmt.Printf("DefaultAgent request pincode called, returning string '%s'\n", a.pincode)
|
||||
// Called when SSP is off and currentCap != CAP_NO_INPUT_NO_OUTPUT, we could use a pre-generated PIN
|
||||
// and the remote device has to enter the same one
|
||||
return a.pincode, nil
|
||||
@ -61,8 +61,8 @@ func (a *DefaultAgent) RequestConfirmation(device dbus.ObjectPath, passkey uint3
|
||||
|
||||
func (a *DefaultAgent) RequestAuthorization(device dbus.ObjectPath) *dbus.Error {
|
||||
fmt.Println("DefaultAgent request authorization called")
|
||||
fmt.Println("... rejecting")
|
||||
return toolz.ErrRejected
|
||||
fmt.Println("... accepting")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *DefaultAgent) AuthorizeService(device dbus.ObjectPath, uuid string) *dbus.Error {
|
||||
|
@ -20,7 +20,7 @@ func GetDefaultNetworkSettingsBluetooth() (*pb.EthernetInterfaceSettings) {
|
||||
ifSettings := &pb.EthernetInterfaceSettings{
|
||||
Name: BT_ETHERNET_BRIDGE_NAME,
|
||||
Enabled: true,
|
||||
Mode: pb.EthernetInterfaceSettings_MANUAL,
|
||||
Mode: pb.EthernetInterfaceSettings_DHCP_SERVER,
|
||||
IpAddress4: "172.26.0.1",
|
||||
Netmask4: "255.255.255.0",
|
||||
DhcpServerSettings: GetDefaultDHCPConfigBluetooth(),
|
||||
|
@ -101,8 +101,8 @@ func RegisterDefaultTriggerActions(tam *TriggerActionManager) {
|
||||
|
||||
type Service struct {
|
||||
SubSysDataStore *datastore.Store // very first service
|
||||
SubSysState interface{}
|
||||
SubSysLogging interface{}
|
||||
// SubSysState interface{}
|
||||
// SubSysLogging interface{}
|
||||
SubSysNetwork *NetworkManager
|
||||
|
||||
SubSysEvent *EventManager
|
||||
@ -126,12 +126,12 @@ func NewService() (svc *Service, err error) {
|
||||
svc.SubSysNetwork, err = NewNetworkManager()
|
||||
if err != nil { return nil,err}
|
||||
svc.SubSysUSB,err = NewUSBGadgetManager(svc) //Depends on NetworkSubSys, EvenSubSys
|
||||
if err == ErrUsbNotUsable { err = nil } //ToDo: delete this
|
||||
|
||||
// if err == ErrUsbNotUsable { err = nil } //ToDo: delete this
|
||||
if err != nil { return nil,err}
|
||||
|
||||
svc.SubSysWifi = NewWifiService(svc) //Depends on NetworkSubSys
|
||||
|
||||
|
||||
svc.SubSysBluetooth = NewBtService(svc) //Depends on NetworkSubSys
|
||||
|
||||
svc.SubSysRPC = NewRpcServerService(svc) //Depends on all other
|
||||
|
||||
@ -147,6 +147,10 @@ func (s *Service) Start() {
|
||||
|
||||
// Register TriggerActions
|
||||
RegisterDefaultTriggerActions(s.SubSysTriggerActions)
|
||||
|
||||
// ToDo: Manual start of BT NAP, has to be replaced by settings based approach (same as other subsystems)
|
||||
s.SubSysBluetooth.StartNAP()
|
||||
|
||||
// fire service started Event
|
||||
s.SubSysEvent.Emit(ConstructEventTrigger(common_web.EVT_TRIGGER_TYPE_SERVICE_STARTED))
|
||||
}
|
||||
@ -155,5 +159,7 @@ func (s *Service) Stop() {
|
||||
s.SubSysTriggerActions.Stop()
|
||||
s.SubSysLed.Stop()
|
||||
|
||||
s.SubSysBluetooth.StopNAP()
|
||||
|
||||
s.SubSysEvent.Stop()
|
||||
}
|
||||
|
@ -1,33 +0,0 @@
|
||||
// +build linux
|
||||
|
||||
package service
|
||||
|
||||
|
||||
var ServiceState *GlobalServiceState
|
||||
|
||||
|
||||
type GlobalServiceState struct {
|
||||
BtSvc *BtService
|
||||
}
|
||||
|
||||
func InitGlobalServiceState() (err error) {
|
||||
state := &GlobalServiceState{}
|
||||
ServiceState = state // store state in global variable
|
||||
|
||||
|
||||
// state.EvMgr = NewEventManager(20)
|
||||
|
||||
state.BtSvc = NewBtService()
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
func (state *GlobalServiceState) StartService() {
|
||||
// state.EvMgr.Start()
|
||||
// ToDo: Remove this, till the service is able to deploy startup settings
|
||||
state.BtSvc.StartNAP()
|
||||
}
|
||||
|
||||
func (state *GlobalServiceState) StopService() {
|
||||
// state.EvMgr.Stop()
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user