implement fingerprint interface in simulation plugin

master
Michael Zanetti 2018-10-03 00:50:29 +02:00
parent a83b9479cb
commit e20d5c7eb0
2 changed files with 153 additions and 3 deletions

View File

@ -24,6 +24,7 @@
#include <QColor>
#include <QDateTime>
#include <QSettings>
DevicePluginSimulation::DevicePluginSimulation()
{
@ -55,10 +56,14 @@ DeviceManager::DeviceSetupStatus DevicePluginSimulation::setupDevice(Device *dev
qCDebug(dcSimulation()) << "Set up device" << device->name();
if (device->deviceClassId() == garageGateDeviceClassId ||
device->deviceClassId() == extendedAwningDeviceClassId ||
device->deviceClassId() == rollerShutterDeviceClassId) {
device->deviceClassId() == rollerShutterDeviceClassId ||
device->deviceClassId() == fingerPrintSensorDeviceClassId) {
m_simulationTimers.insert(device, new QTimer(device));
connect(m_simulationTimers[device], &QTimer::timeout, this, &DevicePluginSimulation::simulationTimerTimeout);
}
if (device->deviceClassId() == fingerPrintSensorDeviceClassId && device->stateValue(fingerPrintSensorUsersStateTypeId).toStringList().count() > 0) {
m_simulationTimers.value(device)->start(10000);
}
return DeviceManager::DeviceSetupStatusSuccess;
}
@ -352,6 +357,53 @@ DeviceManager::DeviceError DevicePluginSimulation::executeAction(Device *device,
}
}
if (device->deviceClassId() == fingerPrintSensorDeviceClassId) {
if (action.actionTypeId() == fingerPrintSensorAddUserActionTypeId) {
QStringList users = device->stateValue(fingerPrintSensorUsersStateTypeId).toStringList();
QString username = action.param(fingerPrintSensorUserIdParamTypeId).value().toString();
QString finger = action.param(fingerPrintSensorFingerParamTypeId).value().toString();
QSettings settings;
settings.beginGroup(device->id().toString());
QStringList usedFingers = settings.value(username).toStringList();
if (users.contains(username) && usedFingers.contains(finger)) {
return DeviceManager::DeviceErrorDuplicateUuid;
}
QTimer::singleShot(5000, this, [this, action, device, username, finger]() {
if (username.toLower().trimmed() == "john") {
emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorHardwareFailure);
} else {
emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorNoError);
QStringList users = device->stateValue(fingerPrintSensorUsersStateTypeId).toStringList();
if (!users.contains(username)) {
users.append(username);
device->setStateValue(fingerPrintSensorUsersStateTypeId, users);
m_simulationTimers.value(device)->start(10000);
}
QSettings settings;
settings.beginGroup(device->id().toString());
QStringList usedFingers = settings.value(username).toStringList();
usedFingers.append(finger);
settings.setValue(username, usedFingers);
settings.endGroup();
}
});
return DeviceManager::DeviceErrorAsync;
}
if (action.actionTypeId() == fingerPrintSensorRemoveUserActionTypeId) {
QStringList users = device->stateValue(fingerPrintSensorUsersStateTypeId).toStringList();
QString username = action.params().first().value().toString();
if (!users.contains(username)) {
return DeviceManager::DeviceErrorInvalidParameter;
}
users.removeAll(username);
device->setStateValue(fingerPrintSensorUsersStateTypeId, users);
if (users.count() == 0) {
m_simulationTimers.value(device)->stop();
}
return DeviceManager::DeviceErrorNoError;
}
}
qCWarning(dcSimulation()) << "Unhandled device class" << device->deviceClassId() << "for device" << device->name();
return DeviceManager::DeviceErrorDeviceClassNotFound;
@ -460,5 +512,23 @@ void DevicePluginSimulation::simulationTimerTimeout()
t->stop();
device->setStateValue(rollerShutterMovingStateTypeId, false);
}
} else if (device->deviceClassId() == fingerPrintSensorDeviceClassId) {
EventTypeId evt = qrand() % 2 == 0 ? fingerPrintSensorAccessGrantedEventTypeId : fingerPrintSensorAccessDeniedEventTypeId;
ParamList params;
if (evt == fingerPrintSensorAccessGrantedEventTypeId) {
QStringList users = device->stateValue(fingerPrintSensorUsersStateTypeId).toStringList();
QString user = users.at(qrand() % users.count());
QSettings settings;
settings.beginGroup(device->id().toString());
QStringList fingers = settings.value(user).toStringList();
params.append(Param(fingerPrintSensorUserIdParamTypeId, user));
QString finger = fingers.at(qrand() % fingers.count());
params.append(Param(fingerPrintSensorFingerParamTypeId, finger));
qCDebug(dcSimulation()) << "Emitting fingerprint accepted for user" << user << "and finger" << finger;
} else {
qCDebug(dcSimulation()) << "Emitting fingerprint denied";
}
Event event(evt, device->id(), params);
emitEvent(event);
}
}

