mirror of https://github.com/arendst/Tasmota.git
RC-Switch Protocol Disable via Console
This commit is contained in:
parent
c87374951b
commit
7d19e9b0e2
|
@ -133,6 +133,7 @@ enum {
|
||||||
};
|
};
|
||||||
|
|
||||||
#if not defined( RCSwitchDisableReceiving )
|
#if not defined( RCSwitchDisableReceiving )
|
||||||
|
|
||||||
volatile unsigned long long RCSwitch::nReceivedValue = 0;
|
volatile unsigned long long RCSwitch::nReceivedValue = 0;
|
||||||
volatile unsigned int RCSwitch::nReceivedBitlength = 0;
|
volatile unsigned int RCSwitch::nReceivedBitlength = 0;
|
||||||
volatile unsigned int RCSwitch::nReceivedDelay = 0;
|
volatile unsigned int RCSwitch::nReceivedDelay = 0;
|
||||||
|
@ -145,6 +146,10 @@ const unsigned int RCSwitch::nSeparationLimit = 2600; // 4300 default
|
||||||
// should be set to the minimum value of pulselength * the sync signal
|
// should be set to the minimum value of pulselength * the sync signal
|
||||||
unsigned int RCSwitch::timings[RCSWITCH_MAX_CHANGES];
|
unsigned int RCSwitch::timings[RCSWITCH_MAX_CHANGES];
|
||||||
unsigned int RCSwitch::buftimings[4];
|
unsigned int RCSwitch::buftimings[4];
|
||||||
|
#ifdef BAZMODS
|
||||||
|
uint64_t_t RCSwitch::enabled_protocol_mask;
|
||||||
|
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
RCSwitch::RCSwitch() {
|
RCSwitch::RCSwitch() {
|
||||||
|
@ -155,9 +160,16 @@ RCSwitch::RCSwitch() {
|
||||||
this->nReceiverInterrupt = -1;
|
this->nReceiverInterrupt = -1;
|
||||||
this->setReceiveTolerance(60);
|
this->setReceiveTolerance(60);
|
||||||
RCSwitch::nReceivedValue = 0;
|
RCSwitch::nReceivedValue = 0;
|
||||||
|
#ifdef BAZMODS
|
||||||
|
RCSwitch::enabled_protocol_mask.value = (1ULL << numProto)-1 ;//pow(2,numProto)-1;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#ifdef BAZMODS
|
||||||
|
uint8_t RCSwitch::getNumProtos(){
|
||||||
|
return numProto;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
/**
|
/**
|
||||||
* Sets the protocol to send.
|
* Sets the protocol to send.
|
||||||
*/
|
*/
|
||||||
|
@ -833,11 +845,21 @@ void RECEIVE_ATTR RCSwitch::handleInterrupt() {
|
||||||
repeatCount++;
|
repeatCount++;
|
||||||
// при приеме второго повторного начинаем анализ принятого первым
|
// при приеме второго повторного начинаем анализ принятого первым
|
||||||
if (repeatCount == 1) {
|
if (repeatCount == 1) {
|
||||||
|
#ifdef BAZMODS
|
||||||
|
unsigned long long thismask = 1;
|
||||||
|
#endif
|
||||||
for(unsigned int i = 1; i <= numProto; i++) {
|
for(unsigned int i = 1; i <= numProto; i++) {
|
||||||
if (receiveProtocol(i, changeCount)) {
|
#ifdef BAZMODS
|
||||||
// receive succeeded for protocol i
|
if(enabled_protocol_mask.value & thismask){
|
||||||
break;
|
#endif
|
||||||
|
if (receiveProtocol(i, changeCount)) {
|
||||||
|
// receive succeeded for protocol i
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#ifdef BAZMODS
|
||||||
}
|
}
|
||||||
|
thismask <<= 1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
// очищаем количество повторных пакетов
|
// очищаем количество повторных пакетов
|
||||||
repeatCount = 0;
|
repeatCount = 0;
|
||||||
|
|
|
@ -61,6 +61,17 @@
|
||||||
// Для keeloq нужно увеличить RCSWITCH_MAX_CHANGES до 23+1+66*2+1=157
|
// Для keeloq нужно увеличить RCSWITCH_MAX_CHANGES до 23+1+66*2+1=157
|
||||||
#define RCSWITCH_MAX_CHANGES 67 // default 67
|
#define RCSWITCH_MAX_CHANGES 67 // default 67
|
||||||
|
|
||||||
|
typedef union __uint64
|
||||||
|
{
|
||||||
|
uint64_t value;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32_t low32;
|
||||||
|
uint32_t high32;
|
||||||
|
|
||||||
|
} longs;
|
||||||
|
} uint64_t_t;
|
||||||
|
|
||||||
class RCSwitch {
|
class RCSwitch {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -93,6 +104,10 @@ class RCSwitch {
|
||||||
unsigned int getReceivedDelay();
|
unsigned int getReceivedDelay();
|
||||||
unsigned int getReceivedProtocol();
|
unsigned int getReceivedProtocol();
|
||||||
unsigned int* getReceivedRawdata();
|
unsigned int* getReceivedRawdata();
|
||||||
|
#ifdef BAZMODS
|
||||||
|
uint8_t getNumProtos();
|
||||||
|
static uint64_t_t enabled_protocol_mask; //perhaps need function to change because used in interrupt
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void enableTransmit(int nTransmitterPin);
|
void enableTransmit(int nTransmitterPin);
|
||||||
|
@ -164,7 +179,9 @@ class RCSwitch {
|
||||||
static void handleInterrupt();
|
static void handleInterrupt();
|
||||||
static bool receiveProtocol(const int p, unsigned int changeCount);
|
static bool receiveProtocol(const int p, unsigned int changeCount);
|
||||||
int nReceiverInterrupt;
|
int nReceiverInterrupt;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int nTransmitterPin;
|
int nTransmitterPin;
|
||||||
int nRepeatTransmit;
|
int nRepeatTransmit;
|
||||||
|
|
||||||
|
@ -183,6 +200,8 @@ class RCSwitch {
|
||||||
static unsigned int timings[RCSWITCH_MAX_CHANGES];
|
static unsigned int timings[RCSWITCH_MAX_CHANGES];
|
||||||
// буфер длительностей последних четырех пакетов, [0] - последний
|
// буфер длительностей последних четырех пакетов, [0] - последний
|
||||||
static unsigned int buftimings[4];
|
static unsigned int buftimings[4];
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -222,6 +222,7 @@
|
||||||
#define D_LOG_SOME_SETTINGS_RESET "Some settings have been reset"
|
#define D_LOG_SOME_SETTINGS_RESET "Some settings have been reset"
|
||||||
|
|
||||||
// Commands tasmota.ino
|
// Commands tasmota.ino
|
||||||
|
|
||||||
#define D_CMND_BACKLOG "Backlog"
|
#define D_CMND_BACKLOG "Backlog"
|
||||||
#define D_CMND_DELAY "Delay"
|
#define D_CMND_DELAY "Delay"
|
||||||
#define D_CMND_NODELAY "NoDelay"
|
#define D_CMND_NODELAY "NoDelay"
|
||||||
|
@ -496,6 +497,9 @@
|
||||||
#define D_JSON_RFRECEIVED "RfReceived"
|
#define D_JSON_RFRECEIVED "RfReceived"
|
||||||
#define D_CMND_RFRAW "RfRaw"
|
#define D_CMND_RFRAW "RfRaw"
|
||||||
|
|
||||||
|
#define D_CMND_RFRXPROTOCOL "RfRxProtocol"
|
||||||
|
#define D_JSON_ENABLED_MASK "Enabled-Mask"
|
||||||
|
|
||||||
// Commands xdrv_08_serial_bridge.ino
|
// Commands xdrv_08_serial_bridge.ino
|
||||||
#define D_CMND_SSERIALSEND "SSerialSend"
|
#define D_CMND_SSERIALSEND "SSerialSend"
|
||||||
#define D_CMND_SBAUDRATE "SBaudrate"
|
#define D_CMND_SBAUDRATE "SBaudrate"
|
||||||
|
|
|
@ -18,6 +18,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const char kTasmotaCommands[] PROGMEM = "|" // No prefix
|
const char kTasmotaCommands[] PROGMEM = "|" // No prefix
|
||||||
|
#ifdef BAZMODS
|
||||||
|
#ifdef USE_RC_SWITCH
|
||||||
|
D_CMND_RFRXPROTOCOL "|"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
D_CMND_BACKLOG "|" D_CMND_DELAY "|" D_CMND_POWER "|" D_CMND_STATUS "|" D_CMND_STATE "|" D_CMND_SLEEP "|" D_CMND_UPGRADE "|" D_CMND_UPLOAD "|" D_CMND_OTAURL "|"
|
D_CMND_BACKLOG "|" D_CMND_DELAY "|" D_CMND_POWER "|" D_CMND_STATUS "|" D_CMND_STATE "|" D_CMND_SLEEP "|" D_CMND_UPGRADE "|" D_CMND_UPLOAD "|" D_CMND_OTAURL "|"
|
||||||
D_CMND_SERIALLOG "|" D_CMND_RESTART "|" D_CMND_POWERONSTATE "|" D_CMND_PULSETIME "|" D_CMND_BLINKTIME "|" D_CMND_BLINKCOUNT "|" D_CMND_SAVEDATA "|"
|
D_CMND_SERIALLOG "|" D_CMND_RESTART "|" D_CMND_POWERONSTATE "|" D_CMND_PULSETIME "|" D_CMND_BLINKTIME "|" D_CMND_BLINKCOUNT "|" D_CMND_SAVEDATA "|"
|
||||||
D_CMND_SO "|" D_CMND_SETOPTION "|" D_CMND_TEMPERATURE_RESOLUTION "|" D_CMND_HUMIDITY_RESOLUTION "|" D_CMND_PRESSURE_RESOLUTION "|" D_CMND_POWER_RESOLUTION "|"
|
D_CMND_SO "|" D_CMND_SETOPTION "|" D_CMND_TEMPERATURE_RESOLUTION "|" D_CMND_HUMIDITY_RESOLUTION "|" D_CMND_PRESSURE_RESOLUTION "|" D_CMND_POWER_RESOLUTION "|"
|
||||||
|
@ -43,8 +48,12 @@ const char kTasmotaCommands[] PROGMEM = "|" // No prefix
|
||||||
"|Info|" D_CMND_TOUCH_CAL "|" D_CMND_TOUCH_THRES "|" D_CMND_TOUCH_NUM "|" D_CMND_CPU_FREQUENCY "|" D_CMND_WIFI
|
"|Info|" D_CMND_TOUCH_CAL "|" D_CMND_TOUCH_THRES "|" D_CMND_TOUCH_NUM "|" D_CMND_CPU_FREQUENCY "|" D_CMND_WIFI
|
||||||
#endif // ESP32
|
#endif // ESP32
|
||||||
;
|
;
|
||||||
|
|
||||||
void (* const TasmotaCommand[])(void) PROGMEM = {
|
void (* const TasmotaCommand[])(void) PROGMEM = {
|
||||||
|
#ifdef BAZMODS
|
||||||
|
#ifdef USE_RC_SWITCH
|
||||||
|
&CmndRfRxProtocol,
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
&CmndBacklog, &CmndDelay, &CmndPower, &CmndStatus, &CmndState, &CmndSleep, &CmndUpgrade, &CmndUpgrade, &CmndOtaUrl,
|
&CmndBacklog, &CmndDelay, &CmndPower, &CmndStatus, &CmndState, &CmndSleep, &CmndUpgrade, &CmndUpgrade, &CmndOtaUrl,
|
||||||
&CmndSeriallog, &CmndRestart, &CmndPowerOnState, &CmndPulsetime, &CmndBlinktime, &CmndBlinkcount, &CmndSavedata,
|
&CmndSeriallog, &CmndRestart, &CmndPowerOnState, &CmndPulsetime, &CmndBlinktime, &CmndBlinkcount, &CmndSavedata,
|
||||||
&CmndSetoption, &CmndSetoption, &CmndTemperatureResolution, &CmndHumidityResolution, &CmndPressureResolution, &CmndPowerResolution,
|
&CmndSetoption, &CmndSetoption, &CmndTemperatureResolution, &CmndHumidityResolution, &CmndPressureResolution, &CmndPowerResolution,
|
||||||
|
|
|
@ -16,7 +16,11 @@
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include "my_user_config.h"
|
||||||
|
|
||||||
|
// doesn't pickup defines while editing without this
|
||||||
|
// dunno if this is unique to my enviroment or everyone experiences it ..
|
||||||
#ifdef USE_RC_SWITCH
|
#ifdef USE_RC_SWITCH
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* RF send and receive using RCSwitch library https://github.com/sui77/rc-switch/
|
* RF send and receive using RCSwitch library https://github.com/sui77/rc-switch/
|
||||||
|
@ -32,8 +36,8 @@
|
||||||
#define D_JSON_RF_PULSE "Pulse"
|
#define D_JSON_RF_PULSE "Pulse"
|
||||||
#define D_JSON_RF_REPEAT "Repeat"
|
#define D_JSON_RF_REPEAT "Repeat"
|
||||||
|
|
||||||
const char kRfSendCommands[] PROGMEM = "|" // No prefix
|
const char kRfSendCommands[] PROGMEM = "|" D_CMND_RFSEND; // No prefix
|
||||||
D_CMND_RFSEND;
|
|
||||||
|
|
||||||
void (* const RfSendCommand[])(void) PROGMEM = {
|
void (* const RfSendCommand[])(void) PROGMEM = {
|
||||||
&CmndRfSend };
|
&CmndRfSend };
|
||||||
|
@ -86,6 +90,10 @@ void RfInit(void)
|
||||||
if (PinUsed(GPIO_RFRECV)) {
|
if (PinUsed(GPIO_RFRECV)) {
|
||||||
pinMode( Pin(GPIO_RFRECV), INPUT);
|
pinMode( Pin(GPIO_RFRECV), INPUT);
|
||||||
mySwitch.enableReceive(Pin(GPIO_RFRECV));
|
mySwitch.enableReceive(Pin(GPIO_RFRECV));
|
||||||
|
#ifdef BAZMODS
|
||||||
|
mySwitch.enabled_protocol_mask.longs.high32 = Settings.ex_adc_param1;
|
||||||
|
mySwitch.enabled_protocol_mask.longs.low32 = Settings.ex_adc_param2;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,6 +101,55 @@ void RfInit(void)
|
||||||
* Commands
|
* Commands
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
|
#ifdef BAZMODS
|
||||||
|
void CmndRfRxProtocol(void){
|
||||||
|
uint64_t thisbit;
|
||||||
|
// AddLog_P(LOG_LEVEL_INFO, PSTR("RFR: index:%d usridx:%d data_len:%d data:%s"),XdrvMailbox.index, XdrvMailbox.usridx, XdrvMailbox.data_len,XdrvMailbox.data);
|
||||||
|
// AddLog_P(LOG_LEVEL_INFO, PSTR("RFR: test data_len >0"));
|
||||||
|
//if (XdrvMailbox.data_len > 0) {
|
||||||
|
// AddLog_P(LOG_LEVEL_INFO, PSTR("RFR: test usridx ==1"));
|
||||||
|
if (XdrvMailbox.usridx==1) {
|
||||||
|
// AddLog_P(LOG_LEVEL_INFO, PSTR("RFR: test payload >=0"));
|
||||||
|
if(XdrvMailbox.payload >=0){
|
||||||
|
thisbit = (1ULL << (XdrvMailbox.index-1) );
|
||||||
|
if(XdrvMailbox.payload &1){
|
||||||
|
mySwitch.enabled_protocol_mask.value |= thisbit;
|
||||||
|
}else{
|
||||||
|
mySwitch.enabled_protocol_mask.value &= ~thisbit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
// AddLog_P(LOG_LEVEL_INFO, PSTR("RFR: test for a"));
|
||||||
|
if(XdrvMailbox.data[0]=='a'){
|
||||||
|
// AddLog_P(LOG_LEVEL_INFO, PSTR("RFR: set mask all"));
|
||||||
|
mySwitch.enabled_protocol_mask.value= (1ULL << mySwitch.getNumProtos())-1 ;
|
||||||
|
}else{
|
||||||
|
// AddLog_P(LOG_LEVEL_INFO, PSTR("RFR: set mask with value"));
|
||||||
|
mySwitch.enabled_protocol_mask.value = strtoull(XdrvMailbox.data,nullptr, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Settings.ex_adc_param1 = mySwitch.enabled_protocol_mask.longs.high32;
|
||||||
|
Settings.ex_adc_param2 = mySwitch.enabled_protocol_mask.longs.low32;
|
||||||
|
//}
|
||||||
|
ResponseClear();
|
||||||
|
ResponseAppend_P(PSTR("{\"" D_CMND_RFRXPROTOCOL "\":"));
|
||||||
|
ResponseAppend_P(PSTR("\""));
|
||||||
|
bool gotone = false;
|
||||||
|
thisbit=1;
|
||||||
|
for (int i=0;i<mySwitch.getNumProtos();i++){
|
||||||
|
// ResponseAppend_P(PSTR("%s%s%d"), (i) ? "," : "",(mySwitch.enabled_protocol_mask.value & thisbit) ? "" : "!", i+1);
|
||||||
|
if(mySwitch.enabled_protocol_mask.value & thisbit){
|
||||||
|
ResponseAppend_P(PSTR("%s%d"), (gotone) ? "," : "", i+1);
|
||||||
|
gotone = true;
|
||||||
|
}
|
||||||
|
thisbit <<=1;
|
||||||
|
}
|
||||||
|
if(!gotone)ResponseAppend_P(PSTR("None Enabled"));
|
||||||
|
ResponseAppend_P(PSTR("\""));
|
||||||
|
ResponseJsonEnd();
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
void CmndRfSend(void)
|
void CmndRfSend(void)
|
||||||
{
|
{
|
||||||
bool error = false;
|
bool error = false;
|
||||||
|
|
Loading…
Reference in New Issue