CobraV2/serial_read/main.go
foglar 11ba173218 serial read in monitor app
created new go package monitor,
prepared serial monitor sub-package,
sender_module, and reciever_module updated
2024-02-04 21:05:53 +01:00

150 lines
2.6 KiB
Go

package main
import (
"fmt"
"github.com/tarm/serial"
"log"
"os"
"strconv"
"time"
)
func portInput() string {
var port string
for true {
port = ""
fmt.Print("Enter port to listen on (for example - '/dev/ttyACM0'): ")
fmt.Scanln(&port)
if port == "" {
port = "/dev/ttyACM0"
}
_, err := os.Stat(port)
if !os.IsNotExist(err) {
break
} else {
fmt.Println("Invalid port")
}
}
return port
}
func baudrateInput() int {
var baudrate int
var s_baudrate string
fmt.Print("Enter baudrate (for example - '9600'): ")
fmt.Scanln(&s_baudrate)
baudrate = baudrateCheck(s_baudrate)
return baudrate
}
func baudrateCheck(s_baudrate string) int {
var baudrate int
switch s_baudrate {
case "4800":
baudrate = 4800
case "9600":
baudrate = 9600
case "115200":
baudrate = 115200
default:
baudrate = 9600
}
return baudrate
}
func UserInput() (string, int) {
port := portInput()
baudrate := baudrateInput()
return port, baudrate
}
func getTime() string {
return time.Now().Format("2006-1-2_15:4:5")
}
func main() {
args := os.Args[1:]
var port string
var baudrate int
// parsing command line arguments
if len(args) == 0 {
port, baudrate = UserInput()
} else {
i := 0
for i < len(args) {
if args[i] == "-p" && i+1 < len(args) {
port = args[i+1]
}
if args[i] == "-h" || args[i] == "--help" {
fmt.Println("-h, --help - prints this message")
fmt.Println("-p [port] - listens on port")
fmt.Println("-b [baudrate] - sets the baudrate")
fmt.Println("-d - runs the script with default values")
os.Exit(0)
}
if args[i] == "-b" && i+1 < len(args) {
var err error
baudrate, err = strconv.Atoi(args[i+1])
if err != nil {
fmt.Println("Invalid baudrate")
os.Exit(1)
}
}
if args[i] == "-d" {
port = "/dev/ACM0"
baudrate = 9600
}
i++
}
_, err := os.Stat(port)
if port == "" || os.IsNotExist(err) {
port = portInput()
}
if baudrate == 0 {
baudrate = baudrateInput()
}
}
// Listen on port
fmt.Printf("Listening on port %s with baudrate %d:\n", port, baudrate)
c := &serial.Config{Name: port, Baud: baudrate}
// Create file
filename := getTime() + ".txt"
f, err := os.Create(filename)
if err != nil {
log.Fatal(err)
}
defer f.Close()
// Open port
s, err := serial.OpenPort(c)
if err != nil {
log.Fatal(err)
}
var n int
for {
// create a buffer
buf := make([]byte, 254)
// Read length of serial input
n, err = s.Read(buf)
if err != nil {
log.Fatal(err)
}
// Print as a string
fmt.Print(string(buf[:n]))
f.WriteString(string(buf[:n]))
}
}