all working without mongo

This commit is contained in:
George Hotz 2014-07-14 12:55:21 -07:00
parent 86dc3e66c1
commit 33baacd806
3 changed files with 81 additions and 66 deletions

View File

@ -24,8 +24,8 @@ maxclnum = 1
# python db has two indexes
# types are I, r, m
# (addr, type) -> [clnums]
# (clnum, type) -> [changes]
# pydb_addr: (addr, type) -> [clnums]
# pydb_clnum: (clnum, type) -> [changes]
pydb_addr = defaultdict(list)
pydb_clnum = defaultdict(list)
@ -101,10 +101,25 @@ def connect():
emit('maxclnum', maxclnum)
emit('pmaps', pmaps)
@socketio.on('getclnum', namespace='/qira')
def getclnum(m):
print "getclnum",m
if m == None or 'clnum' not in m or 'types' not in m or 'limit' not in m:
return
ret = []
for t in m['types']:
key = (m['clnum'], t)
for c in pydb_clnum[key]:
ret.append(c)
if len(ret) >= m['limit']:
break
if len(ret) >= m['limit']:
break
emit('clnum', ret)
@socketio.on('getchanges', namespace='/qira')
def getchanges(m):
print "getchanges",m
#print "getchanges",m
if m == None or 'address' not in m or 'type' not in m or m['address'] == None or m['type'] == None:
return
key = (m['address'], m['type'])
@ -145,7 +160,12 @@ def getregisters(clnum):
ret = []
for i in range(0, len(REGS)):
if i*4 in regs.daddr:
ret.append({"name": REGS[i], "address": i*4, "value": regs.daddr[i*4].fetch(clnum)})
rret = {"name": REGS[i], "address": i*4, "value": regs.daddr[i*4].fetch(clnum), "regactions": ""}
if clnum in pydb_addr[(i*4, 'R')]:
rret['regactions'] += " regread"
if clnum in pydb_addr[(i*4, 'W')]:
rret['regactions'] += " regwrite"
ret.append(rret)
emit('registers', ret)
def run_socketio():

View File

@ -32,3 +32,14 @@ function zoom_out_max(dontforce) {
else Session.set("cview", [0, max]);
}
var baseevents = {
'click .datamemory': function(e) {
var daddr = parseInt(e.target.innerHTML, 16);
update_dview(daddr);
},
'click .datainstruction': function(e) {
var iaddr = parseInt(e.target.innerHTML, 16);
Session.set('iaddr', iaddr);
},
};

View File

@ -88,16 +88,6 @@ stream.on('memory', function(msg) {
$("#hexdump")[0].innerHTML = html;
});
var baseevents = {
'click .datamemory': function(e) {
var daddr = parseInt(e.target.innerHTML, 16);
update_dview(daddr);
},
'click .datainstruction': function(e) {
var iaddr = parseInt(e.target.innerHTML, 16);
Session.set('iaddr', iaddr);
},
};
Template.memviewer.events({
'dblclick .datamemory': function(e) {
@ -114,21 +104,8 @@ Template.memviewer.events({
},
});
Template.datachanges.events(baseevents);
Template.regviewer.events(baseevents);
Template.regviewer.regactions = function() {
var ret = "";
var cur = Change.find({address: this.address,
$or: [{type: "R"}, {type: "W"}]});
cur.forEach(function(post) {
if (post.type == "R") ret += " regread";
if (post.type == "W") ret += " regwrite";
});
return ret;
};
Template.regviewer.hexvalue = function() {
return hex(this.value);
};
@ -137,12 +114,49 @@ Template.regviewer.datatype = function() {
return get_data_type(this.value);
};
Template.datachanges.memactions = function() {
// keep these updated
Deps.autorun(function() {
var daddr = Session.get('daddr');
var dview = Session.get('dview');
var clnum = Session.get('clnum');
stream.emit('getmemory', {"clnum":clnum-1, "address":dview, "len":0x100});
});
Deps.autorun(function() {
stream.emit('getregisters', Session.get('clnum')-1);
});
stream.on('registers', function(msg) {
$('#regviewer')[0].innerHTML = "";
UI.insert(UI.renderWithData(Template.regviewer, {regs: msg}), $('#regviewer')[0]);
});
// hacks to keep iaddr in sync with clnum
// move to vtimeline?
/*Deps.autorun(function(){ Meteor.subscribe('dat_iaddr', Session.get("iaddr"), {onReady: function() {
var closest = undefined;
var diff = 0;
var clnum = Session.get("clnum");
var cur = Change.find({clnum: clnum,
$or: [{type: "L"}, {type: "S"}]}, {limit: 3});
return cur;
};
Change.find({"address": Session.get("iaddr"), "type": "I"}).forEach(function(x) {
var ldiff = Math.abs(x.clnum - clnum);
if (closest == undefined || diff > ldiff) {
closest = x.clnum;
diff = ldiff;
return;
}
});
//p("nearest change is "+closest);
if (closest !== undefined && closest !== clnum) {
Session.set("clnum", closest);
}
}}); });*/
Deps.autorun(function(){ Meteor.subscribe('dat_daddr', Session.get("daddr")); });
// *** datachanges ***
Template.datachanges.events(baseevents);
Template.datachanges.hexaddress = function() {
return hex(this.address);
@ -165,44 +179,14 @@ Template.datachanges.datatype = function() {
return get_data_type(this.data);
};
// keep these updated
Deps.autorun(function() {
var daddr = Session.get('daddr');
var dview = Session.get('dview');
var clnum = Session.get('clnum');
stream.emit('getmemory', {"clnum":clnum-1, "address":dview, "len":0x100});
stream.emit('getclnum', {'clnum': Session.get('clnum'), 'types': ['L', 'S'], 'limit': 3});
});
Deps.autorun(function() {
stream.emit('getregisters', Session.get('clnum')-1);
stream.on('clnum', function(msg) {
$('#datachanges')[0].innerHTML = "";
UI.insert(UI.renderWithData(Template.datachanges, {memactions: msg}), $('#datachanges')[0]);
});
stream.on('registers', function(msg) {
$('#regviewer')[0].innerHTML = "";
UI.insert(UI.renderWithData(Template.regviewer, {regs: msg}), $('#regviewer')[0]);
});
// hacks to keep iaddr in sync with clnum
// moved to vtimeline
/*Deps.autorun(function(){ Meteor.subscribe('dat_iaddr', Session.get("iaddr"), {onReady: function() {
var closest = undefined;
var diff = 0;
var clnum = Session.get("clnum");
Change.find({"address": Session.get("iaddr"), "type": "I"}).forEach(function(x) {
var ldiff = Math.abs(x.clnum - clnum);
if (closest == undefined || diff > ldiff) {
closest = x.clnum;
diff = ldiff;
return;
}
});
//p("nearest change is "+closest);
if (closest !== undefined && closest !== clnum) {
Session.set("clnum", closest);
}
}}); });*/
Deps.autorun(function(){ Meteor.subscribe('dat_daddr', Session.get("daddr")); });