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();
|
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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user