GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

bricknil.bleak_interface   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 88
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 42
dl 0
loc 88
rs 10
c 0
b 0
f 0
wmc 11

3 Methods

Rating   Name   Duplication   Size   Complexity  
A Bleak.__init__() 0 6 1
A Bleak.run() 0 5 1
C Bleak.asyncio_loop() 0 34 9
1
# Copyright 2019 Virantha N. Ekanayake 
2
# 
3
# Licensed under the Apache License, Version 2.0 (the "License");
4
# you may not use this file except in compliance with the License.
5
# You may obtain a copy of the License at
6
# 
7
# http://www.apache.org/licenses/LICENSE-2.0
8
# 
9
# Unless required by applicable law or agreed to in writing, software
10
# distributed under the License is distributed on an "AS IS" BASIS,
11
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
# See the License for the specific language governing permissions and
13
# limitations under the License.
14
15
"""Interface to the BLEAK library in Linux for BLE calls
16
17
"""
18
import curio, asyncio, threading, logging
19
20
import bleak
21
#from bleak import BleakClient
22
23
class Bleak:
24
    """Interface class between curio loop and asyncio loop running bleak
25
       
26
       This class is basically just a queue interface.  It has two queue, 
27
       one for incoming messages `in_queue` and one for outgoing messages `out_queue`.
28
29
       A loop running in asyncio's event_loop waits for messages on the `in_queue`.
30
31
       The `out_queue` is used to respond to "discover" and "connect" messages with the
32
       list of discovered devices and a connected device respectively.  All messages
33
       incoming from a device are relayed directly to a call back function, and does
34
       not go through either of these queues.
35
36
37
    """
38
39
    def __init__(self):
40
        # Need to start an event loop
41
        self.in_queue = curio.UniversalQueue()  # Incoming message queue
42
        self.out_queue = curio.UniversalQueue()  # Outgoing message queue
43
44
        self.devices = []
45
        #self.loop = threading.Thread(target=self.run, daemon=True)
46
        #self.loop.start()
47
48
    def run(self):
49
        #self.loop = asyncio.new_event_loop()
50
        #asyncio.set_event_loop(self.loop)
51
        self.loop = asyncio.get_event_loop()
52
        self.loop.run_until_complete(self.asyncio_loop())
53
54
    async def asyncio_loop(self):
55
56
        # Wait for messages on in_queue
57
        done = False
58
        while not done:
59
            msg = await self.in_queue.get()
60
            if isinstance(msg, tuple):
61
                msg, val = msg
62
            await self.in_queue.task_done()
63
            if msg == 'discover':
64
                print('Awaiting on bleak discover')
65
                devices = await bleak.discover(timeout=1, loop=self.loop)
66
                print('Done Awaiting on bleak discover')
67
                await self.out_queue.put(devices)
68
            elif msg == 'connect':
69
                device = bleak.BleakClient(address=val, loop=self.loop)
0 ignored issues
show
introduced by
The variable val does not seem to be defined for all execution paths.
Loading history...
70
                self.devices.append(device)
71
                await device.connect()
72
                await self.out_queue.put(device)
73
            elif msg == 'tx':
74
                device, char_uuid, msg_bytes = val
75
                await device.write_gatt_char(char_uuid, msg_bytes)
76
            elif msg == 'notify':
77
                device, char_uuid, msg_handler = val
78
                await device.start_notify(char_uuid, msg_handler)
79
            elif msg =='quit':
80
                print("quitting")
81
                logging.info('quitting')
82
                for device in self.devices:
83
                    await device.disconnect()
84
                done = True
85
                print("quit")
86
            else:
87
                print(f'Unknown message to Bleak: {msg}')
88
89
90
91
    
92