|
@@ -9,31 +9,69 @@ package main
|
|
|
|
|
|
import (
|
|
|
"flag"
|
|
|
+ "log"
|
|
|
+ "net/http"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
+
|
|
|
"imuslab.com/hds/audio/mod/mdns"
|
|
|
)
|
|
|
|
|
|
var (
|
|
|
- port = flag.Int("port", 12110)
|
|
|
- MDNS mdns.MDNSHost
|
|
|
+ port = flag.Int("port", 12110, "The port for the HDS device API")
|
|
|
+ MDNS *mdns.MDNSHost
|
|
|
+ deviceStatus *Status
|
|
|
+ deviceUUID = ""
|
|
|
)
|
|
|
|
|
|
-func main(){
|
|
|
- //Start the MDNS broadcast
|
|
|
- macAddr, _ := getMacAddr(port);
|
|
|
+func main() {
|
|
|
+ //Parse flag
|
|
|
+ flag.Parse()
|
|
|
+
|
|
|
+ //Get system UUID by MAC addr
|
|
|
+ macAddr, _ := getMacAddr()
|
|
|
+ if len(macAddr) > 0 {
|
|
|
+ deviceUUID = strings.ReplaceAll(macAddr[0], ":", "-")
|
|
|
+ } else {
|
|
|
+ //Just generate one randomly
|
|
|
+ deviceUUID = strconv.Itoa(int(time.Now().Unix()))
|
|
|
+ }
|
|
|
|
|
|
- MDNS, err = mdns.NewMDNS(port, macAddr[0])
|
|
|
- if err != nil{
|
|
|
+ //Start MDNS broadcast
|
|
|
+ hostController, err := mdns.NewMDNS(mdns.NetworkHost{
|
|
|
+ HostName: "hdsAudio_" + deviceUUID,
|
|
|
+ Port: *port,
|
|
|
+ Domain: "hds.arozos.com",
|
|
|
+ Model: "Audio Device",
|
|
|
+ UUID: deviceUUID,
|
|
|
+ Vendor: "Home Dynamic Project",
|
|
|
+ BuildVersion: "1.0",
|
|
|
+ MinorVersion: "0.00",
|
|
|
+ })
|
|
|
+ if err != nil {
|
|
|
panic(err)
|
|
|
}
|
|
|
|
|
|
+ MDNS = hostController
|
|
|
+
|
|
|
+ //Create a new status objecty
|
|
|
+ currentStatus := Status{
|
|
|
+ Playing: false,
|
|
|
+ Status: "ready",
|
|
|
+ }
|
|
|
+
|
|
|
+ deviceStatus = ¤tStatus
|
|
|
+
|
|
|
//Register all required APIs for HDSv2
|
|
|
- http.HandleFunc("/", handleIndex);
|
|
|
- http.HandleFunc("/status", handleStatus);
|
|
|
- http.HandleFunc("/eps", handleEndpoints);
|
|
|
+ http.HandleFunc("/", handleIndex)
|
|
|
+ http.HandleFunc("/status", handleStatus)
|
|
|
+ http.HandleFunc("/eps", handleEndpoints)
|
|
|
|
|
|
//Start web server
|
|
|
+ log.Println("Web API Started on port ", *port)
|
|
|
err = http.ListenAndServe(":"+strconv.Itoa(*port), nil)
|
|
|
- if err != nil{
|
|
|
+ if err != nil {
|
|
|
panic(err)
|
|
|
}
|
|
|
-}
|
|
|
+}
|