You've already forked Microtransactions64-server
mirror of
https://github.com/Print-and-Panic/Microtransactions64-server.git
synced 2026-01-21 10:17:31 -08:00
97 lines
1.3 KiB
Go
97 lines
1.3 KiB
Go
package devices
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"go.bug.st/serial"
|
|
)
|
|
|
|
type Coin int
|
|
|
|
func (c Coin) Value() int {
|
|
return int(c)
|
|
}
|
|
|
|
func (c Coin) String() string {
|
|
switch c {
|
|
case Quarter:
|
|
return "Quarter (25c)"
|
|
case Dime:
|
|
return "Dime (10c)"
|
|
case Nickel:
|
|
return "Nickel (5c)"
|
|
case Penny:
|
|
return "Penny (1c)"
|
|
default:
|
|
return fmt.Sprintf("Unknown Coin (%d)", c)
|
|
}
|
|
}
|
|
|
|
const (
|
|
Quarter Coin = 25
|
|
Dime Coin = 10
|
|
Nickel Coin = 5
|
|
Penny Coin = 1
|
|
)
|
|
|
|
type CoinAcceptor interface {
|
|
Start() error
|
|
Close() error
|
|
Coins() <-chan Coin
|
|
}
|
|
|
|
type DG600F struct {
|
|
PortName string
|
|
BaudRate int
|
|
coins chan Coin
|
|
port serial.Port
|
|
}
|
|
|
|
func (c *DG600F) Start() error {
|
|
mode := &serial.Mode{
|
|
BaudRate: c.BaudRate,
|
|
DataBits: 8,
|
|
Parity: serial.EvenParity,
|
|
StopBits: serial.TwoStopBits,
|
|
}
|
|
|
|
port, err := serial.Open(c.PortName, mode)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
c.port = port
|
|
c.coins = make(chan Coin, 10)
|
|
log.Println("Coin acceptor started")
|
|
|
|
go c.listen()
|
|
|
|
return nil
|
|
}
|
|
|
|
func (c *DG600F) listen() {
|
|
for {
|
|
data := make([]byte, 1)
|
|
_, err := c.port.Read(data)
|
|
if err != nil {
|
|
log.Println("Error reading from port:", err)
|
|
return
|
|
}
|
|
|
|
if data[0] == 0x00 {
|
|
continue
|
|
}
|
|
|
|
c.coins <- Coin(data[0])
|
|
}
|
|
}
|
|
|
|
func (c *DG600F) Close() error {
|
|
return c.port.Close()
|
|
}
|
|
|
|
func (c *DG600F) Coins() <-chan Coin {
|
|
return c.coins
|
|
}
|