From 73571c923af390f35eb28e2d52dea0d95e6a1284 Mon Sep 17 00:00:00 2001 From: mapleafgo Date: Mon, 23 Dec 2024 14:18:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=8F=91=E5=8D=A1=E5=85=B3?= =?UTF-8?q?=E5=8D=A1=E5=85=A8=E9=83=A8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.yml | 5 +- config/game/push_card.go | 1 - demo/relay/main.go | 2 +- .../routes/play/card_pusher/line_group.go | 4 +- internal/routes/play/push_card.go | 70 +++++++++++-------- 5 files changed, 46 insertions(+), 36 deletions(-) diff --git a/config.yml b/config.yml index 469ab3c..40ee209 100755 --- a/config.yml +++ b/config.yml @@ -22,6 +22,7 @@ game: # addr: /dev/ttyUSB0 # 点位 5 的串口地址 pushGroups: # 点位 4 的发卡器配置 - name: gpiochip0 + read: /dev/ttyUSB0 outOK: 21 lower: 20 error: 16 @@ -30,11 +31,11 @@ game: reset: 19 pull: 26 - name: gpiochip0 + read: /dev/ttyUSB0 outOK: 7 lower: 8 error: 25 empty: 24 push: 10 reset: 9 - pull: 11 - readAddr: /dev/ttyUSB0 # 点位 4 的读卡器配置 \ No newline at end of file + pull: 11 \ No newline at end of file diff --git a/config/game/push_card.go b/config/game/push_card.go index 169fd7a..39c6a68 100644 --- a/config/game/push_card.go +++ b/config/game/push_card.go @@ -4,5 +4,4 @@ import "game-driver/internal/routes/play/card_pusher" type ConfigPush struct { PushGroups []*card_pusher.LineGroup - ReadAddr string } diff --git a/demo/relay/main.go b/demo/relay/main.go index 4d22735..b8e642d 100644 --- a/demo/relay/main.go +++ b/demo/relay/main.go @@ -14,7 +14,7 @@ func main() { logger.DefaultLogger() defer logger.Sync() - r, err := relay.New("/dev/ttyUSB0") + r, err := relay.New("/dev/ttyACM0") if err != nil { zap.S().Panicln(err) } diff --git a/internal/routes/play/card_pusher/line_group.go b/internal/routes/play/card_pusher/line_group.go index caef059..c659f0b 100644 --- a/internal/routes/play/card_pusher/line_group.go +++ b/internal/routes/play/card_pusher/line_group.go @@ -1,7 +1,9 @@ package card_pusher type LineGroup struct { - Name string + Name string + Read string + OutOK int Lower int Error int diff --git a/internal/routes/play/push_card.go b/internal/routes/play/push_card.go index 1225fa2..bee0eb2 100644 --- a/internal/routes/play/push_card.go +++ b/internal/routes/play/push_card.go @@ -30,45 +30,53 @@ type ResponseBody struct { func PushCard(ctx context.Context) leaf.HandlerFunc { g := (game.G).(game.ConfigPush) - // 开始初始化读卡器 - reader, err := card_reader.NewReader(g.ReadAddr) - 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) + readers := make([]card_reader.Reader, len(g.PushGroups)) + devices := make([]*card_pusher.Device, len(g.PushGroups)) for i, group := range g.PushGroups { - // 对读卡器初始化配置 - reader.SetSlave(byte(i + 1)) - err = reader.Init() - if err != nil { - zap.S().Panicln("读卡器初始配置失败", err) + // 解析配置 + gv, _ := json.Marshal(group) + zap.S().Info("关卡配置:", string(gv)) + + // 开始连接读卡器 + 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) if err != nil { zap.S().Panicln("初始化发卡器失败: ", err) } - devices = append(devices, device) + + // 保存读卡器和发卡器 + devices[i] = device } go func() { <-ctx.Done() + for _, reader := range readers { + if reader != nil { + _ = reader.Close() + } + } 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() { if body.num != 0 { // 若卡片就位,读取卡片信息 - if devices[body.num-1].GetOutOk() == 1 { - reader.SetSlave(byte(body.num)) - if info := reader.GetCardInfo(); info != nil { + if devices[body.num-1].GetOutOk() == 1 && readers[body.num-1] != nil { + if info := readers[body.num-1].GetCardInfo(); info != nil { body.CardId = info.ID } } + body.OutOk += devices[body.num-1].GetOutOk() } publishBody(ctx, c.Properties.ResponseTopic, body)