Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,12 @@ async def _():
logging.error("Timeout, retrying...")
await dglab_instance.create()
await dglab_instance.get_strength()
await dglab_instance.set_wave_sync(5, 95, 2, 5, 95, 2)
await dglab_instance.set_wave(20, 100, 2, model.ChannelA)
await dglab_instance.set_strength(50, 50)
await dglab_instance.set_strength_sync(1, 1)
await dglab_instance.set_wave_sync(0,0,0,0,0,0)
await dglab_instance.set_wave_set(model.Wave_set["Going_Faster"], model.ChannelA)
await dglab_instance.get_batterylevel()
await dglab_instance.get_strength()
await asyncio.sleep(2)
await dglab_instance.close()

asyncio.run(_())
28 changes: 14 additions & 14 deletions pydglab/bthandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,43 +26,43 @@ async def scan_():
return sorted(dglab_v2, key=lambda device: device[1])[0][0]


async def get_batterylevel_(client: BleakClient):
r = await client.read_gatt_char(CoyoteV2.characteristicBattery)
async def get_batterylevel_(client: BleakClient, characteristics: CoyoteV2 | CoyoteV3):
r = await client.read_gatt_char(characteristics.characteristicBattery)
return r


async def get_strength_(client: BleakClient):
r = await client.read_gatt_char(CoyoteV2.characteristicEStimPower)
async def get_strength_(client: BleakClient, characteristics: CoyoteV2 | CoyoteV3):
r = await client.read_gatt_char(characteristics.characteristicEStimPower)
r = BitArray(r).bin
return int(r[-11:], 2), int(r[-22:-11], 2)
return int(r[-11:], 2) / 7, int(r[-22:-11], 2) / 7


async def set_strength_(client: BleakClient, value: Coyote):
async def set_strength_(client: BleakClient, value: Coyote, characteristics: CoyoteV2 | CoyoteV3):
# Create a byte array with the strength values.
# The values are multiplied by 7 to convert them to the correct range.
binArray = '0b00'+'{0:011b}'.format(value.ChannelB.strength * 7)+'{0:011b}'.format(value.ChannelA.strength * 7)
array = bytearray(BitArray(bin=binArray).tobytes())

r = await client.write_gatt_char(CoyoteV2.characteristicEStimPower, array)
return r
r = await client.write_gatt_char(characteristics.characteristicEStimPower, array)
return value.ChannelB.strength * 7, value.ChannelA.strength * 7


async def set_wave_(client: BleakClient, value: ChannelA | ChannelB):
async def set_wave_(client: BleakClient, value: ChannelA | ChannelB, characteristics: CoyoteV2 | CoyoteV3):
# Create a byte array with the wave values.
binArray = '0b0000'+'{0:05b}'.format(value.waveZ)+'{0:010b}'.format(value.waveY)+'{0:05b}'.format(value.waveX)
array = bytearray(BitArray(bin=binArray).tobytes())

r = await client.write_gatt_char(CoyoteV2.characteristicEStimA if type(value) is ChannelA else CoyoteV2.characteristicEStimB, array)
return r
r = await client.write_gatt_char(characteristics.characteristicEStimA if type(value) is ChannelA else characteristics.characteristicEStimB, array)
return value.waveX, value.waveY, value.waveZ


async def set_wave_sync_(client: BleakClient, value: Coyote):
async def set_wave_sync_(client: BleakClient, value: Coyote, characteristics: CoyoteV2 | CoyoteV3):
# Create a byte array with the wave values.
binArrayA = '0b0000'+'{0:05b}'.format(value.ChannelA.waveZ)+'{0:010b}'.format(value.ChannelA.waveY)+'{0:05b}'.format(value.ChannelA.waveX)
arrayA = bytearray(BitArray(bin=binArrayA).tobytes())

binArrayB = '0b0000'+'{0:05b}'.format(value.ChannelB.waveZ)+'{0:010b}'.format(value.ChannelB.waveY)+'{0:05b}'.format(value.ChannelB.waveX)
arrayB = bytearray(BitArray(bin=binArrayB).tobytes())

r = await client.write_gatt_char(CoyoteV2.characteristicEStimA, arrayA), await client.write_gatt_char(CoyoteV2.characteristicEStimB, arrayB)
return r
r = await client.write_gatt_char(characteristics.characteristicEStimA, arrayA), await client.write_gatt_char(characteristics.characteristicEStimB, arrayB)
return (value.ChannelA.waveX, value.ChannelA.waveY, value.ChannelA.waveZ), (value.ChannelB.waveX, value.ChannelB.waveY, value.ChannelB.waveZ)
24 changes: 23 additions & 1 deletion pydglab/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,26 @@ class Coyote(object):
def __init__(self):
self.ChannelA: Optional[ChannelA] = ChannelA()
self.ChannelB: Optional[ChannelB] = ChannelB()
self.Battery: Optional[int] = None
self.Battery: Optional[int] = None


Wave_set = {
"Going_Faster": [
(5,135,20),
(5,125,20),
(5,115,20),
(5,105,20),
(5,95,20),
(4,86,20),
(4,76,20),
(4,66,20),
(3,57,20),
(3,47,20),
(3,37,20),
(2,28,20),
(2,18,20),
(1,14,20),
(1,9,20),
],

}
Loading