summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xconstants.py2
-rwxr-xr-xmain.py48
-rw-r--r--static/css/base.css15
-rw-r--r--static/js/base.js2
-rw-r--r--static/js/ws.js26
-rw-r--r--templates/mle.html10
6 files changed, 68 insertions, 35 deletions
diff --git a/constants.py b/constants.py
index a277507..50fdaaa 100755
--- a/constants.py
+++ b/constants.py
@@ -66,7 +66,7 @@ PORT_PC = 10
PORT_UNDEFINED = -1
-MSG_FORMAT_BASIC = 0
+MSG_FORMAT_INFO = 0
MSG_FORMAT_CONTROLLER = 1
MSG_FORMAT_MLE = 2
diff --git a/main.py b/main.py
index 56db667..f29cfca 100755
--- a/main.py
+++ b/main.py
@@ -33,7 +33,6 @@ import platform
from socket import socket, AF_INET, SOCK_DGRAM
from time import sleep
import json
-# from websockets.asyncio.server import serve
from constants import *
@@ -46,7 +45,7 @@ LOG_PATH = PROJECT_ROOT + '/logs'
ws_key = web.AppKey("ws_key", dict[str, web.WebSocketResponse])
-async def _parse_pkt(app, pkt):
+async def _parse_ctl_pkt(app, pkt):
""" Parse a Wireshark received packet"""
# Drop unwanted packets
@@ -84,6 +83,7 @@ async def _parse_pkt(app, pkt):
port = PORT_UNDEFINED
message["format"] = MSG_FORMAT_CONTROLLER
+ message["num_cmds"] = 1
message["time"] = pkt.frame_info.get_field("frame.time_relative").__str__()[0:6]
message['port'] = port
message['type'] = msg_type
@@ -93,6 +93,40 @@ async def _parse_pkt(app, pkt):
return message
+async def _parse_mle_pkt(app, pkt):
+ """ Parse a Wireshark received packet"""
+
+ # Drop unwanted packets
+ if not (pkt.ip.src == app['ipaddr_betsy']):
+ return None
+
+ try:
+ data = pkt.data.data.__str__()
+ except:
+ if DEBUG:
+ print('non MLE msg received')
+ return None
+
+ message = dict()
+
+ try:
+ msg_type = MSG_TYPE_MAP[int(data[0:2],16)]
+ msg_token = '0x' + data[2:4]
+ msg_data = '0x' + data[4::]
+ except Exception as e:
+ print("mapping error:", str(e))
+ pass
+
+ # TODO: add logic to determine the source of the MLE packet
+
+ message["format"] = MSG_FORMAT_MLE
+ message["num_cmds"] = 1
+ message["time"] = pkt.frame_info.get_field("frame.time_relative").__str__()[0:6]
+ message['type'] = msg_type
+ message['token'] = msg_token
+ message['data'] = msg_data
+
+ return message
async def home(request):
data = request.match_info.get('data', "")
@@ -153,9 +187,9 @@ async def controller(request):
int(data.get('token'),16).to_bytes(1),
int(data.get('address'),16).to_bytes(2),
int(data.get('data'),16).to_bytes(4))
- send_pkt = await _parse_pkt(request.app, q_cont.get(block=True))
+ send_pkt = await _parse_ctl_pkt(request.app, q_cont.get(block=True))
if send_pkt['type'] == "READ":
- rcv_pkt = await _parse_pkt(request.app, q_cont.get(block=True))
+ rcv_pkt = await _parse_ctl_pkt(request.app, q_cont.get(block=True))
except Exception as e:
print(str(e))
result = STATUS.ERROR_SERVER
@@ -258,7 +292,7 @@ async def get_icon(request):
raise aiohttp.web.HTTPNotFound()
-# WebSocket handle
+# WebSocket for MLE
async def wslogger(request):
ws = web.WebSocketResponse()
await ws.prepare(request) # onopen is called in the browser
@@ -282,8 +316,8 @@ async def wslogger(request):
num_pkts = num_pkts + 1
if DEBUG:
- print('get from Q:', num_pkts)
- message = await _parse_pkt(request.app, pkt)
+ print('get from MLE Q:', num_pkts)
+ message = await _parse_mle_pkt(request.app, pkt)
if message:
await ws.send_json(message)
diff --git a/static/css/base.css b/static/css/base.css
index 702a034..3cbdc0c 100644
--- a/static/css/base.css
+++ b/static/css/base.css
@@ -217,6 +217,18 @@ div#betsy {
flex-basis: 300px;
}
+.mc-log-col-token {
+ padding: 1em 0px;
+ color: green;
+ flex-basis: 200px;
+}
+
+.mc-log-col-data {
+ padding: 1em 0px;
+ color: blue;
+ flex-basis: 400px;
+}
+
@media ( min-width : 80em) {
.mc-log-col-pc {
flex-basis: 600px;
@@ -224,6 +236,9 @@ div#betsy {
.mc-log-col-phy0 {
flex-basis: 600px;
}
+ .mc-log-col-data {
+ flex-basis: 600px;
+ }
}
.mc-table-striped thead th {
diff --git a/static/js/base.js b/static/js/base.js
index 2920c25..f3d74d2 100644
--- a/static/js/base.js
+++ b/static/js/base.js
@@ -38,7 +38,7 @@ const PORT_PHY1 = 1;
const PORT_PHY2 = 2;
const PORT_PC = 10;
-const MSG_FORMAT_BASIC = 0;
+const MSG_FORMAT_INFO = 0;
const MSG_FORMAT_CONTROLLER = 1;
const MSG_FORMAT_MLE = 2;
diff --git a/static/js/ws.js b/static/js/ws.js
index bc814ff..664c729 100644
--- a/static/js/ws.js
+++ b/static/js/ws.js
@@ -73,7 +73,7 @@ socket.onmessage = function(event) {
let num_msgs = 0;
let msg = JSON.parse(event.data);
- if (msg.format == MSG_FORMAT_BASIC) {
+ if (msg.format == MSG_FORMAT_INFO) {
if (typeof msg['mode'] !== "undefined") {
console.log("mode: ", msg['mode']);
update_mode(msg['mode']);
@@ -102,26 +102,12 @@ socket.onmessage = function(event) {
}
num_msgs += 1;
- console.log("From server:", num_msgs, ': ', msg);
+ console.log("From server:", msg.data.substring(0,48));
- if (msg.port == PORT_PC) {
- log.innerHTML += '<div class="mc-log-row style=height:' + height.toString() + 'rem"><div class="mc-log-col-time">' + msg.time + '</div>' +
- '<div class="mc-log-col-pc">' + log_msg(msg) + '</div>' +
- '<div class="mc-log-col-phy0"></div>' +
- '<div class="mc-log-col-phy1"></div></div>';
- }
- else if (msg.port == PORT_PHY0) {
- log.innerHTML += '<div class="mc-log-row"><div class="mc-log-col-time">' + msg.time + '</div>' +
- '<div class="mc-log-col-pc"></div>' +
- '<div class="mc-log-col-phy0">' + log_msg(msg) +
- '</div><div class="mc-log-col-phy1"></div></div>';
- }
- else if (msg.port == PORT_PHY1) {
- log.innerHTML += '<div class="mc-log-row"><div class="mc-log-col-time">' + msg.time + '</div>' +
- '<div class="mc-log-col-pc"></div>' +
- '<div class="mc-log-col-phy0"></div>' +
- '<div class="mc-log-col-phy1">' + log_msg(msg) + '</div></div>';
- }
+ log.innerHTML += '<div class="mc-log-row style=height:' + height.toString() + 'rem"><div class="mc-log-col mc-log-col-time">' + msg.time + '</div>' +
+ '<div class="mc-log-col mc-log-col-token">' + msg.token + '</div>' +
+ '<div class="mc-log-col mc-log-col-data">' + msg.data.substring(0,48) + '</div>' +
+ '</div>';
// socket.send("request");
state = "Request"
diff --git a/templates/mle.html b/templates/mle.html
index b7bc632..c2c5209 100644
--- a/templates/mle.html
+++ b/templates/mle.html
@@ -28,12 +28,10 @@
<div id="mc-log-hdr">
<div class="mc-log-col mc-log-col-time"
style="border: 0px solid green;">Time</div>
- <div class="mc-log-col mc-log-col-pc"
- style="border: 0px solid green;">PHY0</div>
- <div class="mc-log-col mc-log-col-phy0"
- style="border: 0px solid green;">PHY1</div>
- <div class="mc-log-col mc-log-col-phy1"
- style="border: 0px solid green;">PHY2</div>
+ <div class="mc-log-col mc-log-col-token"
+ style="border: 0px solid green;">Token</div>
+ <div class="mc-log-col mc-log-col-data"
+ style="border: 0px solid green;">Data</div>
</div>
<div id="mc-log">

Highly Recommended Verilog Books