diff --git a/devices/geiger/geiger.go b/devices/geiger/geiger.go index b1b2af4b7cf3fd7ef2b6af89a1b0526f7819e0fc..d04835a2bb067da65c48aebd3f495b2e717fe992 100644 --- a/devices/geiger/geiger.go +++ b/devices/geiger/geiger.go @@ -34,7 +34,10 @@ type Counter interface { GetConfiguration() SetConfiguration() ResetConfiguration() - SetTime(t time.Time) + SetTime(time.Time) + GetTime() (time.Time, error) + FactoryReset() + Reboot() } // Config contain the configuration for a Geiger Counter diff --git a/devices/geiger/gqgmc.go b/devices/geiger/gqgmc.go index b7712f78f0be348c35a9ab2b92e9d4f085688d55..37f8f08ef590452e34c59c700891e476d52d9087 100644 --- a/devices/geiger/gqgmc.go +++ b/devices/geiger/gqgmc.go @@ -103,17 +103,20 @@ const ( ) const ( - cmdGetSerial = "<GETSERIAL>>" - cmdGetVersion = "<GETVER>>" - cmdGetVoltage = "<GETVOLT>>" - cmdGetCPM = "<GETCPM>>" - cmdGetCPS = "<GETCPS>>" - cmdGetCfg = "<GETCFG>>" - cmdEraseCfg = "<ECFG>>" - cmdUpdateCfg = "<CFGUPDATE>>" - cmdTurnOnCPS = "<HEARTBEAT1>>" - cmdTurnOffCPS = "<HEARTBEAT0>>" - cmdTurnOffPwr = "<POWEROFF>>" + cmdGetSerial = "<GETSERIAL>>" + cmdGetVersion = "<GETVER>>" + cmdGetVoltage = "<GETVOLT>>" + cmdGetCPM = "<GETCPM>>" + cmdGetCPS = "<GETCPS>>" + cmdGetCfg = "<GETCFG>>" + cmdEraseCfg = "<ECFG>>" + cmdUpdateCfg = "<CFGUPDATE>>" + cmdTurnOnCPS = "<HEARTBEAT1>>" + cmdTurnOffCPS = "<HEARTBEAT0>>" + cmdTurnOffPwr = "<POWEROFF>>" + cmdFactoryReset = "<FACTORYRESET>>" + cmdReboot = "<REBOOT>>" + cmdGetTime = "<GETDATETIME>>" ) // GQGMCCounter is a GQ GMC Counter @@ -275,6 +278,9 @@ func (gc *GQGMCCounter) ResetConfiguration() { // SetTime sets the time func (gc *GQGMCCounter) SetTime(t time.Time) { + //command: <SETDATETIME[YYMMDDHHMMSS]>> + //Firmware supported: GMC-280, GMC-300 Re.3.00 or later + cmd := make([]byte, 13) var timeCmds = []struct { cmd string @@ -297,6 +303,29 @@ func (gc *GQGMCCounter) SetTime(t time.Time) { } } +// GetTime gets the time +func (gc *GQGMCCounter) GetTime() (time.Time, error) { + b, err := gc.communicate(cmdGetTime, 7) + if err != nil { + return time.Unix(0, 0), err + } + t := time.Date(int(b[0])+2000, time.Month(b[1]), int(b[2]), + int(b[3]), int(b[4]), int(b[5]), 0, nil) + return t, nil +} + +// FactoryReset does a factory reset +func (gc *GQGMCCounter) FactoryReset() { + gc.sendCmd(cmdFactoryReset) + return +} + +// Reboot reboots the device +func (gc *GQGMCCounter) Reboot() { + gc.sendCmd(cmdReboot) + return +} + func (gc *GQGMCCounter) communicate(cmd string, length uint32) ([]byte, error) { gc.Clear() if len(cmd) > 0 {