View File

@ -549,7 +549,7 @@
"name": "fingerPrintSensor",
"displayName": "Finger Print Sensor",
"createMethods": ["user"],
"interfaces": ["connectable"],
"interfaces": ["fingerprintreader", "connectable"],
"deviceIcon": "Network",
"basicTags": [
"Device",
@ -564,13 +564,93 @@
"displayNameEvent": "Connected changed",
"type": "bool",
"defaultValue": true
},
{
"id": "02482093-3b82-4918-a3ce-2a2f4831aae0",
"name": "users",
"displayName": "users",
"displayNameEvent": "Users",
"type": "QStringList",
"defaultValue": []
}
],
"actionTypes": [
{
"id": "c3805253-a09b-4657-b86c-97936f390672",
"name": "addUser",
"displayName": "Add user",
"paramTypes": [
{
"id": "d9e0c68f-8b61-4f5a-9909-b27a4ac562a3",
"displayName": "User ID",
"name": "userId",
"type": "QString"
},
{
"id": "2a97de6c-5ffb-4ca8-b4c7-41ad6790668d",
"displayName": "Finger",
"name": "finger",
"type": "QString",
"allowedValues": [
"ThumbLeft",
"IndexFingerLeft",
"MiddleFingerLeft",
"RingFingerLeft",
"PinkyLeft",
"ThumbRight",
"IndexFingerRight",
"MiddleFingerRight",
"RingFingerRight",
"PinkyRight"
]
}
]
},
{
"id": "28bf4cd1-bb1c-442b-8ba3-ed019f34abbd",
"name": "removeUser",
"displayName": "Remove user",
"paramTypes": [
{
"id": "ca2ffce8-ee71-47ff-8247-f17fca14fd87",
"displayName": "User ID",
"name": "userId",
"type": "QString"
}
]
}
],
"eventTypes": [
{
"id": "1d2dde79-7121-4f8c-b7c1-904ced66a79e",
"name": "accessGranted",
"displayName": "Access granted"
"displayName": "Access granted",
"paramTypes": [
{
"id": "84addd61-15e9-4e98-aa80-6b0bf5d82a15",
"name": "userId",
"displayName": "User ID",
"type": "QString"
},
{
"id": "3611bfc0-be3c-4ddb-8184-b64fc38c7256",
"displayName": "Finger",
"name": "finger",
"type": "QString",
"allowedValues": [
"ThumbLeft",
"IndexFingerLeft",
"MiddleFingerLeft",
"RingFingerLeft",
"PinkyLeft",
"ThumbRight",
"IndexFingerRight",
"MiddleFingerRight",
"RingFingerRight",
"PinkyRight"
]
}
]
},
{
"id": "992b7742-af0c-447c-bd94-9ec70b872268",