Skip to content

Commit

Permalink
process ANY consistently with CODAL/SIM
Browse files Browse the repository at this point in the history
  • Loading branch information
tballmsft committed May 15, 2019
1 parent d2ae6d8 commit 1167fa3
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 9 deletions.
16 changes: 13 additions & 3 deletions libs/base/core.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,26 @@ PXT_DEF_STRING(emptyString, "")
static HandlerBinding *handlerBindings;

HandlerBinding *findBinding(int source, int value) {
for (auto p = handlerBindings; p; p = p->next) {
if (p->source == source && p->value == value) {
return nextBinding(handlerBindings);
}

HandlerBinding *nextBinding(HandlerBinding *curr, int source, int value) {
for (auto p = curr; p; p = p->next) {
if ((p->source == source || p->source == DEVICE_ID_ANY) && (p->value == value || p->value == DEVICE_EVT_ANY) {
return p;
}
}
return 0;
}

void setBinding(int source, int value, Action act) {
auto curr = findBinding(source, value);
HandlerBinding* curr = NULL;
for (auto p = handlerBindings; p; p = p->next) {
if ((p->source == source) && (p->value == value) {
curr = p;
break;
}
}
incr(act);
if (curr) {
decr(curr->action);
Expand Down
1 change: 1 addition & 0 deletions libs/base/pxtbase.h
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,7 @@ struct HandlerBinding {
Action action;
};
HandlerBinding *findBinding(int source, int value);
HandlerBinding *nextBinding(HandlerBinding* curr, int source, int value);
void setBinding(int source, int value, Action act);

// The standard calling convention is:
Expand Down
8 changes: 3 additions & 5 deletions libs/core---linux/linux.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -255,12 +255,10 @@ static void dispatchEvent(Event &e) {
lastEvent = e;

auto curr = findBinding(e.source, e.value);
if (curr)
setupThread(curr->action, fromInt(e.value));

curr = findBinding(e.source, DEVICE_EVT_ANY);
if (curr)
while(curr) {
setupThread(curr->action, fromInt(e.value));
curr = nextBinding(curr, e.source, e.value);
}
}

static void *evtDispatcher(void *dummy) {
Expand Down
4 changes: 3 additions & 1 deletion libs/core/codal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,8 +108,10 @@ void dispatchEvent(Event e) {

auto curr = findBinding(e.source, e.value);
auto value = fromInt(e.value);
if (curr)
while (curr) {
runAction1(curr->action, value);
curr = nextBinding(curr, e.source, e.value);
}
}

void registerWithDal(int id, int event, Action a, int flags) {
Expand Down

0 comments on commit 1167fa3

Please sign in to comment.