1
0
mirror of https://github.com/preble/libpinproc synced 2026-02-24 18:25:23 +01:00

Separated switch event parsing for V1 vs V2.

This commit is contained in:
Gerry Stellenberg
2012-05-12 15:06:23 -05:00
parent 2ca0786752
commit 72301ec1dd
2 changed files with 47 additions and 14 deletions

View File

@@ -174,15 +174,29 @@ int PRDevice::GetEvents(PREvent *events, int maxEvents)
uint32_t event_data = unrequestedDataQueue.front(); uint32_t event_data = unrequestedDataQueue.front();
unrequestedDataQueue.pop(); unrequestedDataQueue.pop();
events[i].value = event_data & P_ROC_EVENT_SWITCH_NUM_MASK; int type;
int open = (event_data & P_ROC_EVENT_SWITCH_STATE_MASK) >> P_ROC_EVENT_SWITCH_STATE_SHIFT; bool open, debounced;
switch ((event_data & P_ROC_EVENT_TYPE_MASK) >> P_ROC_EVENT_TYPE_SHIFT) if (version >= 2) {
events[i].value = event_data & P_ROC_V2_EVENT_SWITCH_NUM_MASK;
type = (event_data & P_ROC_V2_EVENT_TYPE_MASK) >> P_ROC_V2_EVENT_TYPE_SHIFT;
open = (event_data & P_ROC_V2_EVENT_SWITCH_STATE_MASK) >> P_ROC_V2_EVENT_SWITCH_STATE_SHIFT;
debounced = (event_data & P_ROC_V2_EVENT_SWITCH_DEBOUNCED_MASK) >> P_ROC_V2_EVENT_SWITCH_DEBOUNCED_SHIFT;
events[i].time = (event_data & P_ROC_V2_EVENT_SWITCH_TIMESTAMP_MASK) >> P_ROC_V2_EVENT_SWITCH_TIMESTAMP_SHIFT;
}
else {
type = (event_data & P_ROC_V1_EVENT_TYPE_MASK) >> P_ROC_V1_EVENT_TYPE_SHIFT;
events[i].value = event_data & P_ROC_V1_EVENT_SWITCH_NUM_MASK;
open = (event_data & P_ROC_V1_EVENT_SWITCH_STATE_MASK) >> P_ROC_V1_EVENT_SWITCH_STATE_SHIFT;
debounced = (event_data & P_ROC_V1_EVENT_SWITCH_DEBOUNCED_MASK) >> P_ROC_V1_EVENT_SWITCH_DEBOUNCED_SHIFT;
events[i].time = (event_data & P_ROC_V1_EVENT_SWITCH_TIMESTAMP_MASK) >> P_ROC_V1_EVENT_SWITCH_TIMESTAMP_SHIFT;
}
switch (type)
{ {
case P_ROC_EVENT_TYPE_SWITCH: case P_ROC_EVENT_TYPE_SWITCH:
{ {
events[i].time = (event_data & P_ROC_EVENT_SWITCH_TIMESTAMP_MASK) >> P_ROC_EVENT_SWITCH_TIMESTAMP_SHIFT;
int debounced = (event_data & P_ROC_EVENT_SWITCH_DEBOUNCED_MASK) >> P_ROC_EVENT_SWITCH_DEBOUNCED_SHIFT;
if (open) if (open)
events[i].type = debounced ? kPREventTypeSwitchOpenDebounced : kPREventTypeSwitchOpenNondebounced; events[i].type = debounced ? kPREventTypeSwitchOpenDebounced : kPREventTypeSwitchOpenNondebounced;
else else
@@ -196,6 +210,13 @@ int PRDevice::GetEvents(PREvent *events, int maxEvents)
break; break;
} }
case P_ROC_EVENT_TYPE_BURST_SWITCH:
{
if (open) events[i].type = kPREventTypeSwitchOpenNondebounced;
else events[i].type = kPREventTypeSwitchClosedNondebounced;
break;
}
default: events[i].type = kPREventTypeInvalid; default: events[i].type = kPREventTypeInvalid;
} }

