From cc772678ecba891b8322643d200ac561244387fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Wed, 5 Nov 2014 19:35:59 +0100 Subject: [PATCH] added ON/OFF button and button fixed cmdmgr double execution of actions without params --- .../deviceplugingenericelements.cpp | 53 +++++++++++++++-- .../deviceplugingenericelements.json | 57 ++++++++++++++++++- tests/scripts/cmdmgr.py | 2 +- 3 files changed, 105 insertions(+), 7 deletions(-) diff --git a/plugins/deviceplugins/genericelements/deviceplugingenericelements.cpp b/plugins/deviceplugins/genericelements/deviceplugingenericelements.cpp index d145149d..b013c665 100644 --- a/plugins/deviceplugins/genericelements/deviceplugingenericelements.cpp +++ b/plugins/deviceplugins/genericelements/deviceplugingenericelements.cpp @@ -25,6 +25,16 @@ DeviceClassId toggleButtonDeviceClassId = DeviceClassId("c0f511f9-70f5-499b-bd70 ActionTypeId toggleButtonToggleActionTypeId = ActionTypeId("47bdc15a-b393-4dc2-801b-845420cdfda3"); StateTypeId toggleButtonStatusStateTypeId = StateTypeId("b5e90567-54aa-49bd-a78a-3c19fb38aaf5"); +DeviceClassId buttonDeviceClassId = DeviceClassId("820b2f2d-0d92-48c8-8fd4-f94ce8fc4103"); +ActionTypeId buttonPressActionTypeId = ActionTypeId("01f38af1-b2ab-4ec3-844e-ef52f0f229a9"); +EventTypeId buttonPressedEventTypeId = EventTypeId("effdbc2d-e467-4b0b-80a9-9dda251bfa5c"); + +DeviceClassId onOffButtonDeviceClassId = DeviceClassId("430d188c-476d-4825-a9bd-86dfa3094b56"); +ActionTypeId onOffButtonOnActionTypeId = ActionTypeId("892596d2-0863-4807-97da-469b9f7003f2"); +ActionTypeId onOffButtonOffActionTypeId = ActionTypeId("a8d64050-0b58-4ccf-b052-77ce2b7368ad"); +EventTypeId onOffButtonOnEventTypeId = EventTypeId("4eeba6a2-e4c7-4a2e-8360-2797d98114e6"); +EventTypeId onOffButtonOffEventTypeId = EventTypeId("b636c5f3-2eb0-4682-96d4-88a4aa9d2c12"); + DevicePluginGenericElements::DevicePluginGenericElements() { } @@ -36,20 +46,53 @@ DeviceManager::HardwareResources DevicePluginGenericElements::requiredHardware() DeviceManager::DeviceSetupStatus DevicePluginGenericElements::setupDevice(Device *device) { + // Toggle Button if (device->deviceClassId() == toggleButtonDeviceClassId) { device->setName(device->paramValue("name").toString() +" (Toggle Button)"); return DeviceManager::DeviceSetupStatusSuccess; } + // Button + if (device->deviceClassId() == buttonDeviceClassId) { + device->setName(device->paramValue("name").toString() +" (Button)"); + return DeviceManager::DeviceSetupStatusSuccess; + } + // ON/OFF Button + if (device->deviceClassId() == onOffButtonDeviceClassId) { + device->setName(device->paramValue("name").toString() +" (ON/OFF Button)"); + return DeviceManager::DeviceSetupStatusSuccess; + } return DeviceManager::DeviceSetupStatusFailure; } DeviceManager::DeviceError DevicePluginGenericElements::executeAction(Device *device, const Action &action) { - if (device->deviceClassId() == toggleButtonDeviceClassId - && action.actionTypeId() == toggleButtonToggleActionTypeId) { - bool currentStatus = device->stateValue(toggleButtonStatusStateTypeId).toBool(); - device->setStateValue(toggleButtonStatusStateTypeId, !currentStatus); - return DeviceManager::DeviceErrorNoError; + // Toggle Button + if (device->deviceClassId() == toggleButtonDeviceClassId ) { + if (action.actionTypeId() == toggleButtonToggleActionTypeId) { + device->setStateValue(toggleButtonStatusStateTypeId, !device->stateValue(toggleButtonStatusStateTypeId).toBool()); + return DeviceManager::DeviceErrorNoError; + } + return DeviceManager::DeviceErrorActionTypeNotFound; + } + // Button + if (device->deviceClassId() == buttonDeviceClassId ) { + if (action.actionTypeId() == buttonPressActionTypeId) { + emit emitEvent(Event(buttonPressedEventTypeId, device->id())); + return DeviceManager::DeviceErrorNoError; + } + return DeviceManager::DeviceErrorActionTypeNotFound; + } + // ON/OFF Button + if (device->deviceClassId() == onOffButtonDeviceClassId ) { + if (action.actionTypeId() == onOffButtonOnActionTypeId) { + emit emitEvent(Event(onOffButtonOnEventTypeId, device->id())); + return DeviceManager::DeviceErrorNoError; + } + if (action.actionTypeId() == onOffButtonOffActionTypeId) { + emit emitEvent(Event(onOffButtonOffEventTypeId, device->id())); + return DeviceManager::DeviceErrorNoError; + } + return DeviceManager::DeviceErrorActionTypeNotFound; } return DeviceManager::DeviceErrorDeviceClassNotFound; } diff --git a/plugins/deviceplugins/genericelements/deviceplugingenericelements.json b/plugins/deviceplugins/genericelements/deviceplugingenericelements.json index 63f8d0ef..c6bafa2a 100644 --- a/plugins/deviceplugins/genericelements/deviceplugingenericelements.json +++ b/plugins/deviceplugins/genericelements/deviceplugingenericelements.json @@ -19,8 +19,9 @@ "stateTypes": [ { "id": "b5e90567-54aa-49bd-a78a-3c19fb38aaf5", - "name": "status", + "name": "state", "type": "bool", + "defaultValue": false } ], "actionTypes": [ @@ -29,6 +30,60 @@ "name": "toggle" } ] + }, + { + "deviceClassId": "820b2f2d-0d92-48c8-8fd4-f94ce8fc4103", + "name": "Button", + "createMethods": ["user"], + "paramTypes": [ + { + "name": "name", + "type": "QString" + } + ], + "actionTypes": [ + { + "id": "01f38af1-b2ab-4ec3-844e-ef52f0f229a9", + "name": "press" + } + ], + "eventTypes": [ + { + "id": "effdbc2d-e467-4b0b-80a9-9dda251bfa5c", + "name": "button pressed" + } + ] + }, + { + "deviceClassId": "430d188c-476d-4825-a9bd-86dfa3094b56", + "name": "ON/OFF Button", + "createMethods": ["user"], + "paramTypes": [ + { + "name": "name", + "type": "QString" + } + ], + "actionTypes": [ + { + "id": "892596d2-0863-4807-97da-469b9f7003f2", + "name": "press ON" + }, + { + "id": "a8d64050-0b58-4ccf-b052-77ce2b7368ad", + "name": "press OFF" + } + ], + "eventTypes": [ + { + "id": "4eeba6a2-e4c7-4a2e-8360-2797d98114e6", + "name": "ON pressed" + }, + { + "id": "b636c5f3-2eb0-4682-96d4-88a4aa9d2c12", + "name": "OFF pressed" + } + ] } ] } diff --git a/tests/scripts/cmdmgr.py b/tests/scripts/cmdmgr.py index 14d9cf6f..7b681280 100755 --- a/tests/scripts/cmdmgr.py +++ b/tests/scripts/cmdmgr.py @@ -344,7 +344,7 @@ def execute_action(): params = {} params['actionTypeId'] = actionTypeId params['deviceId'] = deviceId - send_command("Actions.ExecuteAction", params) +# send_command("Actions.ExecuteAction", params) actionType = get_actionType(actionTypeId) actionParams = read_params(actionType['paramTypes']) params['params'] = actionParams