mirror of
				https://github.com/Show-maket/IR-protocol.git
				synced 2025-10-30 18:42:35 +00:00 
			
		
		
		
	Compare commits
	
		
			18 Commits
		
	
	
		
			RPI
			...
			90c41cfe2b
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 90c41cfe2b | |||
| 1ecc33e9c4 | |||
| 7ef8158a00 | |||
| 341ff3a470 | |||
| e6dbdcee74 | |||
| cf5a6641f4 | |||
| da152c65ee | |||
| 8f77c60cba | |||
| fd51a4935c | |||
| aa862d8f2c | |||
| 7c9529d42f | |||
| d4dd0e95fd | |||
| 04af094f4b | |||
| 2f4ac3ddf8 | |||
| 784365181e | |||
| c66d47e464 | |||
| 3057e78aeb | |||
| a958c1d3b2 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,5 +1,4 @@ | |||||||
| .vscode/* | .vscode/* | ||||||
| bin/* | bin/* | ||||||
| !.vscode/arduino.json |  | ||||||
| !.vscode/launch.json | !.vscode/launch.json | ||||||
| log/* | log/* | ||||||
							
								
								
									
										7
									
								
								.vscode/arduino.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.vscode/arduino.json
									
									
									
									
										vendored
									
									
								
							| @ -1,8 +1,7 @@ | |||||||
| { | { | ||||||
|     "configuration": "pnum=BLUEPILL_F103C8,upload_method=swdMethod,xserial=none,usb=CDCgen,xusb=FS,opt=osstd,dbg=none,rtlib=nano", |     "board": "STMicroelectronics:stm32:GenF4", | ||||||
|     "board": "STMicroelectronics:stm32:GenF1", |  | ||||||
|     "port": "COM17", |     "port": "COM17", | ||||||
|     "output": "bin", |  | ||||||
|     "prebuild": "if exist bin rd /s /q bin", |     "prebuild": "if exist bin rd /s /q bin", | ||||||
|     "sketch": "IR-protocol.ino" |     "sketch": "IR-protocol.ino", | ||||||
|  |     "configuration": "clock=25MHz,pnum=MAKET_F401RETX,upload_method=dfuMethod,xserial=generic,usb=CDCgen,xusb=FS,opt=osstd,dbg=none,rtlib=nano" | ||||||
| } | } | ||||||
							
								
								
									
										121
									
								
								IR-protocol.ino
									
									
									
									
									
								
							
							
						
						
									
										121
									
								
								IR-protocol.ino
									
									
									
									
									
								
							| @ -4,24 +4,24 @@ | |||||||
| #include "MemoryCheck.h" | #include "MemoryCheck.h" | ||||||
| /////////////// Pinout /////////////// | /////////////// Pinout /////////////// | ||||||
|  |  | ||||||
| #define dec0_PIN PB0 | #define dec0_PIN PIN_KT1_IN | ||||||
| #define dec1_PIN PB1 | #define dec1_PIN PIN_KT2_IN | ||||||
| #define dec2_PIN PA2 | #define dec2_PIN PIN_KT3_IN | ||||||
| #define dec3_PIN PB3 | #define dec3_PIN PIN_KT4_IN | ||||||
| #define dec4_PIN PB4 | #define dec4_PIN PIN_KT5_IN | ||||||
| #define dec5_PIN PB5 | #define dec5_PIN PIN_KT6_IN | ||||||
| #define dec6_PIN PB6 | #define dec6_PIN PIN_KT7_IN | ||||||
| #define dec7_PIN PB7 | #define dec7_PIN PIN_KT8_IN | ||||||
| #define dec8_PIN PB8 | // #define dec8_PIN PB8 | ||||||
| #define dec9_PIN PB9 | // #define dec9_PIN PB9 | ||||||
| #define dec10_PIN PB10 | // #define dec10_PIN PB10 | ||||||
| #define dec11_PIN PB11 | // #define dec11_PIN PB11 | ||||||
| #define dec12_PIN PB12 | // #define dec12_PIN PB12 | ||||||
| #define dec13_PIN PB13 | // #define dec13_PIN PB13 | ||||||
| #define dec14_PIN PB14 | // #define dec14_PIN PB14 | ||||||
| #define dec15_PIN PB15 | // #define dec15_PIN PB15 | ||||||
|  |  | ||||||
| #define LoopOut PA7 | #define LoopOut PC13 | ||||||
|  |  | ||||||
| #define dec_ISR(n) \ | #define dec_ISR(n) \ | ||||||
|     void dec_##n##_ISR() { dec##n.isr(); } |     void dec_##n##_ISR() { dec##n.isr(); } | ||||||
| @ -31,9 +31,9 @@ | |||||||
|  |  | ||||||
| #define decPinMode(n) pinMode(dec##n##_PIN, INPUT_PULLUP); | #define decPinMode(n) pinMode(dec##n##_PIN, INPUT_PULLUP); | ||||||
| #define decAttach(n) attachInterrupt(dec##n##_PIN, dec_##n##_ISR, CHANGE); | #define decAttach(n) attachInterrupt(dec##n##_PIN, dec_##n##_ISR, CHANGE); | ||||||
| #define decSetup(n) /* decPinMode(n); */ decAttach(n); | #define decSetup(n) decPinMode(n); decAttach(n); | ||||||
| #define decTick(n) dec##n.tick(); | #define decTick(n) dec##n.tick(); | ||||||
| #define decStat(n) rx_flag |= statusSimple(dec##n); | #define decStat(n) rx_flag |= status/* Simple */(dec##n); | ||||||
|  |  | ||||||
| //////////////// Ini ///////////////// | //////////////// Ini ///////////////// | ||||||
|  |  | ||||||
| @ -43,11 +43,11 @@ | |||||||
| //////////////// Var ///////////////// | //////////////// Var ///////////////// | ||||||
| // IR_Encoder encForward(PA5, 42 /* , &decBackward */); | // IR_Encoder encForward(PA5, 42 /* , &decBackward */); | ||||||
|  |  | ||||||
| IR_Encoder enc0(PA5, 42 /* , &decBackward */); | IR_Encoder enc0(PIN_KT8_OUT, 42 /* , &decBackward */); | ||||||
| IR_Encoder enc1(PA4, 127 /* , &decBackward */); | // IR_Encoder enc1(PA1, 127 /* , &decBackward */); | ||||||
| IR_Encoder enc2(PA3, 137 /* , &decBackward */); | // IR_Encoder enc2(PA2, 137 /* , &decBackward */); | ||||||
| IR_Encoder enc3(PA0, 777 /* , &decBackward */); | // IR_Encoder enc3(PA3, 777 /* , &decBackward */); | ||||||
| IR_Encoder enc10(PC15, 555 /* , &decBackward */); | // IR_Encoder enc10(PA4, 555 /* , &decBackward */); | ||||||
| // IR_Encoder enc11(PC14, 127 /* , &decBackward */); | // IR_Encoder enc11(PC14, 127 /* , &decBackward */); | ||||||
| // IR_Encoder enc12(PC13, 137 /* , &decBackward */); | // IR_Encoder enc12(PC13, 137 /* , &decBackward */); | ||||||
| // IR_Encoder enc13(PA12, 777 /* , &decBackward */); | // IR_Encoder enc13(PA12, 777 /* , &decBackward */); | ||||||
| @ -71,12 +71,12 @@ dec_Ini(4); | |||||||
| dec_Ini(5); | dec_Ini(5); | ||||||
| dec_Ini(6); | dec_Ini(6); | ||||||
| dec_Ini(7); | dec_Ini(7); | ||||||
| dec_Ini(8); | // dec_Ini(8); | ||||||
| dec_Ini(9); | // dec_Ini(9); | ||||||
| dec_Ini(10); | // dec_Ini(10); | ||||||
| dec_Ini(11); | // dec_Ini(11); | ||||||
| dec_Ini(12); | // dec_Ini(12); | ||||||
| dec_Ini(13); | // dec_Ini(13); | ||||||
|  |  | ||||||
| ///////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////// | ||||||
| uint8_t data0[] = {}; | uint8_t data0[] = {}; | ||||||
| @ -91,11 +91,11 @@ uint16_t targetAddr = IR_Broadcast; | |||||||
| Timer t1(500, millis, []() | Timer t1(500, millis, []() | ||||||
|          { |          { | ||||||
|              // Serial.println( digitalPinToBitMask(enc0.getPin()), BIN); |              // Serial.println( digitalPinToBitMask(enc0.getPin()), BIN); | ||||||
|              enc0.sendData(IR_Broadcast, data4, sizeof(data4)); |             //  enc0.sendData(IR_Broadcast, data4, sizeof(data4)); | ||||||
|              enc1.sendData(IR_Broadcast, data3, sizeof(data3)); |             //  enc1.sendData(IR_Broadcast, data3, sizeof(data3)); | ||||||
|              enc2.sendData(IR_Broadcast, data2, sizeof(data2)); |             //  enc2.sendData(IR_Broadcast, data2, sizeof(data2)); | ||||||
|              enc3.sendData(IR_Broadcast, data1, sizeof(data1)); |             //  enc3.sendData(IR_Broadcast, data1, sizeof(data1)); | ||||||
|              enc10.sendData(IR_Broadcast, data4, sizeof(data4)); |             //  enc10.sendData(IR_Broadcast, data4, sizeof(data4)); | ||||||
|              //  enc11.sendData(IR_Broadcast, data3, sizeof(data3)); |              //  enc11.sendData(IR_Broadcast, data3, sizeof(data3)); | ||||||
|              //  enc12.sendData(IR_Broadcast, data2, sizeof(data2)); |              //  enc12.sendData(IR_Broadcast, data2, sizeof(data2)); | ||||||
|              //  enc13.sendData(IR_Broadcast, data1, sizeof(data1)); |              //  enc13.sendData(IR_Broadcast, data1, sizeof(data1)); | ||||||
| @ -203,7 +203,7 @@ void setup() | |||||||
|     pinMode(LoopOut, OUTPUT); |     pinMode(LoopOut, OUTPUT); | ||||||
|     // pinMode(SignalDetectLed, OUTPUT); |     // pinMode(SignalDetectLed, OUTPUT); | ||||||
|  |  | ||||||
|     pinMode(dec1_PIN, INPUT_PULLUP); |     pinMode(dec0_PIN, INPUT_PULLUP); | ||||||
|     // pinMode(dec2_PIN, INPUT_PULLUP); |     // pinMode(dec2_PIN, INPUT_PULLUP); | ||||||
|  |  | ||||||
|     static IR_DecoderRaw *blind[]{ |     static IR_DecoderRaw *blind[]{ | ||||||
| @ -215,34 +215,34 @@ void setup() | |||||||
|         &dec5, |         &dec5, | ||||||
|         &dec6, |         &dec6, | ||||||
|         &dec7, |         &dec7, | ||||||
|         &dec8, |         // &dec8, | ||||||
|         &dec9, |         // &dec9, | ||||||
|         &dec10, |         // &dec10, | ||||||
|         &dec11, |         // &dec11, | ||||||
|         &dec12, |         // &dec12, | ||||||
|         &dec13, |         // &dec13, | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     // enc0.setBlindDecoders(blind, sizeof(blind) / sizeof(IR_DecoderRaw *)); |     enc0.setBlindDecoders(blind, sizeof(blind) / sizeof(IR_DecoderRaw *)); | ||||||
|     // enc1.setBlindDecoders(blind, sizeof(blind) / sizeof(IR_DecoderRaw *)); |     // enc1.setBlindDecoders(blind, sizeof(blind) / sizeof(IR_DecoderRaw *)); | ||||||
|     // enc2.setBlindDecoders(blind, sizeof(blind) / sizeof(IR_DecoderRaw *)); |     // enc2.setBlindDecoders(blind, sizeof(blind) / sizeof(IR_DecoderRaw *)); | ||||||
|     // enc3.setBlindDecoders(blind, sizeof(blind) / sizeof(IR_DecoderRaw *)); |     // enc3.setBlindDecoders(blind, sizeof(blind) / sizeof(IR_DecoderRaw *)); | ||||||
|     // enc10.setBlindDecoders(blind, sizeof(blind) / sizeof(IR_DecoderRaw *)); |     // enc10.setBlindDecoders(blind, sizeof(blind) / sizeof(IR_DecoderRaw *)); | ||||||
|  |  | ||||||
|     decSetup(0); |     decSetup(0); | ||||||
|     // decSetup(1); |     decSetup(1); | ||||||
|     // decSetup(2); |     decSetup(2); | ||||||
|     // decSetup(3); |     decSetup(3); | ||||||
|     // decSetup(4); |     decSetup(4); | ||||||
|     // decSetup(5); |     decSetup(5); | ||||||
|     // decSetup(6); |     decSetup(6); | ||||||
|     // decSetup(7); |     decSetup(7); | ||||||
|     // decSetup(8); |     // decSetup(8); | ||||||
|     // decSetup(9); |     // decSetup(9); | ||||||
|     // decSetup(10); |     // decSetup(10); | ||||||
|     decSetup(11); |     // decSetup(11); | ||||||
|     decSetup(12); |     // decSetup(12); | ||||||
|     decSetup(13); |     // decSetup(13); | ||||||
| } | } | ||||||
|  |  | ||||||
| void loop() | void loop() | ||||||
| @ -261,12 +261,12 @@ void loop() | |||||||
|     decStat(5); |     decStat(5); | ||||||
|     decStat(6); |     decStat(6); | ||||||
|     decStat(7); |     decStat(7); | ||||||
|     decStat(8); |     // decStat(8); | ||||||
|     decStat(9); |     // decStat(9); | ||||||
|     decStat(10); |     // decStat(10); | ||||||
|     decStat(11); |     // decStat(11); | ||||||
|     decStat(12); |     // decStat(12); | ||||||
|     decStat(13); |     // decStat(13); | ||||||
|  |  | ||||||
|     // status(decForward); |     // status(decForward); | ||||||
|     // status(decBackward); |     // status(decBackward); | ||||||
| @ -321,7 +321,7 @@ void detectSignal() | |||||||
| } | } | ||||||
|  |  | ||||||
| // test | // test | ||||||
| void status(IR_Decoder &dec) | bool status(IR_Decoder &dec) | ||||||
| { | { | ||||||
|     if (dec.gotData.available()) |     if (dec.gotData.available()) | ||||||
|     { |     { | ||||||
| @ -572,4 +572,5 @@ void status(IR_Decoder &dec) | |||||||
|         // obj->resetAvailable(); |         // obj->resetAvailable(); | ||||||
|         Serial.write(str.c_str()); |         Serial.write(str.c_str()); | ||||||
|     } |     } | ||||||
|  |     return false; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,17 +1,48 @@ | |||||||
| #include "IR_Decoder.h" | #include "IR_Decoder.h" | ||||||
|  |  | ||||||
| std::list<IR_Decoder*>& IR_Decoder::get_dec_list() // определение функции | std::list<IR_Decoder *> &IR_Decoder::get_dec_list() // определение функции | ||||||
| { | { | ||||||
|     static std::list<IR_Decoder*> dec_list; // статическая локальная переменная |     static std::list<IR_Decoder *> dec_list; // статическая локальная переменная | ||||||
|     return dec_list;                         // возвращается ссылка на переменную |     return dec_list;                         // возвращается ссылка на переменную | ||||||
| } | } | ||||||
|  |  | ||||||
| IR_Decoder::IR_Decoder(const uint8_t pin, uint16_t addr, IR_Encoder *encPair) | // IR_Decoder::IR_Decoder() {}; | ||||||
|  | IR_Decoder::IR_Decoder(const uint8_t pin, uint16_t addr, IR_Encoder *encPair, bool autoHandle) | ||||||
|     : IR_DecoderRaw(pin, addr, encPair) |     : IR_DecoderRaw(pin, addr, encPair) | ||||||
| { | { | ||||||
|     get_dec_list().push_back(this); |     get_dec_list().push_back(this); | ||||||
|  |     if(autoHandle){ | ||||||
|  |         enable(); | ||||||
|  |     } | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | void IR_Decoder::enable() | ||||||
|  | { | ||||||
|  |     auto &dec_list = get_dec_list(); | ||||||
|  |     if (std::find(dec_list.begin(), dec_list.end(), this) == dec_list.end()) | ||||||
|  |     { | ||||||
|  |         dec_list.push_back(this); | ||||||
|  |     } | ||||||
|  |     attachInterrupt(pin, (*this)(), CHANGE); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void IR_Decoder::disable() | ||||||
|  | { | ||||||
|  |     detachInterrupt(pin); | ||||||
|  |     auto &dec_list = get_dec_list(); | ||||||
|  |     auto it = std::find(dec_list.begin(), dec_list.end(), this); | ||||||
|  |     if (it != dec_list.end()) | ||||||
|  |     { | ||||||
|  |         dec_list.erase(it); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | std::function<void()> IR_Decoder::operator()() | ||||||
|  | { | ||||||
|  |     return std::bind(&IR_Decoder::isr, this); | ||||||
|  | } | ||||||
|  |  | ||||||
| IR_Decoder::~IR_Decoder() | IR_Decoder::~IR_Decoder() | ||||||
| { | { | ||||||
|     IR_Decoder::get_dec_list().remove(this); |     IR_Decoder::get_dec_list().remove(this); | ||||||
|  | |||||||
| @ -24,7 +24,14 @@ public: | |||||||
|     PacketTypes::Request gotRequest; |     PacketTypes::Request gotRequest; | ||||||
|     PacketTypes::BasePack gotRaw; |     PacketTypes::BasePack gotRaw; | ||||||
|  |  | ||||||
|     IR_Decoder(const uint8_t pin, uint16_t addr, IR_Encoder *encPair = nullptr); |     // IR_Decoder(); | ||||||
|  |     IR_Decoder(const uint8_t pin, uint16_t addr = 0, IR_Encoder *encPair = nullptr, bool autoHandle = true); | ||||||
|  |  | ||||||
|  |     std::function<void()> operator()(); | ||||||
|  |  | ||||||
|  |     void enable(); | ||||||
|  |     void disable(); | ||||||
|  |  | ||||||
|     ~IR_Decoder(); |     ~IR_Decoder(); | ||||||
|  |  | ||||||
|     static void tick(); |     static void tick(); | ||||||
|  | |||||||
| @ -47,7 +47,7 @@ volatile uint32_t time_; | |||||||
|  |  | ||||||
| void IR_DecoderRaw::isr() | void IR_DecoderRaw::isr() | ||||||
| { | { | ||||||
|  |     // Serial.print("ISR\n"); | ||||||
|     if(isPairSending){ |     if(isPairSending){ | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| @ -58,6 +58,7 @@ void IR_DecoderRaw::isr() | |||||||
|     interrupts(); |     interrupts(); | ||||||
|     if (time_ < oldTime) |     if (time_ < oldTime) | ||||||
|     { |     { | ||||||
|  |  | ||||||
| #ifdef  IRDEBUG | #ifdef  IRDEBUG | ||||||
|         Serial.print("\n"); |         Serial.print("\n"); | ||||||
|         Serial.print("count:         "); |         Serial.print("count:         "); | ||||||
|  | |||||||
| @ -5,13 +5,13 @@ | |||||||
| #define ISR_Out 10 | #define ISR_Out 10 | ||||||
| #define TestOut 13 | #define TestOut 13 | ||||||
|  |  | ||||||
| std::list<IR_Encoder*>& IR_Encoder::get_enc_list() // определение функции | std::list<IR_Encoder *> &IR_Encoder::get_enc_list() // определение функции | ||||||
| { | { | ||||||
|     static std::list<IR_Encoder*> dec_list; // статическая локальная переменная |     static std::list<IR_Encoder *> dec_list; // статическая локальная переменная | ||||||
|     return dec_list;                         // возвращается ссылка на переменную |     return dec_list;                         // возвращается ссылка на переменную | ||||||
| } | } | ||||||
|  |  | ||||||
| IR_Encoder::IR_Encoder(uint8_t pin, uint16_t addr, IR_DecoderRaw *decPair) | IR_Encoder::IR_Encoder(uint8_t pin, uint16_t addr, IR_DecoderRaw *decPair, bool autoHandle) | ||||||
| { | { | ||||||
|     setPin(pin); |     setPin(pin); | ||||||
|     id = addr; |     id = addr; | ||||||
| @ -21,8 +21,7 @@ IR_Encoder::IR_Encoder(uint8_t pin, uint16_t addr, IR_DecoderRaw *decPair) | |||||||
| #if disablePairDec | #if disablePairDec | ||||||
|     if (decPair != nullptr) |     if (decPair != nullptr) | ||||||
|     { |     { | ||||||
|         blindDecoders = new IR_DecoderRaw *[1] |         blindDecoders = new IR_DecoderRaw *[1]{decPair}; | ||||||
|         { decPair }; |  | ||||||
|         decodersCount = 1; |         decodersCount = 1; | ||||||
|     } |     } | ||||||
| #endif | #endif | ||||||
| @ -30,10 +29,33 @@ IR_Encoder::IR_Encoder(uint8_t pin, uint16_t addr, IR_DecoderRaw *decPair) | |||||||
|     { |     { | ||||||
|         decPair->encoder = this; |         decPair->encoder = this; | ||||||
|     } |     } | ||||||
|     pinMode(pin,OUTPUT); |     pinMode(pin, OUTPUT); | ||||||
|  |  | ||||||
|  |     if (autoHandle) | ||||||
|  |     { | ||||||
|         get_enc_list().push_back(this); |         get_enc_list().push_back(this); | ||||||
|  |     } | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | void IR_Encoder::enable() | ||||||
|  | { | ||||||
|  |     auto &enc_list = get_enc_list(); | ||||||
|  |     if (std::find(enc_list.begin(), enc_list.end(), this) == enc_list.end()) | ||||||
|  |     { | ||||||
|  |         enc_list.push_back(this); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void IR_Encoder::disable() | ||||||
|  | { | ||||||
|  |     auto &enc_list = get_enc_list(); | ||||||
|  |     auto it = std::find(enc_list.begin(), enc_list.end(), this); | ||||||
|  |     if (it != enc_list.end()) | ||||||
|  |     { | ||||||
|  |         enc_list.erase(it); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| void IR_Encoder::setBlindDecoders(IR_DecoderRaw *decoders[], uint8_t count) | void IR_Encoder::setBlindDecoders(IR_DecoderRaw *decoders[], uint8_t count) | ||||||
| { | { | ||||||
| #if disablePairDec | #if disablePairDec | ||||||
| @ -46,20 +68,19 @@ void IR_Encoder::setBlindDecoders(IR_DecoderRaw *decoders[], uint8_t count) | |||||||
|  |  | ||||||
| IR_Encoder::~IR_Encoder() | IR_Encoder::~IR_Encoder() | ||||||
| { | { | ||||||
|     delete[] bitLow; |  | ||||||
|     delete[] bitHigh; |  | ||||||
|     get_enc_list().remove(this); |     get_enc_list().remove(this); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| void IR_Encoder::sendData(uint16_t addrTo, uint8_t dataByte, bool needAccept) | void IR_Encoder::sendData(uint16_t addrTo, uint8_t dataByte, bool needAccept) | ||||||
| { | { | ||||||
|     uint8_t *dataPtr = new uint8_t[1]; |     sendData(addrTo, &dataByte, 1, needAccept); | ||||||
|     dataPtr[0] = dataByte; |  | ||||||
|     sendData(addrTo, dataPtr, 1, needAccept); |  | ||||||
|     delete[] dataPtr; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void IR_Encoder::sendData(uint16_t addrTo, uint8_t *data, uint8_t len, bool needAccept) | void IR_Encoder::sendData(uint16_t addrTo, uint8_t *data, uint8_t len, bool needAccept){ | ||||||
|  |     sendDataFULL(id, addrTo, data, len, needAccept); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void IR_Encoder::sendDataFULL(uint16_t addrFrom, uint16_t addrTo, uint8_t *data, uint8_t len, bool needAccept) | ||||||
| { | { | ||||||
|     if (len > bytePerPack) |     if (len > bytePerPack) | ||||||
|     { |     { | ||||||
| @ -76,8 +97,8 @@ void IR_Encoder::sendData(uint16_t addrTo, uint8_t *data, uint8_t len, bool need | |||||||
|     sendBuffer[0] = msgType; |     sendBuffer[0] = msgType; | ||||||
|  |  | ||||||
|     // addr_self |     // addr_self | ||||||
|     sendBuffer[1] = id >> 8 & 0xFF; |     sendBuffer[1] = addrFrom >> 8 & 0xFF; | ||||||
|     sendBuffer[2] = id & 0xFF; |     sendBuffer[2] = addrFrom & 0xFF; | ||||||
|  |  | ||||||
|     // addr_to |     // addr_to | ||||||
|     sendBuffer[3] = addrTo >> 8 & 0xFF; |     sendBuffer[3] = addrTo >> 8 & 0xFF; | ||||||
| @ -153,7 +174,7 @@ void IR_Encoder::sendBack(uint8_t data) | |||||||
|     _sendBack(false, 0, &data, 1); |     _sendBack(false, 0, &data, 1); | ||||||
| } | } | ||||||
|  |  | ||||||
| void IR_Encoder::sendBack(uint8_t *data , uint8_t len) | void IR_Encoder::sendBack(uint8_t *data, uint8_t len) | ||||||
| { | { | ||||||
|     _sendBack(false, 0, data, len); |     _sendBack(false, 0, data, len); | ||||||
| } | } | ||||||
| @ -242,9 +263,11 @@ void IR_Encoder::rawSend(uint8_t *ptr, uint8_t len) | |||||||
|     // interrupts(); |     // interrupts(); | ||||||
| } | } | ||||||
|  |  | ||||||
| void IR_Encoder::isr(){ | void IR_Encoder::isr() | ||||||
|  | { | ||||||
|     //  Serial.println(get_enc_list().size()); |     //  Serial.println(get_enc_list().size()); | ||||||
|     for(const auto &element : get_enc_list()){ |     for (const auto &element : get_enc_list()) | ||||||
|  |     { | ||||||
|         element->_isr(); |         element->_isr(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -259,7 +282,6 @@ void IR_Encoder::_isr() | |||||||
|     port->ODR &= ~(mask); |     port->ODR &= ~(mask); | ||||||
|     port->ODR |= mask & (ir_out_virtual ? (uint16_t)0xFFFF : (uint16_t)0x0000); |     port->ODR |= mask & (ir_out_virtual ? (uint16_t)0xFFFF : (uint16_t)0x0000); | ||||||
|  |  | ||||||
|  |  | ||||||
|     if (toggleCounter) |     if (toggleCounter) | ||||||
|     { |     { | ||||||
|         toggleCounter--; |         toggleCounter--; | ||||||
| @ -392,9 +414,16 @@ void IR_Encoder::addSync(bool *prev, bool *next) | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| uint8_t* IR_Encoder::bitHigh = new uint8_t[2]{ | uint8_t IR_Encoder::bitHigh[2] = { | ||||||
|     (bitPauseTakts) * 2 - 1, |     (bitPauseTakts) * 2 - 1, | ||||||
|     (bitActiveTakts) * 2 - 1}; |     (bitActiveTakts) * 2 - 1}; | ||||||
| uint8_t* IR_Encoder::bitLow = new uint8_t[2]{ | uint8_t IR_Encoder::bitLow[2] = { | ||||||
|         (bitPauseTakts/2 + bitActiveTakts) * 2 - 1, |     (bitPauseTakts / 2 + bitActiveTakts) * 2 - 1, | ||||||
|         (bitPauseTakts) - 1}; |     (bitPauseTakts)-1}; | ||||||
|  |  | ||||||
|  | // uint8_t* IR_Encoder::bitHigh = new uint8_t[2]{ | ||||||
|  | //         (bitPauseTakts) * 2 - 0, | ||||||
|  | //         (bitActiveTakts) * 2 - 0}; | ||||||
|  | // uint8_t* IR_Encoder::bitLow = new uint8_t[2]{ | ||||||
|  | //         (bitPauseTakts/2 + bitActiveTakts) * 2 - 0, | ||||||
|  | //         (bitPauseTakts) - 0}; | ||||||
|  | |||||||
							
								
								
									
										16
									
								
								IR_Encoder.h
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								IR_Encoder.h
									
									
									
									
									
								
							| @ -4,27 +4,31 @@ | |||||||
| // TODO: Отложенная передача после завершения приема | // TODO: Отложенная передача после завершения приема | ||||||
|  |  | ||||||
| class IR_DecoderRaw; | class IR_DecoderRaw; | ||||||
| class IR_Encoder : IR_FOX | class IR_Encoder : public IR_FOX | ||||||
| { | { | ||||||
|     friend IR_DecoderRaw; |     friend IR_DecoderRaw; | ||||||
|  |  | ||||||
| public: | public: | ||||||
| private: | private: | ||||||
|     uint16_t id; /// @brief Адрес передатчика |     // uint16_t id; /// @brief Адрес передатчика | ||||||
| public: | public: | ||||||
|      |  | ||||||
|     /// @brief Класс передатчика |     /// @brief Класс передатчика | ||||||
|     /// @param addr Адрес передатчика |     /// @param addr Адрес передатчика | ||||||
|     /// @param pin  Вывод передатчика |     /// @param pin  Вывод передатчика | ||||||
|     /// @param decPair Приёмник, для которого отключается приём в момент передачи передатчиком |     /// @param decPair Приёмник, для которого отключается приём в момент передачи передатчиком | ||||||
|     IR_Encoder(uint8_t pin, uint16_t addr, IR_DecoderRaw *decPair = nullptr); |     IR_Encoder(uint8_t pin, uint16_t addr = 0, IR_DecoderRaw *decPair = nullptr, bool autoHandle = true); | ||||||
|     static void isr(); |     static void isr(); | ||||||
|  |  | ||||||
|  |     void enable(); | ||||||
|  |     void disable(); | ||||||
|  |  | ||||||
|     void setBlindDecoders(IR_DecoderRaw *decoders[], uint8_t count); |     void setBlindDecoders(IR_DecoderRaw *decoders[], uint8_t count); | ||||||
|     void rawSend(uint8_t *ptr, uint8_t len); |     void rawSend(uint8_t *ptr, uint8_t len); | ||||||
|  |  | ||||||
|     void sendData(uint16_t addrTo, uint8_t dataByte, bool needAccept = false); |     void sendData(uint16_t addrTo, uint8_t dataByte, bool needAccept = false); | ||||||
|     void sendData(uint16_t addrTo, uint8_t *data = nullptr, uint8_t len = 0, bool needAccept = false); |     void sendData(uint16_t addrTo, uint8_t *data = nullptr, uint8_t len = 0, bool needAccept = false); | ||||||
|  |     void sendDataFULL(uint16_t addrFrom, uint16_t addrTo, uint8_t *data = nullptr, uint8_t len = 0, bool needAccept = false); | ||||||
|  |  | ||||||
|  |  | ||||||
|     void sendAccept(uint16_t addrTo, uint8_t customByte = 0); |     void sendAccept(uint16_t addrTo, uint8_t customByte = 0); | ||||||
|     void sendRequest(uint16_t addrTo); |     void sendRequest(uint16_t addrTo); | ||||||
| @ -82,8 +86,8 @@ private: | |||||||
|         uint8_t low; |         uint8_t low; | ||||||
|         uint8_t high; |         uint8_t high; | ||||||
|     }; |     }; | ||||||
|     static uint8_t *bitHigh; |     static uint8_t bitHigh[2]; | ||||||
|     static uint8_t *bitLow; |     static uint8_t bitLow[2]; | ||||||
|     uint8_t *currentBitSequence = bitLow; |     uint8_t *currentBitSequence = bitLow; | ||||||
|     volatile SignalPart signal; |     volatile SignalPart signal; | ||||||
| }; | }; | ||||||
|  | |||||||
							
								
								
									
										38
									
								
								IR_config.h
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								IR_config.h
									
									
									
									
									
								
							| @ -8,19 +8,32 @@ | |||||||
|  |  | ||||||
| */ | */ | ||||||
| // Адресация с 1 до 65 499 | // Адресация с 1 до 65 499 | ||||||
| #define IR_Broadcast 65000 // 65 500 ~ 65 535 - широковещательные пакеты (всем), возможно разделить на 35 типов | #define IR_Broadcast 65000 // 65 500 ~ 65 535 - широковещательные пакеты (всем) | ||||||
| /* | /* | ||||||
| Адрес 0 запрещен и зарезервирован под NULL, либо тесты | *Адресное пространство: | ||||||
| IR_MSG_ACCEPT с адреса 0 воспринимается всеми устройствами |     Адрес 0 запрещен и зарезервирован под NULL, либо тесты | ||||||
|  |     IR_MSG_ACCEPT с адреса 0 воспринимается всеми устройствами | ||||||
|  | */  | ||||||
|  | //**** Контрольные точки ****** | ||||||
|  | #define IR_MAX_ADDR_CPU 64999 | ||||||
|  | #define IR_MIN_ADDR_CPU 32000 | ||||||
|  |  | ||||||
|  | // //***** Группы машинок ******** | ||||||
|  | // #define IR_MAX_CAR_GROUP 31999 | ||||||
|  | // #define IR_MIN_CAR_GROUP 30000 | ||||||
|  |  | ||||||
| Адресное пространство: | // //********** FREE ************* | ||||||
|  | // #define IR_MAX_FREE 31999 | ||||||
| Излучатели контрольных точек: 1000 ~ 1999 | // #define IR_MIN_FREE 2000 | ||||||
| Излучатели без обратной связиЖ 2000 ~ 2999 |  | ||||||
| Излучатели светофоров: 3000 ~ 3999 |  | ||||||
|  |  | ||||||
|  | //********* Машинки *********** | ||||||
|  | #define IR_MAX_CAR 31999 | ||||||
|  | #define IR_MIN_CAR 100 | ||||||
|  |  | ||||||
|  | //***** Пульты управления ***** | ||||||
|  | #define IR_MAX_CONTROLLER 99 | ||||||
|  | #define IR_MIN_CONTROLLER 0 | ||||||
|  | /* | ||||||
|  |  | ||||||
| /```````````````````````````````````````````````` data pack `````````````````````````````````````````````\                                   | /```````````````````````````````````````````````` data pack `````````````````````````````````````````````\                                   | ||||||
|                                                                                                           |                                                                                                           | ||||||
| @ -142,6 +155,11 @@ typedef uint16_t crc_t; | |||||||
| #define bitTime (bitTakts * carrierPeriod)        // Общая длительность бита | #define bitTime (bitTakts * carrierPeriod)        // Общая длительность бита | ||||||
| #define tolerance 300U | #define tolerance 300U | ||||||
|  |  | ||||||
|  | constexpr uint16_t test_all_Time = bitTime; | ||||||
|  | constexpr uint16_t test_all_Takts = bitTakts * 2; | ||||||
|  | constexpr uint16_t test_hi = ((bitPauseTakts) * 2 - 0) + ((bitActiveTakts) * 2 - 0); | ||||||
|  | constexpr uint16_t test_low = ((bitPauseTakts / 2 + bitActiveTakts) * 2 - 0) + ((bitPauseTakts)-0); | ||||||
|  |  | ||||||
| class IR_FOX | class IR_FOX | ||||||
| { | { | ||||||
| public: | public: | ||||||
| @ -178,11 +196,11 @@ public: | |||||||
|         uint16_t rTime = 0; |         uint16_t rTime = 0; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     inline uint16_t getId() { return id; } |     inline uint16_t getId() const { return id; } | ||||||
|     inline void setId(uint16_t id) { this->id = id; } |     inline void setId(uint16_t id) { this->id = id; } | ||||||
|     static void checkAddressRuleApply(uint16_t address, uint16_t id, bool &flag); |     static void checkAddressRuleApply(uint16_t address, uint16_t id, bool &flag); | ||||||
|     void setPin(uint8_t pin); |     void setPin(uint8_t pin); | ||||||
|     inline uint8_t getPin(){return pin;}; |     inline uint8_t getPin() { return pin; }; | ||||||
|  |  | ||||||
| protected: | protected: | ||||||
|     uint16_t id; |     uint16_t id; | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user