Skip to content

Commit f6c4d2f

Browse files
committed
Add support for device connect
1 parent 6f2670e commit f6c4d2f

File tree

1 file changed

+31
-9
lines changed

1 file changed

+31
-9
lines changed

qiling/hw/connectivity.py

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,18 @@ class Type(ctypes.Structure):
2828
"""
2929
_fields_ = []
3030

31-
def __init__(self, ql: Qiling, label: str):
31+
def __init__(self, ql: Qiling, label: str, limit:int = 1):
3232
super().__init__(ql, label)
3333

3434
self.rtube = queue.Queue()
3535
self.wtube = queue.Queue()
3636

37+
self.limit = limit
38+
self.device_list = []
39+
40+
def has_input(self):
41+
return not self.rtube.empty()
42+
3743
def send(self, data: bytes):
3844
""" Send data into the peripheral.
3945
@@ -51,23 +57,39 @@ def recv(self, numb:int = 4096) -> bytes:
5157
data = ql.hw.i2c1.send()
5258
"""
5359
data = bytearray()
54-
while not self.wtube.empty() and numb != 0:
60+
while self.can_recv() and numb != 0:
5561
data.append(self.wtube.get())
5662
numb -= 1
5763

58-
return bytes(data)
59-
64+
return bytes(data)
65+
6066
def can_recv(self):
61-
return not self.rtube.empty()
67+
return not self.wtube.empty()
68+
69+
def send_to_user(self, data: int):
70+
""" send single byte to user
71+
"""
72+
73+
self.wtube.put(data)
6274

6375
def recv_from_user(self) -> bytes:
6476
""" Read single byte from user input
6577
"""
6678

6779
return self.rtube.get()
6880

69-
def send_to_user(self, data: int):
70-
""" send single byte to user
71-
"""
81+
def connect(self, device):
82+
if len(self.device_list) < self.limit:
83+
self.device_list.append(device)
84+
85+
@staticmethod
86+
def device_handler(func):
87+
def wrapper(self):
88+
func(self)
89+
90+
if self.device_list and self.can_recv():
91+
data = self.recv(numb=1)
92+
for device in self.device_list:
93+
device.send(data)
7294

73-
self.wtube.put(data)
95+
return wrapper

0 commit comments

Comments
 (0)