Device state and device state value implemented
This commit is contained in:
parent
dfa1a2e897
commit
ae5655abbe
7 changed files with 146 additions and 24 deletions
|
@ -48,6 +48,13 @@ std::wstring Message::charToWstring(const char *value) {
|
||||||
return st.str();
|
return st.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::wstring Message::charUnsignedToWstring(const unsigned char value) {
|
||||||
|
//todo move?
|
||||||
|
std::wstringstream st;
|
||||||
|
st << value;
|
||||||
|
return st.str();
|
||||||
|
}
|
||||||
|
|
||||||
std::wstring Message::intToWstring(int value) {
|
std::wstring Message::intToWstring(int value) {
|
||||||
//todo move?
|
//todo move?
|
||||||
std::wstringstream st;
|
std::wstringstream st;
|
||||||
|
|
|
@ -19,6 +19,7 @@ namespace TelldusCore {
|
||||||
std::wstring getClientWStringFromSocket();
|
std::wstring getClientWStringFromSocket();
|
||||||
|
|
||||||
static std::wstring charToWstring(const char *value);
|
static std::wstring charToWstring(const char *value);
|
||||||
|
static std::wstring charUnsignedToWstring(const unsigned char value);
|
||||||
static std::wstring intToWstring(int value);
|
static std::wstring intToWstring(int value);
|
||||||
static bool nextIsInt(const std::wstring &);
|
static bool nextIsInt(const std::wstring &);
|
||||||
static bool nextIsString(const std::wstring &);
|
static bool nextIsString(const std::wstring &);
|
||||||
|
@ -26,8 +27,10 @@ namespace TelldusCore {
|
||||||
static std::wstring takeString(std::wstring *);
|
static std::wstring takeString(std::wstring *);
|
||||||
static int takeInt(std::wstring *);
|
static int takeInt(std::wstring *);
|
||||||
|
|
||||||
private:
|
|
||||||
static int wideToInteger(const std::wstring &input);
|
static int wideToInteger(const std::wstring &input);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -93,12 +93,11 @@ void ClientCommunicationHandler::parseMessage(const std::wstring &clientMessage,
|
||||||
} else if (function == L"tdLastSentCommand") {
|
} else if (function == L"tdLastSentCommand") {
|
||||||
int deviceId = TelldusCore::Message::takeInt(&msg);
|
int deviceId = TelldusCore::Message::takeInt(&msg);
|
||||||
int methodsSupported = TelldusCore::Message::takeInt(&msg);
|
int methodsSupported = TelldusCore::Message::takeInt(&msg);
|
||||||
(*intReturn) = 0; // tdLastSentCommand(deviceId, methodsSupported); TODO
|
(*intReturn) = d->deviceManager->getDeviceLastSentCommand(deviceId, methodsSupported);
|
||||||
|
|
||||||
} else if (function == L"tdLastSentValue") {
|
} else if (function == L"tdLastSentValue") {
|
||||||
int deviceId = TelldusCore::Message::takeInt(&msg);
|
int deviceId = TelldusCore::Message::takeInt(&msg);
|
||||||
const char *value = ""; //tdLastSentValue(deviceId); TODO
|
(*wstringReturn) = d->deviceManager->getDeviceStateValue(deviceId);
|
||||||
(*wstringReturn) = TelldusCore::Message::charToWstring(value);
|
|
||||||
|
|
||||||
} else if(function == L"tdGetNumberOfDevices"){
|
} else if(function == L"tdGetNumberOfDevices"){
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,8 @@ public:
|
||||||
Protocol *protocol;
|
Protocol *protocol;
|
||||||
std::wstring protocolName;
|
std::wstring protocolName;
|
||||||
int preferredControllerId;
|
int preferredControllerId;
|
||||||
|
int state;
|
||||||
|
std::wstring stateValue;
|
||||||
};
|
};
|
||||||
|
|
||||||
Device::Device(int id)
|
Device::Device(int id)
|
||||||
|
@ -17,6 +19,7 @@ Device::Device(int id)
|
||||||
d = new PrivateData;
|
d = new PrivateData;
|
||||||
d->protocol = 0;
|
d->protocol = 0;
|
||||||
d->preferredControllerId = 0;
|
d->preferredControllerId = 0;
|
||||||
|
d->state = 0;
|
||||||
//när något uppdateras, spara också till registret
|
//när något uppdateras, spara också till registret
|
||||||
//obs, kunna hantera om alla värden inte är satta
|
//obs, kunna hantera om alla värden inte är satta
|
||||||
}
|
}
|
||||||
|
@ -29,6 +32,27 @@ Device::~Device(void) {
|
||||||
/**
|
/**
|
||||||
* Get-/Set-methods
|
* Get-/Set-methods
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
int Device::getLastSentCommand(int methodsSupported){
|
||||||
|
|
||||||
|
int lastSentCommand = Device::maskUnsupportedMethods(d->state, methodsSupported);
|
||||||
|
|
||||||
|
if (lastSentCommand == TELLSTICK_BELL) {
|
||||||
|
//Bell is not a state
|
||||||
|
lastSentCommand = TELLSTICK_TURNOFF;
|
||||||
|
}
|
||||||
|
if (lastSentCommand == 0) {
|
||||||
|
lastSentCommand = TELLSTICK_TURNOFF;
|
||||||
|
}
|
||||||
|
return lastSentCommand;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Device::setLastSentCommand(int command, std::wstring value){
|
||||||
|
d->state = command;
|
||||||
|
d->stateValue = value;
|
||||||
|
}
|
||||||
|
|
||||||
std::wstring Device::getModel(){
|
std::wstring Device::getModel(){
|
||||||
return d->model;
|
return d->model;
|
||||||
}
|
}
|
||||||
|
@ -69,6 +93,10 @@ void Device::setProtocolName(const std::wstring &protocolName){
|
||||||
d->protocolName = protocolName;
|
d->protocolName = protocolName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::wstring Device::getStateValue(){
|
||||||
|
return d->stateValue;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* End Get-/Set
|
* End Get-/Set
|
||||||
*/
|
*/
|
||||||
|
@ -78,9 +106,9 @@ int Device::doAction(int action, unsigned char data, Controller *controller) {
|
||||||
Protocol *p = this->retrieveProtocol();
|
Protocol *p = this->retrieveProtocol();
|
||||||
if(p){
|
if(p){
|
||||||
std::string code = p->getStringForMethod(action, data, controller);
|
std::string code = p->getStringForMethod(action, data, controller);
|
||||||
controller->send(code);
|
return controller->send(code);
|
||||||
}
|
}
|
||||||
return 0;
|
return TELLSTICK_ERROR_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
Protocol* Device::retrieveProtocol() {
|
Protocol* Device::retrieveProtocol() {
|
||||||
|
@ -97,3 +125,12 @@ Protocol* Device::retrieveProtocol() {
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Device::maskUnsupportedMethods(int methods, int supportedMethods) {
|
||||||
|
// Bell -> On
|
||||||
|
if ((methods & TELLSTICK_BELL) && !(supportedMethods & TELLSTICK_BELL)) {
|
||||||
|
methods |= TELLSTICK_TURNON;
|
||||||
|
}
|
||||||
|
//Cut of the rest of the unsupported methods we don't have a fallback for
|
||||||
|
return methods & supportedMethods;
|
||||||
|
}
|
|
@ -12,6 +12,9 @@ public:
|
||||||
Device(int id);
|
Device(int id);
|
||||||
~Device(void);
|
~Device(void);
|
||||||
|
|
||||||
|
int doAction(int action, unsigned char data, Controller *controller);
|
||||||
|
std::wstring getStateValue();
|
||||||
|
int getLastSentCommand(int methodsSupported);
|
||||||
std::wstring getModel();
|
std::wstring getModel();
|
||||||
void setModel(const std::wstring &model);
|
void setModel(const std::wstring &model);
|
||||||
std::wstring getName();
|
std::wstring getName();
|
||||||
|
@ -22,10 +25,12 @@ public:
|
||||||
void setPreferredControllerId(int controllerId);
|
void setPreferredControllerId(int controllerId);
|
||||||
std::wstring getProtocolName();
|
std::wstring getProtocolName();
|
||||||
void setProtocolName(const std::wstring &name);
|
void setProtocolName(const std::wstring &name);
|
||||||
int doAction(int action, unsigned char data, Controller *controller);
|
void setStateValue(int stateValue);
|
||||||
|
void setLastSentCommand(int command, std::wstring value);
|
||||||
|
|
||||||
|
static int maskUnsupportedMethods(int methods, int supportedMethods);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Protocol *retrieveProtocol();
|
Protocol *retrieveProtocol();
|
||||||
|
|
||||||
class PrivateData;
|
class PrivateData;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "DeviceManager.h"
|
#include "DeviceManager.h"
|
||||||
#include "Mutex.h"
|
#include "Mutex.h"
|
||||||
#include "Settings.h"
|
#include "Settings.h"
|
||||||
|
#include "Message.h"
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
@ -22,7 +23,7 @@ DeviceManager::DeviceManager(ControllerManager *controllerManager){
|
||||||
|
|
||||||
DeviceManager::~DeviceManager(void) {
|
DeviceManager::~DeviceManager(void) {
|
||||||
|
|
||||||
TelldusCore::MutexLocker locker(&d->lock);
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
for (DeviceMap::iterator it = d->devices.begin(); it != d->devices.end(); ++it) {
|
for (DeviceMap::iterator it = d->devices.begin(); it != d->devices.end(); ++it) {
|
||||||
{TelldusCore::MutexLocker lock(it->second);} //aquire lock, and release it, just to see that the device it's not in use anywhere
|
{TelldusCore::MutexLocker lock(it->second);} //aquire lock, and release it, just to see that the device it's not in use anywhere
|
||||||
delete(it->second);
|
delete(it->second);
|
||||||
|
@ -31,7 +32,7 @@ DeviceManager::~DeviceManager(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeviceManager::fillDevices(){
|
void DeviceManager::fillDevices(){
|
||||||
TelldusCore::MutexLocker locker(&d->lock);
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
int numberOfDevices = d->set.getNumberOfDevices();
|
int numberOfDevices = d->set.getNumberOfDevices();
|
||||||
|
|
||||||
for (int i = 0; i < numberOfDevices; ++i) {
|
for (int i = 0; i < numberOfDevices; ++i) {
|
||||||
|
@ -41,6 +42,7 @@ void DeviceManager::fillDevices(){
|
||||||
d->devices[id]->setModel(d->set.getModel(id));
|
d->devices[id]->setModel(d->set.getModel(id));
|
||||||
d->devices[id]->setProtocolName(d->set.getProtocol(id));
|
d->devices[id]->setProtocolName(d->set.getProtocol(id));
|
||||||
d->devices[id]->setPreferredControllerId(d->set.getPreferredControllerId(id));
|
d->devices[id]->setPreferredControllerId(d->set.getPreferredControllerId(id));
|
||||||
|
d->devices[id]->setLastSentCommand(d->set.getDeviceState(id), d->set.getDeviceStateValue(id));
|
||||||
d->devices[id]->setParameter(L"house", d->set.getDeviceParameter(id, L"house"));
|
d->devices[id]->setParameter(L"house", d->set.getDeviceParameter(id, L"house"));
|
||||||
d->devices[id]->setParameter(L"unit", d->set.getDeviceParameter(id, L"unit"));
|
d->devices[id]->setParameter(L"unit", d->set.getDeviceParameter(id, L"unit"));
|
||||||
d->devices[id]->setParameter(L"code", d->set.getDeviceParameter(id, L"code"));
|
d->devices[id]->setParameter(L"code", d->set.getDeviceParameter(id, L"code"));
|
||||||
|
@ -50,9 +52,63 @@ void DeviceManager::fillDevices(){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DeviceManager::getDeviceLastSentCommand(int deviceId, int methodsSupported){
|
||||||
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
|
if (!d->devices.size()) {
|
||||||
|
return TELLSTICK_ERROR_DEVICE_NOT_FOUND;
|
||||||
|
}
|
||||||
|
DeviceMap::iterator it = d->devices.find(deviceId);
|
||||||
|
if (it != d->devices.end()) {
|
||||||
|
//TODO: Is it ok NOT to get a lock here? Should be, since the list is locked, and it's an fast operation?
|
||||||
|
return it->second->getLastSentCommand(methodsSupported);
|
||||||
|
}
|
||||||
|
return TELLSTICK_ERROR_DEVICE_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
int DeviceManager::setDeviceLastSentCommand(int deviceId, int command, std::wstring value)
|
||||||
|
{
|
||||||
|
//TODO: check this locking, ok?
|
||||||
|
Device *device = 0;
|
||||||
|
{
|
||||||
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
|
if (!d->devices.size()) {
|
||||||
|
return TELLSTICK_ERROR_DEVICE_NOT_FOUND;
|
||||||
|
}
|
||||||
|
DeviceMap::iterator it = d->devices.find(deviceId);
|
||||||
|
if (it != d->devices.end()) {
|
||||||
|
device = it->second;
|
||||||
|
d->set.setDeviceState(deviceId, command,value);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return TELLSTICK_ERROR_DEVICE_NOT_FOUND;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(device){
|
||||||
|
TelldusCore::MutexLocker lock(device);
|
||||||
|
device->setLastSentCommand(command, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TELLSTICK_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
std::wstring DeviceManager::getDeviceStateValue(int deviceId){
|
||||||
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
|
if (!d->devices.size()) {
|
||||||
|
return L"UNKNOWN"; //TODO, what?
|
||||||
|
}
|
||||||
|
DeviceMap::iterator it = d->devices.find(deviceId);
|
||||||
|
if (it != d->devices.end()) {
|
||||||
|
//TODO: Is it ok NOT to get a lock here? Should be, since the list is locked, and it's an fast operation?
|
||||||
|
return it->second->getStateValue();
|
||||||
|
}
|
||||||
|
return L"UNKNOWN"; //TODO, what?
|
||||||
|
}
|
||||||
|
|
||||||
std::wstring DeviceManager::getDeviceModel(int deviceId){
|
std::wstring DeviceManager::getDeviceModel(int deviceId){
|
||||||
|
|
||||||
TelldusCore::MutexLocker locker(&d->lock);
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
if (!d->devices.size()) {
|
if (!d->devices.size()) {
|
||||||
return L"UNKNOWN"; //TODO, what?
|
return L"UNKNOWN"; //TODO, what?
|
||||||
}
|
}
|
||||||
|
@ -69,7 +125,7 @@ int DeviceManager::setDeviceModel(int deviceId, std::wstring model)
|
||||||
//TODO: check this locking, ok?
|
//TODO: check this locking, ok?
|
||||||
Device *device = 0;
|
Device *device = 0;
|
||||||
{
|
{
|
||||||
TelldusCore::MutexLocker locker(&d->lock);
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
if (!d->devices.size()) {
|
if (!d->devices.size()) {
|
||||||
return TELLSTICK_ERROR_DEVICE_NOT_FOUND;
|
return TELLSTICK_ERROR_DEVICE_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
@ -93,7 +149,7 @@ int DeviceManager::setDeviceModel(int deviceId, std::wstring model)
|
||||||
|
|
||||||
std::wstring DeviceManager::getDeviceName(int deviceId){
|
std::wstring DeviceManager::getDeviceName(int deviceId){
|
||||||
|
|
||||||
TelldusCore::MutexLocker locker(&d->lock);
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
if (!d->devices.size()) {
|
if (!d->devices.size()) {
|
||||||
return L"UNKNOWN"; //TODO, what?
|
return L"UNKNOWN"; //TODO, what?
|
||||||
}
|
}
|
||||||
|
@ -110,7 +166,7 @@ int DeviceManager::setDeviceName(int deviceId, std::wstring name){
|
||||||
//TODO: check this locking, ok?
|
//TODO: check this locking, ok?
|
||||||
Device *device = 0;
|
Device *device = 0;
|
||||||
{
|
{
|
||||||
TelldusCore::MutexLocker locker(&d->lock);
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
if (!d->devices.size()) {
|
if (!d->devices.size()) {
|
||||||
return TELLSTICK_ERROR_DEVICE_NOT_FOUND;
|
return TELLSTICK_ERROR_DEVICE_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
@ -133,7 +189,7 @@ int DeviceManager::setDeviceName(int deviceId, std::wstring name){
|
||||||
|
|
||||||
std::wstring DeviceManager::getDeviceParameter(int deviceId, std::wstring name, std::wstring defaultValue){
|
std::wstring DeviceManager::getDeviceParameter(int deviceId, std::wstring name, std::wstring defaultValue){
|
||||||
|
|
||||||
TelldusCore::MutexLocker locker(&d->lock);
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
if (!d->devices.size()) {
|
if (!d->devices.size()) {
|
||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
|
@ -153,7 +209,7 @@ int DeviceManager::setDeviceParameter(int deviceId, std::wstring name, std::wstr
|
||||||
//TODO: check this locking, ok?
|
//TODO: check this locking, ok?
|
||||||
Device *device = 0;
|
Device *device = 0;
|
||||||
{
|
{
|
||||||
TelldusCore::MutexLocker locker(&d->lock);
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
if (!d->devices.size()) {
|
if (!d->devices.size()) {
|
||||||
return TELLSTICK_ERROR_DEVICE_NOT_FOUND;
|
return TELLSTICK_ERROR_DEVICE_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
@ -177,7 +233,7 @@ int DeviceManager::setDeviceParameter(int deviceId, std::wstring name, std::wstr
|
||||||
|
|
||||||
std::wstring DeviceManager::getDeviceProtocol(int deviceId){
|
std::wstring DeviceManager::getDeviceProtocol(int deviceId){
|
||||||
|
|
||||||
TelldusCore::MutexLocker locker(&d->lock);
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
if (!d->devices.size()) {
|
if (!d->devices.size()) {
|
||||||
return L"UNKNOWN"; //TODO, what?
|
return L"UNKNOWN"; //TODO, what?
|
||||||
}
|
}
|
||||||
|
@ -194,7 +250,7 @@ int DeviceManager::setDeviceProtocol(int deviceId, std::wstring protocol)
|
||||||
//TODO: check this locking, ok?
|
//TODO: check this locking, ok?
|
||||||
Device *device = 0;
|
Device *device = 0;
|
||||||
{
|
{
|
||||||
TelldusCore::MutexLocker locker(&d->lock);
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
if (!d->devices.size()) {
|
if (!d->devices.size()) {
|
||||||
return TELLSTICK_ERROR_DEVICE_NOT_FOUND;
|
return TELLSTICK_ERROR_DEVICE_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
@ -216,12 +272,12 @@ int DeviceManager::setDeviceProtocol(int deviceId, std::wstring protocol)
|
||||||
}
|
}
|
||||||
|
|
||||||
int DeviceManager::getNumberOfDevices(){
|
int DeviceManager::getNumberOfDevices(){
|
||||||
TelldusCore::MutexLocker locker(&d->lock);
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
return (int)d->devices.size();
|
return (int)d->devices.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
int DeviceManager::addDevice(){
|
int DeviceManager::addDevice(){
|
||||||
TelldusCore::MutexLocker locker(&d->lock);
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
|
|
||||||
int id = d->set.addDevice();
|
int id = d->set.addDevice();
|
||||||
if(id == -1){
|
if(id == -1){
|
||||||
|
@ -236,7 +292,7 @@ int DeviceManager::addDevice(){
|
||||||
}
|
}
|
||||||
|
|
||||||
int DeviceManager::getDeviceId(int deviceIndex) {
|
int DeviceManager::getDeviceId(int deviceIndex) {
|
||||||
TelldusCore::MutexLocker locker(&d->lock);
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
return d->set.getDeviceId(deviceIndex);
|
return d->set.getDeviceId(deviceIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,7 +303,7 @@ int DeviceManager::getDeviceType(int deviceId){
|
||||||
|
|
||||||
int DeviceManager::getPreferredControllerId(int deviceId){
|
int DeviceManager::getPreferredControllerId(int deviceId){
|
||||||
|
|
||||||
TelldusCore::MutexLocker locker(&d->lock);
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
|
|
||||||
if (!d->devices.size()) {
|
if (!d->devices.size()) {
|
||||||
return TELLSTICK_ERROR_DEVICE_NOT_FOUND;
|
return TELLSTICK_ERROR_DEVICE_NOT_FOUND;
|
||||||
|
@ -264,7 +320,7 @@ int DeviceManager::removeDevice(int deviceId){
|
||||||
|
|
||||||
Device *device = 0;
|
Device *device = 0;
|
||||||
{
|
{
|
||||||
TelldusCore::MutexLocker locker(&d->lock);
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
if(!d->set.removeDevice(deviceId)){ //remove from register/settings
|
if(!d->set.removeDevice(deviceId)){ //remove from register/settings
|
||||||
return TELLSTICK_ERROR_UNKNOWN;
|
return TELLSTICK_ERROR_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
@ -306,7 +362,7 @@ int DeviceManager::doAction(int deviceId, int action, unsigned char data){
|
||||||
}
|
}
|
||||||
DeviceMap::iterator it = d->devices.find(deviceId);
|
DeviceMap::iterator it = d->devices.find(deviceId);
|
||||||
if (it != d->devices.end()) {
|
if (it != d->devices.end()) {
|
||||||
it->second->lock(); //device locked
|
it->second->lock(); //device locked TODO, nog här...
|
||||||
device = it->second;
|
device = it->second;
|
||||||
}
|
}
|
||||||
//devices unlocked
|
//devices unlocked
|
||||||
|
@ -320,6 +376,18 @@ int DeviceManager::doAction(int deviceId, int action, unsigned char data){
|
||||||
Controller *controller = d->controllerManager->getBestControllerById(this->getPreferredControllerId(deviceId));
|
Controller *controller = d->controllerManager->getBestControllerById(this->getPreferredControllerId(deviceId));
|
||||||
if(controller){
|
if(controller){
|
||||||
int retval = device->doAction(action, data, controller);
|
int retval = device->doAction(action, data, controller);
|
||||||
|
if(retval == TELLSTICK_SUCCESS){
|
||||||
|
std::wstring datastring = TelldusCore::Message::charUnsignedToWstring(data);
|
||||||
|
device->setLastSentCommand(action, datastring);
|
||||||
|
device->unlock();
|
||||||
|
{
|
||||||
|
//new lock, for setting (all other locks are unlocked)
|
||||||
|
//TODO, it MAY be inconsistency between stored values and device values here... change something?
|
||||||
|
TelldusCore::MutexLocker deviceLocker(&d->lock);
|
||||||
|
d->set.setDeviceState(deviceId, action, datastring);
|
||||||
|
}
|
||||||
|
//TODO: Signal event, status change?
|
||||||
|
}
|
||||||
device->unlock();
|
device->unlock();
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,8 @@ public:
|
||||||
int getNumberOfDevices(void);
|
int getNumberOfDevices(void);
|
||||||
int addDevice();
|
int addDevice();
|
||||||
int getDeviceId(int deviceIndex);
|
int getDeviceId(int deviceIndex);
|
||||||
|
int getDeviceLastSentCommand(int deviceId, int methodsSupported);
|
||||||
|
int setDeviceLastSentCommand(int deviceId, int command, std::wstring value);
|
||||||
std::wstring getDeviceModel(int deviceId);
|
std::wstring getDeviceModel(int deviceId);
|
||||||
int setDeviceModel(int deviceId, std::wstring model);
|
int setDeviceModel(int deviceId, std::wstring model);
|
||||||
std::wstring getDeviceName(int deviceId);
|
std::wstring getDeviceName(int deviceId);
|
||||||
|
@ -20,6 +22,7 @@ public:
|
||||||
int setDeviceParameter(int deviceId, std::wstring name, std::wstring value);
|
int setDeviceParameter(int deviceId, std::wstring name, std::wstring value);
|
||||||
std::wstring getDeviceProtocol(int deviceId);
|
std::wstring getDeviceProtocol(int deviceId);
|
||||||
int setDeviceProtocol(int deviceId, std::wstring name);
|
int setDeviceProtocol(int deviceId, std::wstring name);
|
||||||
|
std::wstring getDeviceStateValue(int deviceId);
|
||||||
int getDeviceType(int deviceId);
|
int getDeviceType(int deviceId);
|
||||||
int getPreferredControllerId(int deviceId);
|
int getPreferredControllerId(int deviceId);
|
||||||
int removeDevice(int deviceId);
|
int removeDevice(int deviceId);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue