Commit a3191e9d authored by luz's avatar luz

Mostly working shadow behaviour, small Angle adjustments not yet ok

parent c440305b
This diff is collapsed.
......@@ -158,15 +158,23 @@ namespace p44 {
/// @name persistent settings
/// @{
MLMicroSeconds openTime;
MLMicroSeconds closeTime;
MLMicroSeconds angleOpenTime;
MLMicroSeconds angleCloseTime;
double openTime;
double closeTime;
double angleOpenTime;
double angleCloseTime;
/// @}
/// @name internal volatile state
/// @{
MLMicroSeconds startedMoving; ///< if not Never, time when last moving command was issued
double startingPosition;
double startingAngle;
int movingDirection; ///< current direction: 0=stopped, -1=moving down, +1=moving up
bool movingAngle; ///< set when movement is for adjusting angle
long movingTicket;
bool updatingMovement;
bool needAnotherShortMove;
/// @}
......@@ -271,6 +279,14 @@ namespace p44 {
private:
void updateMovement();
void beginMoving();
void endMoving();
void endedMoving();
void stopMovement();
double getPosition(bool aAlwaysCalculated);
double getAngle(bool aAlwaysCalculated);
};
typedef boost::intrusive_ptr<ShadowBehaviour> ShadowBehaviourPtr;
......
......@@ -718,7 +718,7 @@ void EnoceanA52001Handler::collectOutgoingMessageData(Esp3PacketPtr &aEsp3Packet
data |= DBMASK(1,5); // service: open
// next is closing
serviceState = service_closevalve;
device.needOutgoingUpdate();
device.needOutgoingUpdate(NULL);
}
else if (serviceState==service_closevalve) {
// trigger force fully closed
......@@ -726,7 +726,7 @@ void EnoceanA52001Handler::collectOutgoingMessageData(Esp3PacketPtr &aEsp3Packet
data |= DBMASK(1,4); // service: close
// next is normal operation again
serviceState = service_idle;
device.needOutgoingUpdate();
device.needOutgoingUpdate(NULL);
}
}
else {
......
......@@ -201,42 +201,56 @@ EnoceanChannelHandlerPtr EnoceanDevice::channelForBehaviour(const DsBehaviour *a
void EnoceanDevice::needOutgoingUpdate()
void EnoceanDevice::needOutgoingUpdate(SimpleCB aDoneCB)
{
// anyway, we need an update
pendingDeviceUpdate = true;
// send it right away when possible (line powered devices only)
if (alwaysUpdateable) {
sendOutgoingUpdate();
sendOutgoingUpdate(aDoneCB);
}
else {
LOG(LOG_NOTICE,"EnOcean device %s: flagged output updated pending -> outgoing package will be sent later\n", shortDesc().c_str());
if (aDoneCB) aDoneCB();
}
}
void EnoceanDevice::sendOutgoingUpdate()
void EnoceanDevice::sendOutgoingUpdate(SimpleCB aDoneCB)
{
if (pendingDeviceUpdate) {
// clear flag now, so handlers can trigger yet another update in collectOutgoingMessageData() if needed (e.g. heating valve service sequence)
pendingDeviceUpdate = false; // done
// collect data from all channels to compose an outgoing message
Esp3PacketPtr outgoingEsp3Packet;
for (EnoceanChannelHandlerVector::iterator pos = channels.begin(); pos!=channels.end(); ++pos) {
// channels may...
// - issue actions directly to the hardware (separate outgoing messages or sequences of messages
(*pos)->issueDirectChannelActions();
// - and/or collect data for a single outgoing packet carrying data for more than one channel
(*pos)->collectOutgoingMessageData(outgoingEsp3Packet);
}
if (outgoingEsp3Packet) {
EnoceanChannelHandlerVector::iterator pos = channels.begin();
nextChannelUpdate(pos, aDoneCB, outgoingEsp3Packet);
}
else {
if (aDoneCB) aDoneCB();
}
}
void EnoceanDevice::nextChannelUpdate(EnoceanChannelHandlerVector::iterator aPos, SimpleCB aDoneCB, Esp3PacketPtr aOutgoingEsp3Packet)
{
if (aPos!=channels.end()) {
// - collect data for a single outgoing packet carrying data for more than one channel
(*aPos)->collectOutgoingMessageData(aOutgoingEsp3Packet);
// - and/or issue actions directly to the hardware (separate outgoing messages or sequences of messages
(*aPos)->issueDirectChannelActions(boost::bind(&EnoceanDevice::nextChannelUpdate, this, ++aPos, aDoneCB, aOutgoingEsp3Packet));
}
else {
if (aOutgoingEsp3Packet) {
// set destination
outgoingEsp3Packet->setRadioDestination(enoceanAddress); // the target is the device I manage
outgoingEsp3Packet->finalize();
LOG(LOG_INFO, "EnOcean device %s: sending outgoing packet:\n%s", shortDesc().c_str(), outgoingEsp3Packet->description().c_str());
aOutgoingEsp3Packet->setRadioDestination(enoceanAddress); // the target is the device I manage
aOutgoingEsp3Packet->finalize();
LOG(LOG_INFO, "EnOcean device %s: sending outgoing packet:\n%s", shortDesc().c_str(), aOutgoingEsp3Packet->description().c_str());
// send it
getEnoceanDeviceContainer().enoceanComm.sendPacket(outgoingEsp3Packet);
getEnoceanDeviceContainer().enoceanComm.sendPacket(aOutgoingEsp3Packet);
}
// done now
if (aDoneCB) aDoneCB();
}
}
......@@ -253,12 +267,21 @@ void EnoceanDevice::applyChannelValues(SimpleCB aDoneCB, bool aForDimming)
}
if (pendingDeviceUpdate) {
// we need to apply data
needOutgoingUpdate();
needOutgoingUpdate(boost::bind(&EnoceanDevice::channelValuesApplied, this, aDoneCB, aForDimming));
}
else {
channelValuesApplied(aDoneCB, aForDimming);
}
}
void EnoceanDevice::channelValuesApplied(SimpleCB aDoneCB, bool aForDimming)
{
inherited::applyChannelValues(aDoneCB, aForDimming);
}
void EnoceanDevice::handleRadioPacket(Esp3PacketPtr aEsp3PacketPtr)
{
LOG(LOG_INFO, "EnOcean device %s: now starts processing packet:\n%s", shortDesc().c_str(), aEsp3PacketPtr->description().c_str());
......@@ -274,7 +297,7 @@ void EnoceanDevice::handleRadioPacket(Esp3PacketPtr aEsp3PacketPtr)
// send updates, if any
pendingDeviceUpdate = true; // set it in case of updateAtEveryReceive (so message goes out even if no changes pending)
LOG(LOG_NOTICE,"EnOcean device %s: pending output update is now sent to device\n", shortDesc().c_str());
sendOutgoingUpdate();
sendOutgoingUpdate(NULL);
}
}
......
......@@ -76,8 +76,9 @@ namespace p44 {
/// send out actions directly needed to propagate channel value to this device.
/// This is for devices which need a specific telegram or sequence of telegrams to update the channel value
/// @param aDoneCB if not NULL, must be called when values are applied
/// @note non-outputs and outputs that collect data with collectOutgoingMessageData() will usually do nothing in this method
virtual void issueDirectChannelActions() { /* NOP */ };
virtual void issueDirectChannelActions(SimpleCB aDoneCB) { if (aDoneCB) aDoneCB(); /* NOP */ };
/// check if channel is alive (for regularily sending sensors: has received life sign within timeout window)
virtual bool isAlive() { return true; } // assume alive by default
......@@ -251,12 +252,12 @@ namespace p44 {
/// signal that we need an outgoing packet at next possible occasion
/// @note will cause output data from channel handlers to be collected
/// @note can be called from channel handlers to trigger another update after the current one
void needOutgoingUpdate();
void needOutgoingUpdate(SimpleCB aDoneCB);
/// send outgoing packet updating outputs and device settings
/// @note do not call this directly, use needOutgoingUpdate() instead to make
/// sure outgoing package is sent at appropriate time for device (e.g. just after receiving for battery powered devices)
void sendOutgoingUpdate();
void sendOutgoingUpdate(SimpleCB aDoneCB);
/// device specific teach in response
/// @note will be called from newDevice() when created device needs a teach-in response
......@@ -333,6 +334,8 @@ namespace p44 {
/// get handler associated with a behaviour
EnoceanChannelHandlerPtr channelForBehaviour(const DsBehaviour *aBehaviourP);
void channelValuesApplied(SimpleCB aDoneCB, bool aForDimming);
void nextChannelUpdate(EnoceanChannelHandlerVector::iterator aPos, SimpleCB aDoneCB, Esp3PacketPtr aOutgoingEsp3Packet);
};
......
......@@ -334,6 +334,11 @@ void EnoceanDeviceContainer::handleRadioPacket(Esp3PacketPtr aEsp3PacketPtr, Err
LOG(LOG_INFO, "Radio packet error: %s\n", aError->description().c_str());
return;
}
// suppress radio packets send by one of my secondary IDs
if ((aEsp3PacketPtr->radioSender() & 0xFFFFFF80) == enoceanComm.idBase()) {
LOG(LOG_DEBUG, "Suppressed radio packet coming from one of my own base IDs: %0lX\n", aEsp3PacketPtr->radioSender());
return;
}
// check learning mode
if (learningMode) {
// no learn/unlearn actions detected so far
......
......@@ -24,11 +24,11 @@
#define ALWAYS_DEBUG 0
// - set FOCUSLOGLEVEL to non-zero log level (usually, 5,6, or 7==LOG_DEBUG) to get focus (extensive logging) for this file
// Note: must be before including "logger.hpp" (or anything that includes "logger.hpp")
#define FOCUSLOGLEVEL 0
#define FOCUSLOGLEVEL 6
#include "enoceanremotecontrol.hpp"
#include "outputbehaviour.hpp"
#include "shadowbehaviour.hpp"
#include "enoceandevicecontainer.hpp"
using namespace p44;
......@@ -115,7 +115,7 @@ EnoceanDevicePtr EnoceanRemoteControlHandler::newDevice(
// is shadow
newDev->setPrimaryGroup(group_grey_shadow);
// function
newDev->setFunctionDesc("blind remote control");
newDev->setFunctionDesc("simple blind control");
// is always updateable (no need to wait for incoming data)
newDev->setAlwaysUpdateable();
// - add generic output behaviour
......@@ -129,6 +129,32 @@ EnoceanDevicePtr EnoceanRemoteControlHandler::newDevice(
newHandler->behaviour = ob;
newDev->addChannelHandler(newHandler);
}
else if (EEP_TYPE(aEEProfile)==PSEUDO_TYPE_BLIND) {
// simple blind controller
newDev = EnoceanDevicePtr(new EnoceanRemoteControlDevice(aClassContainerP));
// standard single-value scene table (SimpleScene)
newDev->installSettings(DeviceSettingsPtr(new SceneDeviceSettings(*newDev)));
// assign channel and address
newDev->setAddressingInfo(aAddress, aSubDeviceIndex);
// assign EPP information
newDev->setEEPInfo(aEEProfile, aEEManufacturer);
// is shadow
newDev->setPrimaryGroup(group_grey_shadow);
// function
newDev->setFunctionDesc("blind control");
// is always updateable (no need to wait for incoming data)
newDev->setAlwaysUpdateable();
// - add shadow behaviour
ShadowBehaviourPtr sb = ShadowBehaviourPtr(new ShadowBehaviour(*newDev.get()));
sb->setHardwareOutputConfig(outputFunction_positional, usage_undefined, false, -1);
sb->setHardwareName("blind");
sb->position->syncChannelValue(100); // assume fully up at beginning
sb->angle->syncChannelValue(100); // assume fully open at beginning
// - create PSEUDO_TYPE_SIMPLEBLIND specific handler for output
EnoceanBlindHandlerPtr newHandler = EnoceanBlindHandlerPtr(new EnoceanBlindHandler(*newDev.get()));
newHandler->behaviour = sb;
newDev->addChannelHandler(newHandler);
}
}
}
// remote control devices never need a teach-in response
......@@ -151,7 +177,7 @@ string EnoceanSimpleBlindHandler::shortDesc()
}
void EnoceanSimpleBlindHandler::issueDirectChannelActions()
void EnoceanSimpleBlindHandler::issueDirectChannelActions(SimpleCB aDoneCB)
{
// veeery simplistic behaviour: value>0.5 means: blind down, otherwise: blind up
OutputBehaviourPtr ob = boost::dynamic_pointer_cast<OutputBehaviour>(behaviour);
......@@ -168,12 +194,12 @@ void EnoceanSimpleBlindHandler::issueDirectChannelActions()
packet->setRadioStatus(status_NU|status_T21); // pressed
packet->setRadioSender(device.getAddress()); // my own ID base derived address that is learned into this actor
device.getEnoceanDeviceContainer().enoceanComm.sendPacket(packet);
MainLoop::currentMainLoop().executeOnce(boost::bind(&EnoceanSimpleBlindHandler::sendReleaseTelegram, this), 1*Second);
MainLoop::currentMainLoop().executeOnce(boost::bind(&EnoceanSimpleBlindHandler::sendReleaseTelegram, this, aDoneCB), 1*Second);
}
}
void EnoceanSimpleBlindHandler::sendReleaseTelegram()
void EnoceanSimpleBlindHandler::sendReleaseTelegram(SimpleCB aDoneCB)
{
Esp3PacketPtr packet = Esp3PacketPtr(new Esp3Packet());
packet->initForRorg(rorg_RPS);
......@@ -182,6 +208,112 @@ void EnoceanSimpleBlindHandler::sendReleaseTelegram()
packet->setRadioStatus(status_T21); // released
packet->setRadioSender(device.getAddress()); // my own ID base derived address that is learned into this actor
device.getEnoceanDeviceContainer().enoceanComm.sendPacket(packet);
if (aDoneCB) aDoneCB();
}
#pragma mark - time controller blind handler
EnoceanBlindHandler::EnoceanBlindHandler(EnoceanDevice &aDevice) :
inherited(aDevice),
movingDirection(0),
commandTicket(0),
missedUpdate(false)
{
}
string EnoceanBlindHandler::shortDesc()
{
return "Blind Control";
}
#define LONGPRESS_TIME (1*Second)
#define SHORTPRESS_TIME (200*MilliSecond)
void EnoceanBlindHandler::issueDirectChannelActions(SimpleCB aDoneCB)
{
// shadow behaviour
ShadowBehaviourPtr sb = boost::dynamic_pointer_cast<ShadowBehaviour>(behaviour);
if (sb) {
// ask shadow behaviour for current movement direction
// - 0=stopped, -1=moving down, +1=moving up
int newDirection = sb->currentMovingDirection();
FOCUSLOG("blind action requested: %d (current: %d)\n", newDirection, movingDirection);
if (newDirection!=movingDirection) {
int previousDirection = movingDirection;
movingDirection = newDirection;
// needs change
FOCUSLOG("- needs action:\n");
if (newDirection==0) {
// requesting stop:
if (commandTicket) {
// start button still pressed
// - cancel releasing it after logpress time
MainLoop::currentMainLoop().cancelExecutionTicket(commandTicket);
// - but release it right now
buttonAction(newDirection>0, false);
// - and exit normally (with callback executed)
}
else {
// issue short command in current moving direction - if already at end of move,
// this will not change anything, otherwise the movement will stop
// - press button
buttonAction(previousDirection>0, true);
commandTicket = MainLoop::currentMainLoop().executeOnce(boost::bind(&EnoceanBlindHandler::sendReleaseTelegram, this, aDoneCB), SHORTPRESS_TIME);
// callback only later when button is released
return;
}
}
else {
// requesting start
// - press button
buttonAction(newDirection>0, true);
// - release latest after blind has entered permanent move mode (but maybe earlier)
commandTicket = MainLoop::currentMainLoop().executeOnce(boost::bind(&EnoceanBlindHandler::sendReleaseTelegram, this, SimpleCB()), LONGPRESS_TIME);
// - but consider done after shortest possible press (earlier)
// Note: we will NOT get called again until aDoneCB has been called, so this holds off actions for at least SHORTPRESS_TIME
MainLoop::currentMainLoop().executeOnce(boost::bind(aDoneCB), SHORTPRESS_TIME);
// callback only later when button is released
return;
}
}
}
// normal exit, confirm it done
if (aDoneCB) aDoneCB();
}
void EnoceanBlindHandler::sendReleaseTelegram(SimpleCB aDoneCB)
{
commandTicket = 0;
// just release
buttonAction(false, false);
// callback if set
if (aDoneCB) aDoneCB();
}
void EnoceanBlindHandler::buttonAction(bool aBlindUp, bool aPress)
{
FOCUSLOG("- %s simulated blind %s button\n", aPress ? "PRESSING" : "RELEASING", aBlindUp ? "UP" : "DOWN");
Esp3PacketPtr packet = Esp3PacketPtr(new Esp3Packet());
packet->initForRorg(rorg_RPS);
packet->setRadioDestination(EnoceanBroadcast);
if (aPress) {
packet->radioUserData()[0] = aBlindUp ? 0x30 : 0x10; // pressing left button, up or down
packet->setRadioStatus(status_NU|status_T21); // pressed
}
else {
packet->radioUserData()[0] = 0x00; // release
packet->setRadioStatus(status_T21); // released
}
packet->setRadioSender(device.getAddress()); // my own ID base derived address that is learned into this actor
device.getEnoceanDeviceContainer().enoceanComm.sendPacket(packet);
}
......
......@@ -35,6 +35,7 @@ namespace p44 {
#define PSEUDO_RORG_REMOTECONTROL 0xFF
#define PSEUDO_FUNC_SWITCHCONTROL 0xF6
#define PSEUDO_TYPE_SIMPLEBLIND 0xFF // simplistic Fully-Up/Fully-Down blind controller
#define PSEUDO_TYPE_BLIND 0xFE // time controlled blind with angle support
/// remote control type device (using base id to communicate with actor)
class EnoceanRemoteControlHandler : public EnoceanChannelHandler
......@@ -80,7 +81,8 @@ namespace p44 {
/// send out actions directly needed to propagate channel value to this device.
/// This is for devices which need a specific telegram or sequence of telegrams to update the channel value
virtual void issueDirectChannelActions();
/// @param aDoneCB if not NULL, must be called when values are applied
virtual void issueDirectChannelActions(SimpleCB aDoneCB);
protected:
......@@ -95,13 +97,49 @@ namespace p44 {
private:
void sendReleaseTelegram();
void sendReleaseTelegram(SimpleCB aDoneCB);
};
typedef boost::intrusive_ptr<EnoceanSimpleBlindHandler> EnoceanSimpleBlindHandlerPtr;
/// full blind controller with angle support
class EnoceanBlindHandler : public EnoceanRemoteControlHandler
{
typedef EnoceanRemoteControlHandler inherited;
friend class EnoceanRemoteControlHandler;
int movingDirection; ///< currently moving direction 0=stopped, -1=moving down, +1=moving up
long commandTicket;
bool missedUpdate;
/// send out actions directly needed to propagate channel value to this device.
/// This is for devices which need a specific telegram or sequence of telegrams to update the channel value
/// @param aDoneCB if not NULL, must be called when values are applied
virtual void issueDirectChannelActions(SimpleCB aDoneCB);
protected:
/// private constructor, create new channels using factory static method
EnoceanBlindHandler(EnoceanDevice &aDevice);
public:
/// short (text without LFs!) description of object, mainly for referencing it in log messages
/// @return textual description of object
virtual string shortDesc();
private:
void sendReleaseTelegram(SimpleCB aDoneCB);
void buttonAction(bool aBlindUp, bool aPress);
};
typedef boost::intrusive_ptr<EnoceanBlindHandler> EnoceanBlindHandlerPtr;
class EnoceanRemoteControlDevice : public EnoceanDevice
......
......@@ -133,6 +133,8 @@
ED911D2E1B11D97700B18624 /* ledchaindevicecontainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED911D281B11D97700B18624 /* ledchaindevicecontainer.cpp */; };
ED911D2F1B11D97700B18624 /* ledchaindevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED911D291B11D97700B18624 /* ledchaindevice.cpp */; };
ED911D311B11D97700B18624 /* ws281xcomm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED911D2C1B11D97700B18624 /* ws281xcomm.cpp */; };
ED911D3E1B14BFB900B18624 /* shadowbehaviour.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED911D3D1B14BFB900B18624 /* shadowbehaviour.cpp */; };
ED911D3F1B14BFB900B18624 /* shadowbehaviour.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED911D3D1B14BFB900B18624 /* shadowbehaviour.cpp */; };
EDADCADB1846373300297214 /* apivalue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDADCAD91846373300297214 /* apivalue.cpp */; };
EDADCADC1846373300297214 /* apivalue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDADCAD91846373300297214 /* apivalue.cpp */; };
EDB1893117D4B7330088B6A5 /* ssdpsearch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDB1892F17D4B7330088B6A5 /* ssdpsearch.cpp */; };
......@@ -383,6 +385,8 @@
ED911D2A1B11D97700B18624 /* ledchaindevice.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ledchaindevice.hpp; path = ledchain/ledchaindevice.hpp; sourceTree = "<group>"; };
ED911D2C1B11D97700B18624 /* ws281xcomm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ws281xcomm.cpp; path = ledchain/ws281xcomm.cpp; sourceTree = "<group>"; };
ED911D2D1B11D97700B18624 /* ws281xcomm.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ws281xcomm.hpp; path = ledchain/ws281xcomm.hpp; sourceTree = "<group>"; };
ED911D3C1B14BFB900B18624 /* shadowbehaviour.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shadowbehaviour.hpp; sourceTree = "<group>"; };
ED911D3D1B14BFB900B18624 /* shadowbehaviour.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shadowbehaviour.cpp; sourceTree = "<group>"; };
EDADCAD91846373300297214 /* apivalue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apivalue.cpp; sourceTree = "<group>"; };
EDADCADA1846373300297214 /* apivalue.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = apivalue.hpp; sourceTree = "<group>"; };
EDB1892F17D4B7330088B6A5 /* ssdpsearch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ssdpsearch.cpp; sourceTree = "<group>"; };
......@@ -558,6 +562,8 @@
ED81338417C72FD9003982CC /* binaryinputbehaviour.hpp */,
ED81338017C72F87003982CC /* sensorbehaviour.cpp */,
ED81338117C72F87003982CC /* sensorbehaviour.hpp */,
ED911D3D1B14BFB900B18624 /* shadowbehaviour.cpp */,
ED911D3C1B14BFB900B18624 /* shadowbehaviour.hpp */,
ED5B29391749446200334C71 /* lightbehaviour.cpp */,
ED5B293A1749446300334C71 /* lightbehaviour.hpp */,
ED7627241920E8F70068D9A3 /* colorlightbehaviour.cpp */,
......@@ -1009,6 +1015,7 @@
ED3126D118318CC100FAF28B /* jsoncomm.cpp in Sources */,
ED3126D318318CC100FAF28B /* binaryinputbehaviour.cpp in Sources */,
ED1F830B185099F300339A22 /* pbufvdcapi.cpp in Sources */,
ED911D3F1B14BFB900B18624 /* shadowbehaviour.cpp in Sources */,
ED1F82F9184E411800339A22 /* vdcapi.proto in Sources */,
ED3126D618318CC100FAF28B /* dsbehaviour.cpp in Sources */,
ED3126D718318CC100FAF28B /* jsonobject.cpp in Sources */,
......@@ -1056,6 +1063,7 @@
ED026CFC171E8D6200AD5FD6 /* devicecontainer.cpp in Sources */,
EDD45C5917808D2F00554A02 /* consoledevice.cpp in Sources */,
ED6FCC8017CB495400267E43 /* enocean4bs.cpp in Sources */,
ED911D3E1B14BFB900B18624 /* shadowbehaviour.cpp in Sources */,
ED026CFF171E8EC200AD5FD6 /* deviceclasscontainer.cpp in Sources */,
ED026D02171E91EB00AD5FD6 /* dalidevicecontainer.cpp in Sources */,
EDB5BC1B17B50E79004DB38D /* fdcomm.cpp in Sources */,
......
......@@ -85,11 +85,11 @@
</CommandLineArgument>
<CommandLineArgument
argument = "-l 7"
isEnabled = "YES">
isEnabled = "NO">
</CommandLineArgument>
<CommandLineArgument
argument = "-l 6"
isEnabled = "NO">
isEnabled = "YES">
</CommandLineArgument>
<CommandLineArgument
argument = "--vdsmnonlocal"
......@@ -117,7 +117,7 @@
</CommandLineArgument>
<CommandLineArgument
argument = "--enocean /dev/cu.usbserial-FTVEQ3US"
isEnabled = "NO">
isEnabled = "YES">
</CommandLineArgument>
<CommandLineArgument
argument = "--enoceanreset gpioNS9XXXX.enoceanreset"
......@@ -137,7 +137,7 @@
</CommandLineArgument>
<CommandLineArgument
argument = "--ledchain 240"
isEnabled = "YES">
isEnabled = "NO">
</CommandLineArgument>
<CommandLineArgument
argument = "--staticdevices"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment