Merge branch 'refs/heads/main' into clean_beep
This commit is contained in:
@@ -22,6 +22,7 @@ game:
|
|||||||
# addr: /dev/ttyUSB0 # 点位 5 的串口地址
|
# addr: /dev/ttyUSB0 # 点位 5 的串口地址
|
||||||
pushGroups: # 点位 4 的发卡器配置
|
pushGroups: # 点位 4 的发卡器配置
|
||||||
- name: gpiochip0
|
- name: gpiochip0
|
||||||
|
read: /dev/ttyUSB0
|
||||||
outOK: 21
|
outOK: 21
|
||||||
lower: 20
|
lower: 20
|
||||||
error: 16
|
error: 16
|
||||||
@@ -30,6 +31,7 @@ game:
|
|||||||
reset: 19
|
reset: 19
|
||||||
pull: 26
|
pull: 26
|
||||||
- name: gpiochip0
|
- name: gpiochip0
|
||||||
|
read: /dev/ttyUSB0
|
||||||
outOK: 7
|
outOK: 7
|
||||||
lower: 8
|
lower: 8
|
||||||
error: 25
|
error: 25
|
||||||
@@ -37,4 +39,3 @@ game:
|
|||||||
push: 10
|
push: 10
|
||||||
reset: 9
|
reset: 9
|
||||||
pull: 11
|
pull: 11
|
||||||
readAddr: /dev/ttyUSB0 # 点位 4 的读卡器配置
|
|
||||||
@@ -4,5 +4,4 @@ import "game-driver/internal/routes/play/card_pusher"
|
|||||||
|
|
||||||
type ConfigPush struct {
|
type ConfigPush struct {
|
||||||
PushGroups []*card_pusher.LineGroup
|
PushGroups []*card_pusher.LineGroup
|
||||||
ReadAddr string
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ func main() {
|
|||||||
logger.DefaultLogger()
|
logger.DefaultLogger()
|
||||||
defer logger.Sync()
|
defer logger.Sync()
|
||||||
|
|
||||||
r, err := relay.New("/dev/ttyUSB0")
|
r, err := relay.New("/dev/ttyACM0")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
zap.S().Panicln(err)
|
zap.S().Panicln(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
package card_pusher
|
package card_pusher
|
||||||
|
|
||||||
type LineGroup struct {
|
type LineGroup struct {
|
||||||
Name string
|
Name string
|
||||||
|
Read string
|
||||||
|
|
||||||
OutOK int
|
OutOK int
|
||||||
Lower int
|
Lower int
|
||||||
Error int
|
Error int
|
||||||
|
|||||||
@@ -30,45 +30,53 @@ type ResponseBody struct {
|
|||||||
func PushCard(ctx context.Context) leaf.HandlerFunc {
|
func PushCard(ctx context.Context) leaf.HandlerFunc {
|
||||||
g := (game.G).(game.ConfigPush)
|
g := (game.G).(game.ConfigPush)
|
||||||
|
|
||||||
// 开始初始化读卡器
|
readers := make([]card_reader.Reader, len(g.PushGroups))
|
||||||
reader, err := card_reader.NewReader(g.ReadAddr)
|
devices := make([]*card_pusher.Device, len(g.PushGroups))
|
||||||
if err != nil {
|
|
||||||
if errors.Is(err, fs.ErrNotExist) {
|
|
||||||
zap.S().Errorf("读卡器串口文件不存在: %s", g.ReadAddr)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
zap.S().Panicf("读卡器串口连接失败 [%T]: %q", err, err)
|
|
||||||
}
|
|
||||||
go func() {
|
|
||||||
<-ctx.Done()
|
|
||||||
_ = reader.Close()
|
|
||||||
}()
|
|
||||||
|
|
||||||
// 开始初始化发卡器
|
|
||||||
devices := make([]*card_pusher.Device, 0)
|
|
||||||
for i, group := range g.PushGroups {
|
for i, group := range g.PushGroups {
|
||||||
// 对读卡器初始化配置
|
// 解析配置
|
||||||
reader.SetSlave(byte(i + 1))
|
gv, _ := json.Marshal(group)
|
||||||
err = reader.Init()
|
zap.S().Info("关卡配置:", string(gv))
|
||||||
if err != nil {
|
|
||||||
zap.S().Panicln("读卡器初始配置失败", err)
|
// 开始连接读卡器
|
||||||
|
if group.Read != "" {
|
||||||
|
reader, err := card_reader.NewReader(group.Read)
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, fs.ErrNotExist) {
|
||||||
|
zap.S().Errorf("读卡器串口文件不存在: %s", group.Read)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
zap.S().Panicf("读卡器串口 %q 连接失败 [%T]: %q", group.Read, err, err)
|
||||||
|
}
|
||||||
|
// 初始化读卡器
|
||||||
|
err = reader.Init()
|
||||||
|
if err != nil {
|
||||||
|
reader.Close()
|
||||||
|
zap.S().Panicf("读卡器 %q 初始配置失败: %s", group.Read, err)
|
||||||
|
}
|
||||||
|
// 保存读卡器
|
||||||
|
readers[i] = reader
|
||||||
}
|
}
|
||||||
|
|
||||||
// 解析发卡器配置
|
// 开始连接发卡器
|
||||||
gv, _ := json.Marshal(group)
|
|
||||||
zap.S().Info("发卡器指针:", string(gv))
|
|
||||||
|
|
||||||
// 初始化发卡器
|
|
||||||
device, err := card_pusher.New(group)
|
device, err := card_pusher.New(group)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
zap.S().Panicln("初始化发卡器失败: ", err)
|
zap.S().Panicln("初始化发卡器失败: ", err)
|
||||||
}
|
}
|
||||||
devices = append(devices, device)
|
|
||||||
|
// 保存读卡器和发卡器
|
||||||
|
devices[i] = device
|
||||||
}
|
}
|
||||||
go func() {
|
go func() {
|
||||||
<-ctx.Done()
|
<-ctx.Done()
|
||||||
|
for _, reader := range readers {
|
||||||
|
if reader != nil {
|
||||||
|
_ = reader.Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
for _, device := range devices {
|
for _, device := range devices {
|
||||||
device.Close()
|
if device != nil {
|
||||||
|
_ = device.Close()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@@ -113,12 +121,12 @@ func PushCard(ctx context.Context) leaf.HandlerFunc {
|
|||||||
time.AfterFunc(time.Second, func() {
|
time.AfterFunc(time.Second, func() {
|
||||||
if body.num != 0 {
|
if body.num != 0 {
|
||||||
// 若卡片就位,读取卡片信息
|
// 若卡片就位,读取卡片信息
|
||||||
if devices[body.num-1].GetOutOk() == 1 {
|
if devices[body.num-1].GetOutOk() == 1 && readers[body.num-1] != nil {
|
||||||
reader.SetSlave(byte(body.num))
|
if info := readers[body.num-1].GetCardInfo(); info != nil {
|
||||||
if info := reader.GetCardInfo(); info != nil {
|
|
||||||
body.CardId = info.ID
|
body.CardId = info.ID
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
body.OutOk += devices[body.num-1].GetOutOk()
|
body.OutOk += devices[body.num-1].GetOutOk()
|
||||||
}
|
}
|
||||||
publishBody(ctx, c.Properties.ResponseTopic, body)
|
publishBody(ctx, c.Properties.ResponseTopic, body)
|
||||||
|
|||||||
Reference in New Issue
Block a user