/* Send the corresponding wave signal based on the plug code and the action. */ void sendSequence(unsigned short plug_code, int action) { /* Start the sequence Send House code + Switch code + ON/OFF code + Sync code */ // Validate plug code is different than zero. if (plug_code) { printf("%hx\n", plug_code); unsigned short idx = 0x0400; // Check every bit of the code and send the correspondent signal. // At the end, send the desired action, followed with the // synchronization sequence. do { idx = idx>>1; if(plug_code & idx) { sendHigh(); } else { sendLow(); } } while(!(idx & 0x0001)); if(action == TYPE_SWITCH_ON) { sendOn(); } else { sendOff(); } sendSync(); } }
void Otax::decideWhatToDo() { #ifdef DEBUG_OTAX Serial.print("OTAX RX "); Serial.println(data, HEX); #endif state = OTAX_UNKNOWN; switch (data) { case 0xDB2: // remote set on NORMAL mode sent cmd "ON" case 0xDB4: // remote set on NORMAL mode sent cmd "OFF" case 0xDB6: // remote manual end-of-msg profile=OTAX_NOPROXY; // on a passé la télécommande en mode manuel, on ne fait plus rien break; // on s'arrete de transmettre (relayer/modifier) à la chaudière case 0xCB2: profile=OTAX_PROXY; rx=OTAX_RXON; break; // remote set on PC mode sent cmd "ON" case 0xCB4: profile=OTAX_PROXY; rx=OTAX_RXOFF; break; // remote set on PC mode sent cmd "OFF" case 0xCB6: profile=OTAX_PROXY; break; // remote PC end-of-msg // si on recoit CB2,CB4,CB6: la télécommande est en position "PC" } if ((profile == OTAX_PROXY) && (lastTXtime + 60000 < millis()) && (lastRXtime + 10000 < millis())) { // si on a envoyé il y a plus de 60s et reçu depuis plus de 10s if (( (rx == OTAX_RXON)&&(force==OTAX_DONTFORCE)) || (force==OTAX_FORCEON)) { // ici on peut ajouter || temp < tempdemandee (ajouter une tolerance à la montée/descente) Serial.println("TXch ON"); sendOn(); } else if (( (rx == OTAX_RXOFF)&&(force==OTAX_DONTFORCE)) || (force==OTAX_FORCEOFF)) { // ici on peut ajouter || temp > tempdemandee (ajouter une tolerance à la montée/descente) Serial.println("TXch OFF"); sendOff(); } lastTXtime = millis(); } }
XAirAuxBlock::XAirAuxBlock(MainController* controller, QString uid) : OneInputBlock(controller, uid) , m_panNode(nullptr) , m_onNode(nullptr) , m_channelNumber(this, "channelNumber", 1, 1, 32) , m_bus(this, "bus", 0, 0, 16) , m_faderPos(this, "faderPos", 0.0, 0, 1) , m_pan(this, "pan", 0.5) , m_boost(this, "boost", true) , m_on(this, "on", true) , m_pauseValueTransmission(false) { m_heightIsResizable = true; m_panNode = createInputNode("panNode"); m_onNode = createInputNode("onNode"); m_onNode->enableImpulseDetection(); connect(m_onNode, &NodeBase::impulseBegin, [this](){ m_on = true; }); connect(m_onNode, &NodeBase::impulseEnd, [this](){ m_on = false; }); m_subscribeRefreshTimer.setInterval(10000); // 10s connect(&m_subscribeRefreshTimer, SIGNAL(timeout()), this, SLOT(updateSubscription())); m_subscribeRefreshTimer.start(); connect(&m_faderPos, SIGNAL(valueChanged()), this, SIGNAL(decibelChanged())); connect(&m_label, SIGNAL(valueChanged()), this, SLOT(sendName())); connect(&m_faderPos, SIGNAL(valueChanged()), this, SLOT(sendFaderPos())); connect(&m_pan, SIGNAL(valueChanged()), this, SLOT(sendPan())); connect(&m_on, SIGNAL(valueChanged()), this, SLOT(sendOn())); connect(&m_channelNumber, SIGNAL(valueChanged()), this, SLOT(retrieveStateFromConsole())); connect(&m_bus, SIGNAL(valueChanged()), this, SLOT(retrieveStateFromConsole())); connect(m_inputNode, &NodeBase::dataChanged, [this](){ m_faderPos.setValue(m_inputNode->getValue()); }); connect(m_panNode, &NodeBase::dataChanged, [this](){ m_pan.setValue(m_panNode->getValue()); }); connect(controller->audioConsole(), SIGNAL(messageReceived(OSCMessage)), this, SLOT(onMessageReceived(OSCMessage))); }