首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法看看蓝牙SPP扫描仪是否睡着了?

有没有办法看看蓝牙SPP扫描仪是否睡着了?
EN

Stack Overflow用户
提问于 2019-09-12 12:47:30
回答 1查看 218关注 0票数 0

我得从蓝牙SPP扫描仪上捕捉条形码。我可以打开com端口并捕捉所有扫描,但是2分钟后扫描仪就会休眠。当扫描器醒来时,它不再连接,但com端口仍然打开。我需要一种方法来找出,如果扫描器仍然连接,或去睡觉和关闭/重新打开com端口时,扫描仪再次醒来。

我将扫描仪与win10中的pc配对,这将创建一个输入com端口(com4)。我可以打开那个端口听留言。问题是,扫描仪只使用单向通信,似乎它没有发送任何东西说“我现在断开”,它只是去睡觉和断开连接。有没有任何方法可以看到扫描仪仍然连接,或去睡觉,或有什么可连接的东西?扫描仪是WASP WWS550i。

代码语言:javascript
运行
复制
        _serialPort = New SerialPort(PortName, BaudRate, Parity.None, 8, StopBits.One)
        _serialPort.PortName = PortName
        _serialPort.Parity = Parity.None
        _serialPort.DataBits = 8
        _serialPort.BaudRate = BaudRate
        _serialPort.StopBits = StopBits.One

        AddHandler _serialPort.DataReceived, AddressOf sp_DataReceived

        _serialPort.Open()

Private Sub sp_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs)
    _LastDataReceived = _serialPort.ReadLine()
End Sub
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-30 12:13:06

我对Pos平板扫描仪也有同样的问题。ASP.CORE 3员工服务

我在醒来后重新打开串口解决了这个问题。另外,如果我试图重新打开端口,端口会说端口不可用,因为端口没有正确关闭(dispose)。

我的解决方案

我写了1秒的检查程序,检查端口是否仍然打开。如果不是,则对前一个串口实例调用close(),然后重新打开端口。

现在我可以在醒来后扫描了。

代码语言:javascript
运行
复制
public class Worker : BackgroundService
    {
        private static SerialPort SERIAL_PORT;

        // constructor DI

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {

        }

        public override Task StartAsync(CancellationToken cancellationToken)
        {
            // create serial port connection
            _logger.LogInformation($"-- open serial port {PORT_NAME}");

            SERIAL_PORT = SerialPortFactory.Create(PORT_NAME);
            SERIAL_PORT.Open();

            _logger.LogInformation($"-- serial port {PORT_NAME} opened");

            Task.Run(() => Checker(_logger)); // run port checker on another thread

            return base.StartAsync(cancellationToken);
        }

        public override Task StopAsync(CancellationToken cancellationToken)
        {
            SERIAL_PORT.Close();
            return base.StopAsync(cancellationToken);
        }

        public static void Checker(ILogger<Worker> _logger)
        {
            for (;;)
            {
                _logger.LogInformation("Sleep for 1 second!");
                Thread.Sleep(1000);
                try
                {
                    _logger.LogInformation(SERIAL_PORT.IsOpen.ToString());
                    if(!SERIAL_PORT.IsOpen)
                    {
                        SERIAL_PORT.Close();
                        Thread.Sleep(100); // is not necessary but ...

                        SERIAL_PORT = SerialPortFactory.Create(PORT_NAME);
                        SERIAL_PORT.Open();

                        _logger.LogInformation($"-- serial port {PORT_NAME} opened");
                    }
                } catch(Exception e)
                {
                    _logger.LogError(e.Message);
                }
            }
        }
    }

SerialPortFactory

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57907084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档