main.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package main
  2. /*
  3. HDS-Audio
  4. Author: tobychui
  5. Experimental HDS based iot device for Audio playback in local area network
  6. */
  7. import (
  8. "flag"
  9. "log"
  10. "net/http"
  11. "strconv"
  12. "strings"
  13. "time"
  14. "imuslab.com/hds/audio/mod/mdns"
  15. )
  16. var (
  17. port = flag.Int("port", 12110, "The port for the HDS device API")
  18. MDNS *mdns.MDNSHost
  19. deviceStatus *Status
  20. deviceUUID = ""
  21. )
  22. func main() {
  23. //Parse flag
  24. flag.Parse()
  25. //Get system UUID by MAC addr
  26. macAddr, _ := getMacAddr()
  27. if len(macAddr) > 0 {
  28. deviceUUID = strings.ReplaceAll(macAddr[0], ":", "-")
  29. } else {
  30. //Just generate one randomly
  31. deviceUUID = strconv.Itoa(int(time.Now().Unix()))
  32. }
  33. //Start MDNS broadcast
  34. hostController, err := mdns.NewMDNS(mdns.NetworkHost{
  35. HostName: "hdsAudio_" + deviceUUID,
  36. Port: *port,
  37. Domain: "hds.arozos.com",
  38. Model: "Audio Device",
  39. UUID: deviceUUID,
  40. Vendor: "Home Dynamic Project",
  41. BuildVersion: "1.0",
  42. MinorVersion: "0.00",
  43. })
  44. if err != nil {
  45. panic(err)
  46. }
  47. MDNS = hostController
  48. //Create a new status objecty
  49. currentStatus := Status{
  50. Playing: false,
  51. Status: "ready",
  52. }
  53. deviceStatus = &currentStatus
  54. //Register all required APIs for HDSv2
  55. http.HandleFunc("/", handleIndex)
  56. http.HandleFunc("/status", handleStatus)
  57. http.HandleFunc("/eps", handleEndpoints)
  58. //Start web server
  59. log.Println("Web API Started on port ", *port)
  60. err = http.ListenAndServe(":"+strconv.Itoa(*port), nil)
  61. if err != nil {
  62. panic(err)
  63. }
  64. }