View File

@@ -129,16 +129,28 @@ const uint32_t P_ROC_SWITCH_CTRL_DEBOUNCE_BASE_ADDR = 12;
const uint32_t P_ROC_EVENT_TYPE_SWITCH = 0; const uint32_t P_ROC_EVENT_TYPE_SWITCH = 0;
const uint32_t P_ROC_EVENT_TYPE_DMD = 1; const uint32_t P_ROC_EVENT_TYPE_DMD = 1;
const uint32_t P_ROC_EVENT_TYPE_MASK = 0xC00; const uint32_t P_ROC_EVENT_TYPE_BURST_SWITCH = 2;
const uint32_t P_ROC_EVENT_TYPE_SHIFT = 10;
const uint32_t P_ROC_EVENT_SWITCH_NUM_MASK = 0xFF; const uint32_t P_ROC_V1_EVENT_TYPE_MASK = 0xC00;
const uint32_t P_ROC_EVENT_SWITCH_STATE_MASK = 0x100; const uint32_t P_ROC_V1_EVENT_TYPE_SHIFT = 10;
const uint32_t P_ROC_EVENT_SWITCH_STATE_SHIFT = 8; const uint32_t P_ROC_V2_EVENT_TYPE_MASK = 0xC000;
const uint32_t P_ROC_EVENT_SWITCH_TIMESTAMP_MASK = 0xFFFFF000; const uint32_t P_ROC_V2_EVENT_TYPE_SHIFT = 14;
const uint32_t P_ROC_EVENT_SWITCH_TIMESTAMP_SHIFT = 12;
const uint32_t P_ROC_V1_EVENT_SWITCH_NUM_MASK = 0xFF;
const uint32_t P_ROC_V2_EVENT_SWITCH_NUM_MASK = 0x7FF;
const uint32_t P_ROC_V1_EVENT_SWITCH_STATE_MASK = 0x100;
const uint32_t P_ROC_V2_EVENT_SWITCH_STATE_MASK = 0x1000;
const uint32_t P_ROC_V1_EVENT_SWITCH_STATE_SHIFT = 8;
const uint32_t P_ROC_V2_EVENT_SWITCH_STATE_SHIFT = 12;
const uint32_t P_ROC_V1_EVENT_SWITCH_DEBOUNCED_MASK = 0x200;
const uint32_t P_ROC_V2_EVENT_SWITCH_DEBOUNCED_MASK = 0x2000;
const uint32_t P_ROC_V1_EVENT_SWITCH_DEBOUNCED_SHIFT = 9;
const uint32_t P_ROC_V2_EVENT_SWITCH_DEBOUNCED_SHIFT = 13;
const uint32_t P_ROC_V1_EVENT_SWITCH_TIMESTAMP_MASK = 0xFFFFF000;
const uint32_t P_ROC_V1_EVENT_SWITCH_TIMESTAMP_SHIFT = 12;
const uint32_t P_ROC_V2_EVENT_SWITCH_TIMESTAMP_MASK = 0xFFFF0000;
const uint32_t P_ROC_V2_EVENT_SWITCH_TIMESTAMP_SHIFT = 16;
const uint32_t P_ROC_EVENT_SWITCH_DEBOUNCED_MASK = 0x200;
const uint32_t P_ROC_EVENT_SWITCH_DEBOUNCED_SHIFT = 9;
const uint32_t P_ROC_DRIVER_CTRL_DECODE_SHIFT = 10; const uint32_t P_ROC_DRIVER_CTRL_DECODE_SHIFT = 10;
const uint32_t P_ROC_DRIVER_CTRL_REG_DECODE = 0; const uint32_t P_ROC_DRIVER_CTRL_REG_DECODE = 0;