diff --git a/main.go b/main.go
index d5e7545..7dd6bc6 100644
--- a/main.go
+++ b/main.go
@@ -34,6 +34,7 @@ const (
var (
flagINDIServerManagerAddr string
flagPHD2ServerAddr string
+ flagINDIServerAddr string
flagINDIProfile string
flagToken string
flagConfFile string
@@ -58,6 +59,12 @@ func init() {
"raspberrypi.local:8624",
"INDI-server Manager address (host:port)",
)
+ flag.StringVar(
+ &flagINDIServerAddr,
+ "indi-server",
+ "",
+ "INDI-server address (host:port) to connect without Web Manager",
+ )
flag.StringVar(
&flagMode,
"mode",
@@ -130,17 +137,65 @@ func main() {
indiHubAddr = "localhost:7667" // TODO: change this to optional DEV server
}
- if flagINDIServerManagerAddr == "" {
- log.Fatal("'indi-server-manager' parameter is missing, the 'host:port' format is expected")
- }
+ indiServerAddr := ""
+ indiDrivers := []*lib.INDIDriver{}
+ indiProfile := &lib.INDIProfile{}
+ if flagINDIServerAddr != "" {
+ // connect to INDI-server directly without Web Manager
+ if _, _, err := net.SplitHostPort(flagINDIServerAddr); err != nil {
+ log.Fatal("Bad syntax for 'indi-server' parameter, the 'host:port' format is expected")
+ }
+ log.Println("Will try to connect directly to INDI-server (Web Manager is not used)")
+ indiProfile.Name = flagINDIServerAddr // to let backend know that no Web Manager was used
+ indiServerAddr = flagINDIServerAddr
+ } else {
+ // connect to INDI-server using info from Web Manager
+ indiHost, _, err := net.SplitHostPort(flagINDIServerManagerAddr)
+ if err != nil {
+ log.Fatal("Bad syntax for 'indi-server-manager' parameter, the 'host:port' format is expected")
+ }
+ if flagINDIProfile == "" {
+ log.Fatal("'indi-profile' parameter is required")
+ }
- indiHost, _, err := net.SplitHostPort(flagINDIServerManagerAddr)
- if err != nil {
- log.Fatal("Bad syntax for 'indi-server-manager' parameter, the 'host:port' format is expected")
- }
+ // connect to INDI-server Manager
+ log.Printf("Connection to local INDI-Server Manager on %s...\n", flagINDIServerManagerAddr)
+ managerClient := manager.NewClient(flagINDIServerManagerAddr)
+ running, currINDIProfile, err := managerClient.GetStatus()
+ if err != nil {
+ log.Fatal(err)
+ }
+ log.Println("...OK")
- if flagINDIProfile == "" {
- log.Fatal("'indi-profile' parameter is required")
+ // start required profile if it is not active and running
+ if !running || currINDIProfile != flagINDIProfile {
+ log.Printf("Setting active INDI-profile to '%s'\n", flagINDIProfile)
+ if err := managerClient.StopServer(); err != nil {
+ log.Fatal(err)
+ }
+ if err := managerClient.StartProfile(flagINDIProfile); err != nil {
+ log.Fatal(err)
+ }
+ } else {
+ log.Printf("INDI-server is running with active INDI-profile '%s'\n", flagINDIProfile)
+ }
+
+ // get profile connect data
+ indiProfile, err = managerClient.GetProfile(flagINDIProfile)
+ if err != nil {
+ log.Fatalf("could not get INDI-profile from INDI-server manager: %s", err)
+ }
+ indiServerAddr = fmt.Sprintf("%s:%d", indiHost, indiProfile.Port)
+
+ // get profile drivers data
+ indiDrivers, err = managerClient.GetDrivers()
+ if err != nil {
+ log.Fatalf("could not get INDI-drivers info from INDI-server manager: %s", err)
+ }
+ log.Println("INDIDrivers:")
+ for _, d := range indiDrivers {
+ log.Printf("%+v", *d)
+ }
}
// read token from flag or from config file if exists
@@ -151,45 +206,6 @@ func main() {
}
}
- // connect to INDI-server Manager
- log.Printf("Connection to local INDI-Server Manager on %s...\n", flagINDIServerManagerAddr)
- managerClient := manager.NewClient(flagINDIServerManagerAddr)
- running, currINDIProfile, err := managerClient.GetStatus()
- if err != nil {
- log.Fatal(err)
- }
- log.Println("...OK")
-
- // start required profile if it is not active and running
- if !running || currINDIProfile != flagINDIProfile {
- log.Printf("Setting active INDI-profile to '%s'\n", flagINDIProfile)
- if err := managerClient.StopServer(); err != nil {
- log.Fatal(err)
- }
- if err := managerClient.StartProfile(flagINDIProfile); err != nil {
- log.Fatal(err)
- }
- } else {
- log.Printf("INDI-server is running with active INDI-profile '%s'\n", flagINDIProfile)
- }
-
- // get profile connect data
- indiProfile, err := managerClient.GetProfile(flagINDIProfile)
- if err != nil {
- log.Fatalf("could not get INDI-profile from INDI-server manager: %s", err)
- }
- indiServerAddr = fmt.Sprintf("%s:%d", indiHost, indiProfile.Port)
-
- // get profile drivers data
- indiDrivers, err := managerClient.GetDrivers()
- if err != nil {
- log.Fatalf("could not get INDI-drivers info from INDI-server manager: %s", err)
- }
- log.Println("INDIDrivers:")
- for _, d := range indiDrivers {
- log.Printf("%+v", *d)
- }
-
// test connect to local INDI-server
log.Printf("Test connection to local INDI-Server on %s...\n", indiServerAddr)
indiConn, err := net.Dial("tcp", indiServerAddr)
@@ -228,11 +244,7 @@ func main() {
Os: runtime.GOOS,
Arch: runtime.GOARCH,
}
- ccdDrivers := []string{}
for i, driver := range indiDrivers {
- if driver.Family == "CCDs" {
- ccdDrivers = append(ccdDrivers, driver.Binary)
- }
indiHubHost.Drivers[i] = &indihub.INDIDriver{
Binary: driver.Binary,
Family: driver.Family,
@@ -295,7 +307,7 @@ func main() {
}
// prepare all modes
- soloMode := solo.NewMode(indiHubClient, regInfo, indiServerAddr, ccdDrivers)
+ soloMode := solo.NewMode(indiHubClient, regInfo, indiServerAddr)
shareMode := share.NewMode(indiHubClient, regInfo, indiServerAddr, flagPHD2ServerAddr, lib.ModeShare)
roboticMode := share.NewMode(indiHubClient, regInfo, indiServerAddr, flagPHD2ServerAddr, lib.ModeRobotic)
diff --git a/solo/mode.go b/solo/mode.go
index 238864c..11d15f1 100644
--- a/solo/mode.go
+++ b/solo/mode.go
@@ -11,18 +11,16 @@ type Mode struct {
indiServerAddr string
indiHubClient indihub.INDIHubClient
regInfo *indihub.RegisterInfo
- ccdDrivers []string
stopCh chan struct{}
status string
}
-func NewMode(indiHubClient indihub.INDIHubClient, regInfo *indihub.RegisterInfo, indiServerAddr string, ccdDrivers []string) *Mode {
+func NewMode(indiHubClient indihub.INDIHubClient, regInfo *indihub.RegisterInfo, indiServerAddr string) *Mode {
return &Mode{
indiServerAddr: indiServerAddr,
indiHubClient: indiHubClient,
regInfo: regInfo,
- ccdDrivers: ccdDrivers,
stopCh: make(chan struct{}, 1),
}
}
@@ -40,7 +38,6 @@ func (s *Mode) Start() {
soloAgent := New(
s.indiServerAddr,
soloClient,
- s.ccdDrivers,
)
go func() {
diff --git a/solo/solo.go b/solo/solo.go
index a7da9da..7d79a1c 100644
--- a/solo/solo.go
+++ b/solo/solo.go
@@ -18,8 +18,8 @@ var (
getProperties = []byte("")
enableBLOB = "Also"
- setBLOBVector = []byte("