From c5a09d9d7676b76ff0694a624af2a3916ae46460 Mon Sep 17 00:00:00 2001
From: Kevin Lyda <kevin@ie.suberic.net>
Date: Wed, 1 Feb 2017 11:35:23 +0000
Subject: [PATCH] Fixed serial.

---
 cmd/gqgmc/main.go        |  9 +--------
 cmd/gqgmcd/main.go       |  6 ++++--
 devices/geiger/geiger.go |  2 +-
 devices/geiger/gqgmc.go  | 40 ++++++++++++++++++----------------------
 4 files changed, 24 insertions(+), 33 deletions(-)

diff --git a/cmd/gqgmc/main.go b/cmd/gqgmc/main.go
index b440d91..50e051a 100644
--- a/cmd/gqgmc/main.go
+++ b/cmd/gqgmc/main.go
@@ -20,7 +20,6 @@ func main() {
 		cps, cpm uint16
 		volts    int16
 		temp     float64
-		ser      string
 		err      error
 		t        time.Time
 	)
@@ -57,13 +56,7 @@ func main() {
 
 	fmt.Printf("Version: %s\n", gc.Version())
 	fmt.Printf("Model: %s\n", gc.Model())
-
-	ser, err = gc.SerialNum()
-	if err != nil {
-		fmt.Printf("Serial failed: '%s'\n", err)
-		return
-	}
-	fmt.Printf("Serial: %s\n", ser)
+	fmt.Printf("Serial: %s\n", gc.Serial())
 
 	volts, err = gc.Volts()
 	if err != nil {
diff --git a/cmd/gqgmcd/main.go b/cmd/gqgmcd/main.go
index 47e73da..e6c448e 100644
--- a/cmd/gqgmcd/main.go
+++ b/cmd/gqgmcd/main.go
@@ -12,6 +12,7 @@ import (
 	"html/template"
 	"log"
 	"net/http"
+	"path"
 
 	"github.com/prometheus/client_golang/prometheus/promhttp"
 	"gitlab.com/lyda/gqgmc/devices/geiger"
@@ -20,6 +21,7 @@ import (
 var addr = flag.String("listen-address", ":8080", "Address for HTTP requests.")
 var device = flag.String("device", "/dev/gqgmc", "Device for Geiger Counter.")
 var model = flag.String("model", "gqgmc", "Model of Geiger Counter.")
+var templateDir = flag.String("template_dir", "templates", "Template directory.")
 
 type indexPage struct {
 	Model   string
@@ -34,7 +36,7 @@ var indexPg indexPage
 
 func indexHandler(w http.ResponseWriter, r *http.Request) {
 	indexPg.CPM, _ = gc.GetCPM()
-	t, err := template.ParseFiles("index.html")
+	t, err := template.ParseFiles(path.Join(*templateDir, "index.html"))
 	if err != nil {
 		log.Printf("Template error: %s\n", err)
 	}
@@ -47,7 +49,7 @@ func main() {
 	gc, _ = geiger.New(geiger.Config{Model: *model, Device: *device})
 	indexPg.Model = gc.Model()
 	indexPg.Version = gc.Version()
-	indexPg.Serial, _ = gc.SerialNum()
+	indexPg.Serial = gc.Serial()
 	indexPg.Volts, _ = gc.Volts()
 	http.HandleFunc("/", indexHandler)
 	http.Handle("/metrics", promhttp.Handler())
diff --git a/devices/geiger/geiger.go b/devices/geiger/geiger.go
index af32bf3..27e2e2e 100644
--- a/devices/geiger/geiger.go
+++ b/devices/geiger/geiger.go
@@ -23,7 +23,7 @@ type Counter interface {
 	Clear() error
 	Model() string
 	Version() string
-	SerialNum() (string, error)
+	Serial() string
 	GetCPM() (uint16, error)
 	GetCPS() (uint16, error)
 	Volts() (int16, error)
diff --git a/devices/geiger/gqgmc.go b/devices/geiger/gqgmc.go
index e68b201..06e98af 100644
--- a/devices/geiger/gqgmc.go
+++ b/devices/geiger/gqgmc.go
@@ -8,6 +8,7 @@
 package geiger
 
 import (
+	"encoding/hex"
 	"errors"
 	"fmt"
 	"strconv"
@@ -52,13 +53,14 @@ type GQGMCCounter struct {
 	port   *serial.Port
 	config *serial.Config
 	version,
-	model string
+	model,
+	serial string
 }
 
 // NewGQGMC creates a new GQGMC Counter instance
 func NewGQGMC(c Config) (*GQGMCCounter, error) {
 	var gc GQGMCCounter
-	var v []byte
+	var buf []byte
 
 	gc.config = &serial.Config{
 		Name:        c.Device,
@@ -70,9 +72,17 @@ func NewGQGMC(c Config) (*GQGMCCounter, error) {
 		return nil, err
 	}
 	gc.port = p
-	v, err = gc.communicate(cmdGetVersion, 14)
-	gc.model = string(v[:7])
-	gc.version = string(v[7:])
+	buf, err = gc.communicate(cmdGetVersion, 14)
+	if err == nil {
+		gc.model = string(buf[:7])
+		gc.version = string(buf[7:])
+	}
+	if gc.supportedModels(mod280n300) && !gc.versionLT("Re 2.11") {
+		buf, err := gc.communicate(cmdGetSerial, 7)
+		if err == nil {
+			gc.serial = hex.EncodeToString(buf)
+		}
+	}
 	//getConfigurationData()
 	return &gc, nil
 }
@@ -99,23 +109,9 @@ func (gc *GQGMCCounter) Model() string {
 	return gc.model
 }
 
-// SerialNum gets the serial number of the device
-func (gc *GQGMCCounter) SerialNum() (string, error) {
-	if !gc.supportedModels(mod280n300) {
-		return "", errors.New("Unsupported model")
-	}
-	if gc.versionLT("Re 2.11") {
-		return "", errors.New("Unsupported version")
-	}
-
-	serStr := ""
-	ser, err := gc.communicate(cmdGetSerial, 7)
-	if err == nil {
-		for _, b := range ser {
-			serStr += fmt.Sprintf("%02X", b)
-		}
-	}
-	return serStr, err
+// Serial gets the serial number of the device
+func (gc *GQGMCCounter) Serial() string {
+	return gc.serial
 }
 
 func (gc *GQGMCCounter) getReading(what string) (uint16, error) {
-- 
GitLab