From fcb75cb5a4e987b2514242019299a6886e47298d Mon Sep 17 00:00:00 2001 From: Shiro-Nek0 Date: Sun, 1 Mar 2026 02:21:17 -0300 Subject: [PATCH] settings file for scanner --- ScannerGO/build.sh | 31 +++++++++++++++++ ScannerGO/main.go | 85 ++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 102 insertions(+), 14 deletions(-) create mode 100755 ScannerGO/build.sh diff --git a/ScannerGO/build.sh b/ScannerGO/build.sh new file mode 100755 index 0000000..63d08ce --- /dev/null +++ b/ScannerGO/build.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Define binary names +LINUX_BIN="ScannerGO-linux" +WINDOWS_BIN="ScannerGO-windows.exe" + +echo "Starting build process..." + +# Build for Linux (64-bit) +echo "Building for Linux..." +GOOS=linux GOARCH=amd64 go build -o "$LINUX_BIN" main.go + +if [ $? -eq 0 ]; then + echo "Successfully built: $LINUX_BIN" +else + echo "Failed to build Linux binary" + exit 1 +fi + +# Build for Windows (64-bit) +echo "Building for Windows..." +GOOS=windows GOARCH=amd64 go build -o "$WINDOWS_BIN" main.go + +if [ $? -eq 0 ]; then + echo "Successfully built: $WINDOWS_BIN" +else + echo "Failed to build Windows binary" + exit 1 +fi + +echo "Build complete." diff --git a/ScannerGO/main.go b/ScannerGO/main.go index 2e84e1f..9dbc4f9 100644 --- a/ScannerGO/main.go +++ b/ScannerGO/main.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "flag" "fmt" "io" @@ -13,27 +14,53 @@ import ( "github.com/tarm/serial" ) +type Config struct { + Port string `json:"port"` + URL string `json:"url"` + BaudRate int `json:"baud"` +} + +var defaultConfig = Config{ + Port: "/dev/ttyACM0", + URL: "https://scanner.sekidesu.xyz/scan", + BaudRate: 115200, +} + +const configPath = "config.json" + func main() { - portName := flag.String("port", "/dev/ttyACM0", "Serial port name") - endpoint := flag.String("url", "https://scanner.sekidesu.xyz/scan", "Target URL endpoint") - baudRate := flag.Int("baud", 115200, "Baud rate") + cfg := loadConfig() + + portName := flag.String("port", cfg.Port, "Serial port name") + endpoint := flag.String("url", cfg.URL, "Target URL endpoint") + baudRate := flag.Int("baud", cfg.BaudRate, "Baud rate") + save := flag.Bool("save", false, "Save current parameters to config.json") flag.Parse() - config := &serial.Config{ - Name: *portName, - Baud: *baudRate, + cfg.Port = *portName + cfg.URL = *endpoint + cfg.BaudRate = *baudRate + + if *save { + saveConfig(cfg) + fmt.Println("Settings saved to", configPath) + } + + serialConfig := &serial.Config{ + Name: cfg.Port, + Baud: cfg.BaudRate, ReadTimeout: time.Second * 2, } - port, err := serial.OpenPort(config) + port, err := serial.OpenPort(serialConfig) if err != nil { - fmt.Printf("Error opening port %s: %v\n", *portName, err) + fmt.Printf("Error opening port %s: %v\n", cfg.Port, err) os.Exit(1) } defer port.Close() - fmt.Printf("Listening on %s (Baud: %d)...\n", *portName, *baudRate) - fmt.Printf("Sending data to: %s\n", *endpoint) + fmt.Printf("Listening on %s (Baud: %d)...\n", cfg.Port, cfg.BaudRate) + fmt.Printf("Sending data to: %s\n", cfg.URL) buf := make([]byte, 128) for { @@ -48,25 +75,55 @@ func main() { if n > 0 { content := strings.TrimSpace(string(buf[:n])) if content != "" { - sendToEndpoint(*endpoint, content) + sendToEndpoint(cfg.URL, content) } } } } +func loadConfig() Config { + if _, err := os.Stat(configPath); os.IsNotExist(err) { + saveConfig(defaultConfig) + return defaultConfig + } + + file, err := os.Open(configPath) + if err != nil { + return defaultConfig + } + defer file.Close() + + var cfg Config + decoder := json.NewDecoder(file) + if err := decoder.Decode(&cfg); err != nil { + return defaultConfig + } + return cfg +} + +func saveConfig(cfg Config) { + file, err := os.Create(configPath) + if err != nil { + fmt.Printf("Failed to create/save config: %v\n", err) + return + } + defer file.Close() + + encoder := json.NewEncoder(file) + encoder.SetIndent("", " ") + encoder.Encode(cfg) +} + func sendToEndpoint(baseURL, content string) { client := &http.Client{ Timeout: 5 * time.Second, } - fullURL := fmt.Sprintf("%s?content=%s", baseURL, url.QueryEscape(content)) - resp, err := client.Get(fullURL) if err != nil { fmt.Printf("Network Error: %v\n", err) return } defer resp.Body.Close() - fmt.Printf("Data: [%s] | Status: %s\n", content, resp.Status) }