Refactor client into separate files
Add a main loop, move I/O code into io.go, move configuration into config.go. Use shared.Decode24BitLength instead of manually decoding block lengths. Fix response block decoding and checksum validation. Add constants for commonly used byte values and use these in the signer and the client.
This commit is contained in:
parent
65855152ce
commit
42d1e6e991
8 changed files with 322 additions and 241 deletions
84
client/config.go
Normal file
84
client/config.go
Normal file
|
@ -0,0 +1,84 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"time"
|
||||
|
||||
"github.com/goburrow/serial"
|
||||
"github.com/sirupsen/logrus"
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
type SerialConfig struct {
|
||||
Address string `yaml:"address"`
|
||||
BaudRate int `yaml:"baudrate"`
|
||||
DataBits int `yaml:"databits"`
|
||||
StopBits int `yaml:"stopbits"`
|
||||
Parity string `yaml:"parity"`
|
||||
}
|
||||
|
||||
type ClientConfig struct {
|
||||
Serial SerialConfig `yaml:"serial_config"`
|
||||
Paranoid bool `yaml:"paranoid"`
|
||||
Debug bool `yaml:"debug"`
|
||||
GNUPGBinary string `yaml:"gnupg_bin"`
|
||||
OpenSSLBinary string `yaml:"openssl_bin"`
|
||||
MySQLDSN string `yaml:"mysql_dsn"`
|
||||
}
|
||||
|
||||
var defaultConfig = ClientConfig{
|
||||
Serial: SerialConfig{
|
||||
Address: "/dev/ttyUSB0",
|
||||
BaudRate: 115200,
|
||||
DataBits: 8,
|
||||
StopBits: 1,
|
||||
Parity: "N",
|
||||
},
|
||||
Paranoid: false,
|
||||
Debug: false,
|
||||
OpenSSLBinary: "/usr/bin/openssl",
|
||||
GNUPGBinary: "/usr/bin/gpg",
|
||||
MySQLDSN: "<username>:<password>@/database?parseTime=true",
|
||||
}
|
||||
|
||||
func generateExampleConfig(configFile string) (config *ClientConfig, err error) {
|
||||
config = &defaultConfig
|
||||
configBytes, err := yaml.Marshal(config)
|
||||
if err != nil {
|
||||
logrus.Errorf("could not generate configuration data")
|
||||
return
|
||||
}
|
||||
|
||||
logrus.Infof("example data for %s:\n\n---\n%s\n", configFile, configBytes)
|
||||
return
|
||||
}
|
||||
|
||||
func readConfig(configFile string) (config *ClientConfig, err error) {
|
||||
source, err := ioutil.ReadFile(configFile)
|
||||
if err != nil {
|
||||
logrus.Errorf("opening configuration file failed: %v", err)
|
||||
if exampleConfig, err := generateExampleConfig(configFile); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
logrus.Info("starting with default config")
|
||||
return exampleConfig, nil
|
||||
}
|
||||
}
|
||||
if err := yaml.Unmarshal(source, &config); err != nil {
|
||||
return nil, fmt.Errorf("loading configuration file failed: %v", err)
|
||||
}
|
||||
|
||||
return config, nil
|
||||
}
|
||||
|
||||
func fillSerialConfig(clientConfig *ClientConfig) *serial.Config {
|
||||
return &serial.Config{
|
||||
Address: clientConfig.Serial.Address,
|
||||
BaudRate: clientConfig.Serial.BaudRate,
|
||||
DataBits: clientConfig.Serial.DataBits,
|
||||
StopBits: clientConfig.Serial.StopBits,
|
||||
Parity: clientConfig.Serial.Parity,
|
||||
Timeout: 30 * time.Second,
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue