// --- SwitchInputMapper ---
SwitchInputMapper::SwitchInputMapper(InputDevice* device) :
- InputMapper(device), mUpdatedSwitchValues(0), mUpdatedSwitchMask(0) {
+ InputMapper(device), mSwitchValues(0), mUpdatedSwitchMask(0) {
}
SwitchInputMapper::~SwitchInputMapper() {
void SwitchInputMapper::processSwitch(int32_t switchCode, int32_t switchValue) {
if (switchCode >= 0 && switchCode < 32) {
if (switchValue) {
- mUpdatedSwitchValues |= 1 << switchCode;
+ mSwitchValues |= 1 << switchCode;
+ } else {
+ mSwitchValues &= ~(1 << switchCode);
}
mUpdatedSwitchMask |= 1 << switchCode;
}
void SwitchInputMapper::sync(nsecs_t when) {
if (mUpdatedSwitchMask) {
- NotifySwitchArgs args(when, 0, mUpdatedSwitchValues, mUpdatedSwitchMask);
+ int32_t updatedSwitchValues = mSwitchValues & mUpdatedSwitchMask;
+ NotifySwitchArgs args(when, 0, updatedSwitchValues, mUpdatedSwitchMask);
getListener()->notifySwitch(&args);
- mUpdatedSwitchValues = 0;
mUpdatedSwitchMask = 0;
}
}
return getEventHub()->getSwitchState(getDeviceId(), switchCode);
}
+void SwitchInputMapper::dump(String8& dump) {
+ dump.append(INDENT2 "Switch Input Mapper:\n");
+ dump.appendFormat(INDENT3 "SwitchValues: %x\n", mSwitchValues);
+}
// --- VibratorInputMapper ---
virtual void process(const RawEvent* rawEvent);
virtual int32_t getSwitchState(uint32_t sourceMask, int32_t switchCode);
+ virtual void dump(String8& dump);
private:
- uint32_t mUpdatedSwitchValues;
+ uint32_t mSwitchValues;
uint32_t mUpdatedSwitchMask;
void processSwitch(int32_t switchCode, int32_t switchValue);