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:
@@ -174,15 +174,29 @@ int PRDevice::GetEvents(PREvent *events, int maxEvents)
|
||||
uint32_t event_data = unrequestedDataQueue.front();
|
||||
unrequestedDataQueue.pop();
|
||||
|
||||
events[i].value = event_data & P_ROC_EVENT_SWITCH_NUM_MASK;
|
||||
int open = (event_data & P_ROC_EVENT_SWITCH_STATE_MASK) >> P_ROC_EVENT_SWITCH_STATE_SHIFT;
|
||||
int type;
|
||||
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:
|
||||
{
|
||||
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)
|
||||
events[i].type = debounced ? kPREventTypeSwitchOpenDebounced : kPREventTypeSwitchOpenNondebounced;
|
||||
else
|
||||
@@ -196,6 +210,13 @@ int PRDevice::GetEvents(PREvent *events, int maxEvents)
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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_DMD = 1;
|
||||
const uint32_t P_ROC_EVENT_TYPE_MASK = 0xC00;
|
||||
const uint32_t P_ROC_EVENT_TYPE_SHIFT = 10;
|
||||
const uint32_t P_ROC_EVENT_SWITCH_NUM_MASK = 0xFF;
|
||||
const uint32_t P_ROC_EVENT_SWITCH_STATE_MASK = 0x100;
|
||||
const uint32_t P_ROC_EVENT_SWITCH_STATE_SHIFT = 8;
|
||||
const uint32_t P_ROC_EVENT_SWITCH_TIMESTAMP_MASK = 0xFFFFF000;
|
||||
const uint32_t P_ROC_EVENT_SWITCH_TIMESTAMP_SHIFT = 12;
|
||||
const uint32_t P_ROC_EVENT_TYPE_BURST_SWITCH = 2;
|
||||
|
||||
const uint32_t P_ROC_V1_EVENT_TYPE_MASK = 0xC00;
|
||||
const uint32_t P_ROC_V1_EVENT_TYPE_SHIFT = 10;
|
||||
const uint32_t P_ROC_V2_EVENT_TYPE_MASK = 0xC000;
|
||||
const uint32_t P_ROC_V2_EVENT_TYPE_SHIFT = 14;
|
||||
|
||||
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_REG_DECODE = 0;
|
||||
|
||||
Reference in New Issue
Block a user