Skip to content

Commit 020bc41

Browse files
committed
✨ Add retrieve preset function
1 parent b8d57f5 commit 020bc41

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

ltamp/ltAmpAsync.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class LtAmpAsync(LtAmpBase):
2525
- request_firmware_version() request firmware version from amp
2626
- set_preset(idx) change preset slot
2727
- request_current_preset() ask amp for current preset (status event)
28+
retrieve_preset(idx) retrieve preset from amp (status event)
2829
- set_qa_slots(idx[]) set QA slots (footswitch assignments)
2930
- request_qa_slots() request QA slots from amp (status event)
3031
- audition_preset(preset_json) audition a preset
@@ -47,6 +48,7 @@ def __init__(self):
4748
self.loop = asyncio.get_event_loop()
4849
self._cs_event = asyncio.Event() # connection status
4950
self._fw_event = asyncio.Event() # firmware
51+
self._cps_event = asyncio.Event() # current preset
5052
self._ps_event = asyncio.Event() # preset
5153
self._qa_event = asyncio.Event() # quick access
5254
self._aud_event = asyncio.Event() # audition
@@ -74,14 +76,24 @@ async def request_connection_status(self):
7476

7577
async def request_current_preset(self):
7678
self._last_preset = None
77-
self._ps_event.clear()
79+
self._cps_event.clear()
7880
request_current_preset(self.device)
7981
try:
80-
await asyncio.wait_for(self._ps_event.wait(), timeout=self.timeout)
82+
await asyncio.wait_for(self._cps_event.wait(), timeout=self.timeout)
8183
return self._last_preset
8284
except asyncio.TimeoutError:
8385
raise TimeoutError("No current preset response received within timeout window.")
8486

87+
async def retrieve_preset(self, idx):
88+
self._last_preset_json = None
89+
self._ps_event.clear()
90+
retrieve_preset(self.device, idx)
91+
try:
92+
await asyncio.wait_for(self._ps_event.wait(), timeout=self.timeout)
93+
return self._last_preset_json
94+
except asyncio.TimeoutError:
95+
raise TimeoutError("No preset retrieval response received within timeout window.")
96+
8597
async def request_firmware_version(self):
8698
self._last_firmware_version = None
8799
self._fw_event.clear()

ltamp/ltAmpBase.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def __init__(self, debug=False, timeout=2.0):
2929
self._stop_event = threading.Event()
3030
self._cs_event = threading.Event() # connection status
3131
self._fw_event = threading.Event() # firmware
32+
self._cps_event = threading.Event() # current preset
3233
self._ps_event = threading.Event() # preset
3334
self._qa_event = threading.Event() # quick access
3435
self._aud_event = threading.Event() # audition
@@ -111,6 +112,11 @@ def _process_input_data(self, data):
111112
preset_json = msg.currentPresetStatus.currentPresetData
112113
preset_index = msg.currentPresetStatus.currentSlotIndex
113114
self._last_preset = {"data": preset_json, "index": preset_index}
115+
self._set_event(self._cps_event)
116+
elif msg.HasField("presetJSONMessage"):
117+
preset_json = msg.presetJSONMessage.data
118+
preset_index = msg.presetJSONMessage.slotIndex
119+
self._last_preset_json = {"data": preset_json, "index": preset_index}
114120
self._set_event(self._ps_event)
115121
elif msg.HasField("firmwareVersionStatus"):
116122
version = msg.firmwareVersionStatus.version

ltamp/ltAmpSync.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ class LtAmp(LtAmpBase):
2323
request_connection_status() request connection status (status event)
2424
- request_firmware_version() request firmware version from amp
2525
- set_preset(idx) change preset slot
26+
retrieve_preset(idx) retrieve preset from amp (status event)
2627
- request_current_preset() ask amp for current preset (status event)
28+
retrieve_preset(idx) retrieve preset from amp (status event)
2729
- set_qa_slots(idx[]) set QA slots (footswitch assignments)
2830
- request_qa_slots() request QA slots from amp (status event)
2931
- audition_preset(preset_json) audition a preset
@@ -51,13 +53,22 @@ def request_connection_status(self):
5153

5254
def request_current_preset(self):
5355
self._last_preset = None
54-
self._ps_event.clear()
56+
self._cps_event.clear()
5557
request_current_preset(self.device)
56-
if self._ps_event.wait(timeout=self.timeout):
58+
if self._cps_event.wait(timeout=self.timeout):
5759
return self._last_preset
5860
else:
5961
raise TimeoutError("No current preset response received within timeout window.")
6062

63+
def retrieve_preset(self, idx):
64+
self._last_preset_json = None
65+
self._ps_event.clear()
66+
retrieve_preset(self.device, idx)
67+
if self._ps_event.wait(timeout=self.timeout):
68+
return self._last_preset_json
69+
else:
70+
raise TimeoutError("No preset retrieval response received within timeout window.")
71+
6172
def request_firmware_version(self):
6273
self._last_firmware_version = None
6374
self._fw_event.clear()

ltamp/protocol/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from .ConnectionStatusRequest_pb2 import ConnectionStatusRequest
2828
from .LT4FootswitchModeRequest_pb2 import LT4FootswitchModeRequest
2929
from .ProductIdentificationRequest_pb2 import ProductIdentificationRequest
30+
from .RetrievePreset_pb2 import RetrievePreset
3031

3132
def send_message(device, msg):
3233
"""
@@ -102,6 +103,9 @@ def request_current_preset(device):
102103
def set_preset(device, preset_index):
103104
send_message(device, _msg(loadPreset=LoadPreset(presetIndex=preset_index)))
104105

106+
def retrieve_preset(device, preset_index):
107+
send_message(device, _msg(retrievePreset=RetrievePreset(slot=preset_index)))
108+
105109
# --- auditioning ---
106110

107111
def audition_preset(device, preset_json):

0 commit comments

Comments
 (0)