Beispiel #1
0
async def _engine_fxn(q_cmd, q_ans, hooks):
    bs.check_bluez_version()

    uuid_c = hooks['uuid_c']
    cmd_tx_cb = hooks['cmd_cb']
    ans_rx_cb = hooks['ans_cb']
    nn = hooks['names']
    cli = None

    while 1:
        # dequeue external command
        be.g_cmd = q_cmd.get()

        # xmodem case apart :)
        if await be.engine_parse_xmodem(be.g_cmd):
            await _parse_command(cmd_tx_cb, ans_rx_cb, cli, q_ans)
            continue

        if await engine_parse_cmd_bye(be.g_cmd, cli, q_ans):
            break

        if await engine_parse_cmd_scan(be.g_cmd, nn, q_ans):
            continue

        if engine_parse_cmd_disconnect(be.g_cmd, q_ans):
            if cli:
                await cli.disconnect()
            cli = None
            continue

        if engine_parse_cmd_connect(be.g_cmd):
            mac = be.g_cmd.split()[1]
            cli = BleakClient(mac)
            if await cli.connect():
                cli._mtu_size = MAX_MTU_SIZE
                await asyncio.sleep(1.1)
                await cli.start_notify(uuid_c, _nh)
                q_ans.put(cli.address)
            else:
                cli = None
            continue

        await _parse_command(cmd_tx_cb, ans_rx_cb, cli, q_ans)