Added protocol SilvanChip. Right now it only work with a TellStick Duo.
This commit is contained in:
parent
6ace9fb071
commit
a049d60090
4 changed files with 173 additions and 0 deletions
|
@ -16,6 +16,7 @@ SET( telldus-core_SRCS
|
||||||
DeviceFuhaote.cpp
|
DeviceFuhaote.cpp
|
||||||
DeviceGroup.cpp
|
DeviceGroup.cpp
|
||||||
DeviceIkea.cpp
|
DeviceIkea.cpp
|
||||||
|
DeviceSilvanChip.cpp
|
||||||
DeviceNexa.cpp
|
DeviceNexa.cpp
|
||||||
DeviceRisingSun.cpp
|
DeviceRisingSun.cpp
|
||||||
DeviceSartano.cpp
|
DeviceSartano.cpp
|
||||||
|
|
137
telldus-core/driver/libtelldus-core/DeviceSilvanChip.cpp
Normal file
137
telldus-core/driver/libtelldus-core/DeviceSilvanChip.cpp
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
#include "DeviceSilvanChip.h"
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
using namespace TelldusCore;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
DeviceSilvanChip::DeviceSilvanChip(int id, const std::string &model, const std::string &name)
|
||||||
|
:Device(id, model, name)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DeviceSilvanChip::~DeviceSilvanChip(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DeviceSilvanChip::setHouse(const std::string &strNewHouse) {
|
||||||
|
intHouse = atoi(strNewHouse.c_str());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DeviceSilvanChip::setDeviceParameter(const std::string &strName, const std::string &strValue) {
|
||||||
|
if (strName.compare("house") == 0) {
|
||||||
|
return setHouse(strValue);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Turn on this device
|
||||||
|
*/
|
||||||
|
int DeviceSilvanChip::turnOn(Controller *controller){
|
||||||
|
|
||||||
|
std::string strCode = getStringCode(controller, TELLSTICK_TURNON);
|
||||||
|
|
||||||
|
return controller->send(strCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Turn off this device
|
||||||
|
*/
|
||||||
|
int DeviceSilvanChip::turnOff(Controller *controller){
|
||||||
|
std::string strCode = getStringCode(controller, TELLSTICK_TURNOFF);
|
||||||
|
|
||||||
|
return controller->send(strCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
int DeviceSilvanChip::learn(Controller *controller) {
|
||||||
|
std::string strCode = getStringCode(controller, TELLSTICK_LEARN);
|
||||||
|
|
||||||
|
return controller->send(strCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DeviceSilvanChip::parameterMatches( const std::string &name, const std::string &value ) const {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Has the device got the method?
|
||||||
|
*/
|
||||||
|
int DeviceSilvanChip::methods(){
|
||||||
|
return (TELLSTICK_TURNON | TELLSTICK_TURNOFF | TELLSTICK_LEARN);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string DeviceSilvanChip::getStringCode(Controller *controller, int method){
|
||||||
|
const unsigned char S = 100;
|
||||||
|
const unsigned char L = 255;
|
||||||
|
const std::string LONG = "\255\1\200";
|
||||||
|
|
||||||
|
const std::string ONE = LONG + "\100";
|
||||||
|
const std::string ZERO = "\100" + LONG;
|
||||||
|
std::string strReturn = "R\1S";
|
||||||
|
|
||||||
|
strReturn.append(1, S);
|
||||||
|
strReturn.append(1, L);
|
||||||
|
strReturn.append(1, 1);
|
||||||
|
strReturn.append(1, L);
|
||||||
|
strReturn.append(1, 1);
|
||||||
|
strReturn.append(1, L);
|
||||||
|
strReturn.append(1, 1);
|
||||||
|
strReturn.append(1, L);
|
||||||
|
strReturn.append(1, 1);
|
||||||
|
strReturn.append(1, L);
|
||||||
|
strReturn.append(1, 1);
|
||||||
|
strReturn.append(1, L);
|
||||||
|
strReturn.append(1, 1);
|
||||||
|
strReturn.append(1, L);
|
||||||
|
strReturn.append(1, 1);
|
||||||
|
strReturn.append(1, L);
|
||||||
|
strReturn.append(1, 1);
|
||||||
|
strReturn.append(1, L);
|
||||||
|
strReturn.append(1, 1);
|
||||||
|
strReturn.append(1, L);
|
||||||
|
strReturn.append(1, 1);
|
||||||
|
strReturn.append(1, L);
|
||||||
|
strReturn.append(1, 1);
|
||||||
|
strReturn.append(1, L);
|
||||||
|
strReturn.append(1, 1);
|
||||||
|
strReturn.append(1, S);
|
||||||
|
|
||||||
|
for( int i = 19; i >= 0; --i ) {
|
||||||
|
if (intHouse & (1 << i)) {
|
||||||
|
strReturn.append(ONE);
|
||||||
|
} else {
|
||||||
|
strReturn.append(ZERO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (method == TELLSTICK_TURNON) {
|
||||||
|
strReturn.append(ZERO);
|
||||||
|
strReturn.append(ZERO);
|
||||||
|
strReturn.append(ONE);
|
||||||
|
strReturn.append(ZERO);
|
||||||
|
} else if (method == TELLSTICK_LEARN) {
|
||||||
|
strReturn.append(ZERO);
|
||||||
|
strReturn.append(ZERO);
|
||||||
|
strReturn.append(ZERO);
|
||||||
|
strReturn.append(ONE);
|
||||||
|
} else {
|
||||||
|
strReturn.append(ONE);
|
||||||
|
strReturn.append(ZERO);
|
||||||
|
strReturn.append(ZERO);
|
||||||
|
strReturn.append(ZERO);
|
||||||
|
}
|
||||||
|
|
||||||
|
strReturn.append(ZERO);
|
||||||
|
strReturn.append("+");
|
||||||
|
return strReturn;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string DeviceSilvanChip::getProtocol() const {
|
||||||
|
return "silvanchip";
|
||||||
|
}
|
||||||
|
|
30
telldus-core/driver/libtelldus-core/DeviceSilvanChip.h
Normal file
30
telldus-core/driver/libtelldus-core/DeviceSilvanChip.h
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
#pragma once
|
||||||
|
#include "Device.h"
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace TelldusCore {
|
||||||
|
|
||||||
|
class DeviceSilvanChip : public Device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DeviceSilvanChip(int id, const std::string &model, const std::string &name);
|
||||||
|
virtual ~DeviceSilvanChip(void);
|
||||||
|
|
||||||
|
virtual int methods();
|
||||||
|
virtual std::string getProtocol() const;
|
||||||
|
virtual bool parameterMatches( const std::string &name, const std::string &value ) const;
|
||||||
|
|
||||||
|
bool setHouse(const std::string &strNewHouse);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual bool setDeviceParameter(const std::string &strName, const std::string &strValue);
|
||||||
|
|
||||||
|
virtual int turnOn(Controller *controller);
|
||||||
|
virtual int turnOff(Controller *controller);
|
||||||
|
virtual int learn(Controller *controller);
|
||||||
|
|
||||||
|
std::string getStringCode(Controller *controller, int method);
|
||||||
|
int intHouse;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -16,6 +16,7 @@
|
||||||
#include "DeviceEverflourish.h"
|
#include "DeviceEverflourish.h"
|
||||||
#include "DeviceFuhaote.h"
|
#include "DeviceFuhaote.h"
|
||||||
#include "DeviceGroup.h"
|
#include "DeviceGroup.h"
|
||||||
|
#include "DeviceSilvanChip.h"
|
||||||
#include "DeviceNexa.h"
|
#include "DeviceNexa.h"
|
||||||
#include "DeviceRisingSun.h"
|
#include "DeviceRisingSun.h"
|
||||||
#include "DeviceWaveman.h"
|
#include "DeviceWaveman.h"
|
||||||
|
@ -105,6 +106,10 @@ Device *Manager::getDevice(int intDeviceId){
|
||||||
dev = new DeviceFuhaote(intDeviceId, strModel, strName);
|
dev = new DeviceFuhaote(intDeviceId, strModel, strName);
|
||||||
((DeviceFuhaote*)dev)->setCode(settings.getDeviceParameter(intDeviceId, "code"));
|
((DeviceFuhaote*)dev)->setCode(settings.getDeviceParameter(intDeviceId, "code"));
|
||||||
|
|
||||||
|
} else if (strcasecmp(protocol.c_str(), "silvanchip") == 0) {
|
||||||
|
dev = new DeviceSilvanChip(intDeviceId, strModel, strName);
|
||||||
|
((DeviceSilvanChip*)dev)->setHouse(settings.getDeviceParameter(intDeviceId, "house"));
|
||||||
|
|
||||||
} else if (strcasecmp(protocol.c_str(), "group") == 0) {
|
} else if (strcasecmp(protocol.c_str(), "group") == 0) {
|
||||||
dev = new DeviceGroup(intDeviceId, strModel, strName);
|
dev = new DeviceGroup(intDeviceId, strModel, strName);
|
||||||
((DeviceGroup*)dev)->setDevices(settings.getDeviceParameter(intDeviceId, "devices"));
|
((DeviceGroup*)dev)->setDevices(settings.getDeviceParameter(intDeviceId, "devices"));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue