Skip to content

Commit 087075e

Browse files
committed
Model the network layer order consistently (socket <-> [PhysicalLayer <-> other layers] <-> application).
1 parent f9a9be5 commit 087075e

17 files changed

Lines changed: 180 additions & 200 deletions

examples/example_cdi_access.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -248,12 +248,12 @@ def processXML(content: str) :
248248
print(" QUEUED frames : link up...waiting...")
249249
while canLink.pollState() != CanLink.State.Permitted:
250250
# provides incoming data to physicalLayer & sends queued:
251-
canLink.receiveAll(sock, verbose=True)
252-
canLink.sendAll(sock)
251+
physicalLayer.receiveAll(sock, verbose=True)
252+
physicalLayer.sendAll(sock)
253253

254254
if canLink.getState() == CanLink.State.WaitForAliases:
255-
# canLink.receiveAll(sock, verbose=True)
256-
canLink.sendAll(sock)
255+
# physicalLayer.receiveAll(sock, verbose=True)
256+
physicalLayer.sendAll(sock)
257257
# ^ prevent assertion error below, proceed to send.
258258
if canLink.pollState() == CanLink.State.Permitted:
259259
break
@@ -300,8 +300,8 @@ def memoryRead():
300300
# receives the data from the requested memory space (CDI in this
301301
# case) and offset (incremental position in the file/data,
302302
# incremented by this example's memoryReadSuccess handler).
303-
canLink.receiveAll(sock)
304-
canLink.sendAll(sock)
303+
physicalLayer.receiveAll(sock)
304+
physicalLayer.sendAll(sock)
305305
if canLink.nodeIdToAlias != previous_nodes:
306306
print("nodeIdToAlias updated: {}".format(canLink.nodeIdToAlias))
307307
precise_sleep(.01)

examples/example_datagram_transfer.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ def datagramReceiver(memo):
104104
print(" SL : link up")
105105

106106
while canLink.pollState() != CanLink.State.Permitted:
107-
canLink.receiveAll(sock, verbose=settings['trace'])
108-
canLink.sendAll(sock)
107+
physicalLayer.receiveAll(sock, verbose=settings['trace'])
108+
physicalLayer.sendAll(sock)
109109
precise_sleep(.02)
110110

111111

@@ -131,7 +131,7 @@ def datagramWrite():
131131

132132
# process resulting activity
133133
while True:
134-
canLink.receiveAll(sock, verbose=settings['trace'])
135-
canLink.sendAll(sock)
134+
physicalLayer.receiveAll(sock, verbose=settings['trace'])
135+
physicalLayer.sendAll(sock)
136136

137137
canLink.onDisconnect()

examples/example_frame_interface.py

Lines changed: 2 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -48,40 +48,6 @@ def sendToSocket(frame: CanFrame):
4848
physicalLayer.onFrameSent(frame)
4949

5050

51-
def pumpEvents():
52-
# Normally receive call & case below can be replaced by
53-
# canLink.receiveAll(sock), but in this example we have no link
54-
# layer.
55-
received = sock.receive()
56-
if received is not None:
57-
if settings['trace']:
58-
observer.push(received)
59-
if observer.hasNext():
60-
packet_str = observer.next()
61-
print(" RR: "+packet_str.strip())
62-
# pass to link processor
63-
physicalLayer.handleData(received)
64-
65-
# Normally the loop below can be replaced by canLink.sendAll(sock),
66-
# but in this example we have no link layer.
67-
# canLink.pollState()
68-
while True:
69-
frame = physicalLayer.pollFrame()
70-
if frame is None:
71-
break
72-
string = frame.encodeAsString()
73-
print(" SR: {}".format(string.strip()))
74-
sock.sendString(string)
75-
physicalLayer.onFrameSent(frame)
76-
if frame.afterSendState:
77-
print("Next state (unexpected, no link layer): {}"
78-
.format(frame.afterSendState))
79-
# canLink.setState(frame.afterSendState)
80-
# ^ setState is done by onFrameSent now
81-
# (physicalLayer.onFrameSent = self.handleFrameSent
82-
# in LinkLayer constructor)
83-
84-
8551
def handleFrameSent(frame):
8652
# No state to manage since no link layer
8753
pass
@@ -105,16 +71,11 @@ def printFrame(frame):
10571
frame = CanFrame(ControlFrame.AME.value, 1, bytearray())
10672
print("SL: {}".format(frame))
10773
physicalLayer.sendFrameAfter(frame)
108-
109-
while True:
110-
frame = physicalLayer.pollFrame()
111-
if not frame:
112-
break
113-
sendToSocket(frame)
74+
physicalLayer.sendAll(sock, verbose=True)
11475

11576
observer = GridConnectObserver()
11677

11778
# display response - should be RID from nodes
11879
while True:
119-
pumpEvents()
80+
physicalLayer.receiveAll(sock, verbose=True)
12081
precise_sleep(.01)

examples/example_memory_length_query.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,8 @@ def memoryLengthReply(address) :
126126

127127

128128
while canLink.pollState() != CanLink.State.Permitted:
129-
canLink.receiveAll(sock, verbose=settings['trace'])
130-
canLink.sendAll(sock, verbose=True)
129+
physicalLayer.receiveAll(sock, verbose=settings['trace'])
130+
physicalLayer.sendAll(sock, verbose=True)
131131
precise_sleep(.02)
132132
print(" SL : link up")
133133

@@ -155,8 +155,8 @@ def memoryRequest():
155155

156156
# process resulting activity
157157
while True:
158-
canLink.receiveAll(sock, verbose=settings['trace'])
159-
canLink.sendAll(sock, verbose=True)
158+
physicalLayer.receiveAll(sock, verbose=settings['trace'])
159+
physicalLayer.sendAll(sock, verbose=True)
160160
precise_sleep(.01)
161161

162162
canLink.onDisconnect()

examples/example_memory_transfer.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ def memoryReadFail(memo):
122122
physicalLayer.physicalLayerUp()
123123
print(" SL : link up...waiting...")
124124
while canLink.pollState() != CanLink.State.Permitted:
125-
canLink.receiveAll(sock, verbose=settings['trace'])
126-
canLink.sendAll(sock)
125+
physicalLayer.receiveAll(sock, verbose=settings['trace'])
126+
physicalLayer.sendAll(sock)
127127
precise_sleep(.02)
128128
print(" SL : link up")
129129

@@ -150,8 +150,8 @@ def memoryRead():
150150

151151
# process resulting activity
152152
while True:
153-
canLink.receiveAll(sock, verbose=settings['trace'])
154-
canLink.sendAll(sock)
153+
physicalLayer.receiveAll(sock, verbose=settings['trace'])
154+
physicalLayer.sendAll(sock)
155155
precise_sleep(.01)
156156

157157
canLink.onDisconnect()

examples/example_message_interface.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ def printMessage(msg):
7777
print(" SL : link up...waiting...")
7878
physicalLayer.physicalLayerUp()
7979
while canLink.pollState() != CanLink.State.Permitted:
80-
canLink.receiveAll(sock, verbose=settings['trace'])
81-
canLink.sendAll(sock, verbose=True)
80+
physicalLayer.receiveAll(sock, verbose=settings['trace'])
81+
physicalLayer.sendAll(sock, verbose=True)
8282
precise_sleep(.02)
8383
print(" SL : link up")
8484
# send an VerifyNodes message to provoke response
@@ -89,8 +89,8 @@ def printMessage(msg):
8989

9090
# process resulting activity
9191
while True:
92-
canLink.receiveAll(sock, verbose=settings['trace'])
93-
canLink.sendAll(sock, verbose=True)
92+
physicalLayer.receiveAll(sock, verbose=settings['trace'])
93+
physicalLayer.sendAll(sock, verbose=True)
9494
precise_sleep(.01)
9595

9696
canLink.onDisconnect()

examples/example_node_implementation.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,8 @@ def displayOtherNodeIds(message) :
151151
physicalLayer.physicalLayerUp()
152152
print(" SL : link up...waiting...")
153153
while canLink.pollState() != CanLink.State.Permitted:
154-
canLink.receiveAll(sock, verbose=settings['trace'])
155-
canLink.sendAll(sock, verbose=True)
154+
physicalLayer.receiveAll(sock, verbose=settings['trace'])
155+
physicalLayer.sendAll(sock, verbose=True)
156156
precise_sleep(.02)
157157
print(" SL : link up")
158158
# request that nodes identify themselves so that we can print their node IDs
@@ -164,8 +164,8 @@ def displayOtherNodeIds(message) :
164164

165165
# process resulting activity
166166
while True:
167-
canLink.receiveAll(sock, verbose=settings['trace'])
168-
canLink.sendAll(sock, verbose=True)
167+
physicalLayer.receiveAll(sock, verbose=settings['trace'])
168+
physicalLayer.sendAll(sock, verbose=True)
169169
precise_sleep(.01)
170170

171171
canLink.onDisconnect()

examples/example_remote_nodes.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,8 @@ def printMessage(msg):
126126
state = canLink.getState()
127127
if state == CanLink.State.Permitted:
128128
break
129-
canLink.receiveAll(sock, verbose=settings['trace'])
130-
canLink.sendAll(sock, verbose=True)
129+
physicalLayer.receiveAll(sock, verbose=settings['trace'])
130+
physicalLayer.sendAll(sock, verbose=True)
131131

132132

133133
if state != previousState:
@@ -145,7 +145,7 @@ def printMessage(msg):
145145
def receiveLoop():
146146
"""put the read on a separate thread"""
147147
while True:
148-
canLink.receiveAll(sock, verbose=settings['trace'])
148+
physicalLayer.receiveAll(sock, verbose=settings['trace'])
149149
precise_sleep(.01)
150150

151151

examples/example_string_interface.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@
4545
# display response - should be RID from node(s)
4646
while True: # have to kill this manually
4747
# Normally the receive call and case can be replaced by
48-
# canLink.receiveAll, but we have no canLink in this example.
48+
# physicalLayer.receiveAll, but we have no physicalLayer in this
49+
# example.
4950
received = sock.receive()
5051
if received is not None:
5152
observer.push(received)

openlcb/canbus/canframe.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,3 +198,12 @@ def __eq__(self, other):
198198
if self.data != other.data:
199199
return False
200200
return True
201+
202+
def difference(self, other):
203+
if other is None:
204+
return "other is None"
205+
if self.header != other.header:
206+
return "header {} != {}".format(self.header, other.header)
207+
if self.data != other.data:
208+
return "data {} != {}".format(self.data, other.data)
209+
return None

0 commit comments

Comments
 (0)